/* PR middle-end/15345, c/16450 */ /* Test whether unused nested functions aren't emitted into the assembly. */ /* { dg-do compile } */ /* { dg-options "-g0" } */ /* { dg-require-effective-target trampolines } */ int fn1 (int x) { int i = x; inline __attribute__((always_inline)) int should_not_appear1 (void) { return i; } return should_not_appear1 (); } int fn2 (int x) { int i = x; inline __attribute__((always_inline)) int should_not_appear2 (void) { return i; } return x; } extern void check (void *p); int fn3 (int x) { int i = x; inline int should_appear1 (void) { char *p = __builtin_alloca (i); check (p); return i; } return should_appear1 (); } int fn4 (int x) { int i = x; inline int should_not_appear3 (void) { char *p = __builtin_alloca (i); check (p); return i; } return 0 ? should_not_appear3 () : 1; } int fn5 (int x) { int i = x; inline int should_appear2 (void) { return i; } check (should_appear2); return i; } /* { dg-final { scan-assembler-not "should_not_appear" } } */