aboutsummaryrefslogtreecommitdiff
path: root/gcc
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
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')
-rw-r--r--gcc/opts-common.c12
-rw-r--r--gcc/testsuite/gcc.dg/pr98271.c13
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)
+{
+}