aboutsummaryrefslogtreecommitdiff
path: root/gcc/opts-common.c
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2020-12-15 09:57:19 +0100
committerMartin Liska <mliska@suse.cz>2020-12-16 10:20:45 +0100
commit5c5eb7e4872025e8d5e8ae2f0e568403f7c8803d (patch)
tree100fe6eea939511c8f90398108f9ccdbeedb0e69 /gcc/opts-common.c
parent61e3c180ad6913fa5af39059de5ba7b3bde50cda (diff)
downloadgcc-5c5eb7e4872025e8d5e8ae2f0e568403f7c8803d.zip
gcc-5c5eb7e4872025e8d5e8ae2f0e568403f7c8803d.tar.gz
gcc-5c5eb7e4872025e8d5e8ae2f0e568403f7c8803d.tar.bz2
options: fix integer overflow
gcc/ChangeLog: PR rtl-optimization/98271 PR rtl-optimization/98276 PR tree-optimization/98279 * opts-common.c (set_option): Do not allow overflow for integer arguments. gcc/testsuite/ChangeLog: PR rtl-optimization/98271 PR rtl-optimization/98276 PR tree-optimization/98279 * gcc.dg/pr98271.c: New test.
Diffstat (limited to 'gcc/opts-common.c')
-rw-r--r--gcc/opts-common.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/gcc/opts-common.c b/gcc/opts-common.c
index 8ec8c1e..30be7d5 100644
--- a/gcc/opts-common.c
+++ b/gcc/opts-common.c
@@ -1466,9 +1466,15 @@ set_option (struct gcc_options *opts, struct gcc_options *opts_set,
}
else
{
- *(int *) flag_var = value;
- if (set_flag_var)
- *(int *) set_flag_var = 1;
+ if (value > INT_MAX)
+ error_at (loc, "argument to %qs is bigger than %d",
+ option->opt_text, INT_MAX);
+ else
+ {
+ *(int *) flag_var = value;
+ if (set_flag_var)
+ *(int *) set_flag_var = 1;
+ }
}
break;