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