diff options
author | H.J. Lu <hongjiu.lu@intel.com> | 2009-05-11 16:37:07 +0000 |
---|---|---|
committer | H.J. Lu <hjl@gcc.gnu.org> | 2009-05-11 09:37:07 -0700 |
commit | 26ab6a9370d93b084d42667d644c36ed06cc4408 (patch) | |
tree | 26d0084fea8b5b6e555afa88947ba79fd4a4403c | |
parent | f5a1f0d01fa875ef6f2d895f990f4a2064b9d7f4 (diff) | |
download | gcc-26ab6a9370d93b084d42667d644c36ed06cc4408.zip gcc-26ab6a9370d93b084d42667d644c36ed06cc4408.tar.gz gcc-26ab6a9370d93b084d42667d644c36ed06cc4408.tar.bz2 |
re PR middle-end/40080 (error: missing callgraph edge for call stmt)
2009-05-11 H.J. Lu <hongjiu.lu@intel.com>
PR middle-end/40080
* gcc.c-torture/compile/pr40080.c: New.
From-SVN: r147389
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr40080.c | 44 |
2 files changed, 49 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bb82336..a6e67a5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-05-11 H.J. Lu <hongjiu.lu@intel.com> + + PR middle-end/40080 + * gcc.c-torture/compile/pr40080.c: New. + 2009-05-11 Paolo Bonzini <bonzini@gnu.org> * gcc.c-torture/compile/pr40026.c: New testcase. diff --git a/gcc/testsuite/gcc.c-torture/compile/pr40080.c b/gcc/testsuite/gcc.c-torture/compile/pr40080.c new file mode 100644 index 0000000..e36f142 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr40080.c @@ -0,0 +1,44 @@ +extern void *ff(void*,int); + +struct lpgl { struct lpgl *next; }; +struct lpgd { struct lpgl *first; }; + +typedef int (*xfn)( ); +static void xDP_IF_EnumGroupsInGroup ( void *a, int b, xfn fn) +{ + struct lpgd *lpGData; + struct lpgl *lpGList; + + if( ( lpGData = ff( a, b ) ) == ((void *)0) ) + return; + + if( lpGData->first == ((void *)0) ) + return; + lpGList = lpGData->first; + + for( ;; ) { + if( !(*fn)( ) ) + return; + if( lpGList->next == ((void *)0) ) + break; + lpGList = lpGList->next; + } + return; +} + + +static int +xcbDeletePlayerFromAllGroups() { + xDP_IF_EnumGroupsInGroup(0, 0, 0); + return 1; +} + +void xDP_IF_EnumGroups( xfn fn) { + xDP_IF_EnumGroupsInGroup( 0, 0, fn); +} + +static void xDP_IF_DestroyPlayer () { + xDP_IF_EnumGroups( xcbDeletePlayerFromAllGroups); +} + +void* foo=xDP_IF_DestroyPlayer; |