111
|
1 /* PR middle-end/15345, c/16450 */
|
|
2 /* Test whether unused nested functions aren't emitted into the assembly. */
|
|
3 /* { dg-do compile } */
|
|
4 /* { dg-options "-g0" } */
|
|
5 /* { dg-require-effective-target trampolines } */
|
|
6
|
|
7 int
|
|
8 fn1 (int x)
|
|
9 {
|
|
10 int i = x;
|
|
11 inline __attribute__((always_inline)) int
|
|
12 should_not_appear1 (void)
|
|
13 {
|
|
14 return i;
|
|
15 }
|
|
16 return should_not_appear1 ();
|
|
17 }
|
|
18
|
|
19 int
|
|
20 fn2 (int x)
|
|
21 {
|
|
22 int i = x;
|
|
23 inline __attribute__((always_inline)) int
|
|
24 should_not_appear2 (void)
|
|
25 {
|
|
26 return i;
|
|
27 }
|
|
28 return x;
|
|
29 }
|
|
30
|
|
31 extern void check (void *p);
|
|
32
|
|
33 int
|
|
34 fn3 (int x)
|
|
35 {
|
|
36 int i = x;
|
|
37 inline int
|
|
38 should_appear1 (void)
|
|
39 {
|
|
40 char *p = __builtin_alloca (i);
|
|
41 check (p);
|
|
42 return i;
|
|
43 }
|
|
44 return should_appear1 ();
|
|
45 }
|
|
46
|
|
47 int
|
|
48 fn4 (int x)
|
|
49 {
|
|
50 int i = x;
|
|
51 inline int
|
|
52 should_not_appear3 (void)
|
|
53 {
|
|
54 char *p = __builtin_alloca (i);
|
|
55 check (p);
|
|
56 return i;
|
|
57 }
|
|
58 return 0 ? should_not_appear3 () : 1;
|
|
59 }
|
|
60
|
|
61 int
|
|
62 fn5 (int x)
|
|
63 {
|
|
64 int i = x;
|
|
65 inline int
|
|
66 should_appear2 (void)
|
|
67 {
|
|
68 return i;
|
|
69 }
|
|
70 check (should_appear2);
|
|
71 return i;
|
|
72 }
|
|
73
|
|
74 /* { dg-final { scan-assembler-not "should_not_appear" } } */
|