[PATCH] Fix PR48731

Richard Guenther rguenther@suse.de
Tue Apr 26 13:05:00 GMT 2011


This adds a missing check for ->local.inlinable to cgraph_flatten.
Honza fixed this on trunk by factoring out the checks.

Bootstrapped and tested on x86_64-unknown-linux-gnu, installed.

Richard.

2011-04-26  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/48731
	* ipa-inline.c (cgraph_flatten): Test if function is inlinable.

	* gcc.dg/torture/pr48731.c: New testcase.

Index: gcc/ipa-inline.c
===================================================================
*** gcc/ipa-inline.c	(revision 172962)
--- gcc/ipa-inline.c	(working copy)
*************** cgraph_flatten (struct cgraph_node *node
*** 1337,1342 ****
--- 1337,1345 ----
  	  continue;
  	}
  
+       if (!e->callee->local.inlinable)
+ 	continue;
+ 
        /* We've hit cycle?  It is time to give up.  */
        if (e->callee->aux)
  	{
Index: gcc/testsuite/gcc.dg/torture/pr48731.c
===================================================================
*** gcc/testsuite/gcc.dg/torture/pr48731.c	(revision 0)
--- gcc/testsuite/gcc.dg/torture/pr48731.c	(revision 0)
***************
*** 0 ****
--- 1,24 ----
+ /* { dg-do compile } */
+ 
+ #include <stdarg.h>
+ 
+ int blah(int a, ...)
+ {
+   va_list va;
+   va_start(va,a);
+   if (a == 0)
+     return -1;
+   else 
+     {
+       int i;
+       for (i = 0; i < a; i++)
+ 	va_arg(va,int);
+       return va_arg(va,int);
+     }
+ }
+ 
+ __attribute((flatten))
+ int blah2(int b, int c)
+ {
+   return blah(2, b, c);
+ }



More information about the Gcc-patches mailing list