Commit 4e722cf1 by Jakub Jelinek Committed by Jakub Jelinek

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
parent 83b58b6b
2015-12-04 Jakub Jelinek <jakub@redhat.com> 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 PR tree-optimization/68671
* tree-ssa-reassoc.c (maybe_optimize_range_tests): For basic * tree-ssa-reassoc.c (maybe_optimize_range_tests): For basic
blocks starting with the successor of first bb we've modified blocks starting with the successor of first bb we've modified
...@@ -502,12 +502,9 @@ special_function_p (const_tree fndecl, int flags) ...@@ -502,12 +502,9 @@ special_function_p (const_tree fndecl, int flags)
/* We assume that alloca will always be called by name. It /* We assume that alloca will always be called by name. It
makes no sense to pass it as a pointer-to-function to makes no sense to pass it as a pointer-to-function to
anything that does not understand its behavior. */ anything that does not understand its behavior. */
if (((IDENTIFIER_LENGTH (name_decl) == 6 if (IDENTIFIER_LENGTH (name_decl) == 6
&& name[0] == 'a' && name[0] == 'a'
&& ! strcmp (name, "alloca")) && ! strcmp (name, "alloca"))
|| (IDENTIFIER_LENGTH (name_decl) == 16
&& name[0] == '_'
&& ! strcmp (name, "__builtin_alloca"))))
flags |= ECF_MAY_BE_ALLOCA; flags |= ECF_MAY_BE_ALLOCA;
/* Disregard prefix _, __, __x or __builtin_. */ /* Disregard prefix _, __, __x or __builtin_. */
...@@ -553,6 +550,17 @@ special_function_p (const_tree fndecl, int flags) ...@@ -553,6 +550,17 @@ special_function_p (const_tree fndecl, int flags)
flags |= ECF_NORETURN; 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; return flags;
} }
......
2015-12-04 Jakub Jelinek <jakub@redhat.com> 2015-12-04 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/68680
* gcc.target/i386/pr68680.c: New test.
PR tree-optimization/68671 PR tree-optimization/68671
* gcc.dg/pr68671.c: New test. * gcc.dg/pr68671.c: New test.
......
/* 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" } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment