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.
This commit is contained in:
parent
61e3c180ad
commit
5c5eb7e487
@ -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;
|
||||
|
13
gcc/testsuite/gcc.dg/pr98271.c
Normal file
13
gcc/testsuite/gcc.dg/pr98271.c
Normal file
@ -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)
|
||||
{
|
||||
}
|
Loading…
Reference in New Issue
Block a user