re PR tree-optimization/68680 (On-stack VLA does not cause instrumentation with -fstack-protector)
PR tree-optimization/68680 * calls.c (special_function_p): Return ECF_MAY_BE_ALLOCA for BUILT_IN_ALLOCA{,_WITH_ALIGN}. Don't check for __builtin_alloca by name. * gcc.target/i386/pr68680.c: New test. From-SVN: r231279
This commit is contained in:
parent
83b58b6b0e
commit
4e722cf1dc
4 changed files with 37 additions and 6 deletions
|
@ -1,5 +1,10 @@
|
|||
2015-12-04 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/68680
|
||||
* calls.c (special_function_p): Return ECF_MAY_BE_ALLOCA for
|
||||
BUILT_IN_ALLOCA{,_WITH_ALIGN}. Don't check for __builtin_alloca
|
||||
by name.
|
||||
|
||||
PR tree-optimization/68671
|
||||
* tree-ssa-reassoc.c (maybe_optimize_range_tests): For basic
|
||||
blocks starting with the successor of first bb we've modified
|
||||
|
|
20
gcc/calls.c
20
gcc/calls.c
|
@ -502,12 +502,9 @@ special_function_p (const_tree fndecl, int flags)
|
|||
/* We assume that alloca will always be called by name. It
|
||||
makes no sense to pass it as a pointer-to-function to
|
||||
anything that does not understand its behavior. */
|
||||
if (((IDENTIFIER_LENGTH (name_decl) == 6
|
||||
&& name[0] == 'a'
|
||||
&& ! strcmp (name, "alloca"))
|
||||
|| (IDENTIFIER_LENGTH (name_decl) == 16
|
||||
&& name[0] == '_'
|
||||
&& ! strcmp (name, "__builtin_alloca"))))
|
||||
if (IDENTIFIER_LENGTH (name_decl) == 6
|
||||
&& name[0] == 'a'
|
||||
&& ! strcmp (name, "alloca"))
|
||||
flags |= ECF_MAY_BE_ALLOCA;
|
||||
|
||||
/* Disregard prefix _, __, __x or __builtin_. */
|
||||
|
@ -553,6 +550,17 @@ special_function_p (const_tree fndecl, int flags)
|
|||
flags |= ECF_NORETURN;
|
||||
}
|
||||
|
||||
if (DECL_BUILT_IN_CLASS (fndecl) == BUILT_IN_NORMAL)
|
||||
switch (DECL_FUNCTION_CODE (fndecl))
|
||||
{
|
||||
case BUILT_IN_ALLOCA:
|
||||
case BUILT_IN_ALLOCA_WITH_ALIGN:
|
||||
flags |= ECF_MAY_BE_ALLOCA;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
2015-12-04 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/68680
|
||||
* gcc.target/i386/pr68680.c: New test.
|
||||
|
||||
PR tree-optimization/68671
|
||||
* gcc.dg/pr68671.c: New test.
|
||||
|
||||
|
|
15
gcc/testsuite/gcc.target/i386/pr68680.c
Normal file
15
gcc/testsuite/gcc.target/i386/pr68680.c
Normal file
|
@ -0,0 +1,15 @@
|
|||
/* PR tree-optimization/68680 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fstack-protector-strong" } */
|
||||
|
||||
int foo (char *);
|
||||
|
||||
int
|
||||
bar (unsigned long x)
|
||||
{
|
||||
char a[x];
|
||||
return foo (a);
|
||||
}
|
||||
|
||||
/* Verify that this function is stack protected. */
|
||||
/* { dg-final { scan-assembler "stack_chk_fail" } } */
|
Loading…
Add table
Reference in a new issue