diff options
author | Martin Liska <mliska@suse.cz> | 2020-12-15 09:57:19 +0100 |
---|---|---|
committer | Martin Liska <mliska@suse.cz> | 2020-12-16 10:20:45 +0100 |
commit | 5c5eb7e4872025e8d5e8ae2f0e568403f7c8803d (patch) | |
tree | 100fe6eea939511c8f90398108f9ccdbeedb0e69 /gcc | |
parent | 61e3c180ad6913fa5af39059de5ba7b3bde50cda (diff) | |
download | gcc-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')
-rw-r--r-- | gcc/opts-common.c | 12 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr98271.c | 13 |
2 files changed, 22 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; diff --git a/gcc/testsuite/gcc.dg/pr98271.c b/gcc/testsuite/gcc.dg/pr98271.c new file mode 100644 index 0000000..b453434 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr98271.c @@ -0,0 +1,13 @@ +/* PR rtl-optimization/98271 */ +/* PR rtl-optimization/98276 */ +/* PR tree-optimization/98279 */ +/* { dg-do compile } */ +/* { dg-options "-O --param=align-loop-iterations=1197120096074465280 --param=gcse-cost-distance-ratio=2147483648 --param=hot-bb-frequency-fraction=2147483648" } */ +/* { dg-error "argument to .--param=align-loop-iterations=. is bigger than 2147483647" "" { target *-*-* } 0 } */ +/* { dg-error "argument to .--param=gcse-cost-distance-ratio=. is bigger than 2147483647" "" { target *-*-* } 0 } */ +/* { dg-error "argument to .--param=hot-bb-frequency-fraction=. is bigger than 2147483647" "" { target *-*-* } 0 } */ + +void +foo (void) +{ +} |