| /* { dg-require-effective-target indirect_calls } */ |
| |
| 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; |