1// PR c++/27017
2// { dg-do compile }
3// { dg-options "-gdwarf-2 -dA -feliminate-unused-debug-types -fno-merge-debug-strings" }
4
5int
6foo (int arg1)
7{
8  struct localstruct1
9  {
10    static inline int staticfn1 (int arg2)
11    {
12      int var2 = arg2 << 2;
13      return arg2 + var2;
14    }
15    static int staticfn2 (int arg3)
16    {
17      int var3 = arg3 << 2;
18      return arg3 + var3;
19    }
20    static inline int staticfn3 (int arg4)
21    {
22      int var4 = arg4 << 2;
23      return arg4 + var4;
24    }
25    static int staticfn4 (int arg5)
26    {
27      int var5 = arg5 << 2;
28      return arg5 + var5;
29    }
30    int method1 (int arg6)
31    {
32      int var6 = arg6 << 2;
33      return arg6 + var6;
34    }
35  };
36  struct localstruct2
37  {
38    static inline int staticfn5 (int arg7)
39    {
40      int var7 = arg7 << 2;
41      return arg7 + var7;
42    }
43    static int staticfn6 (int arg8)
44    {
45      int var8 = arg8 << 2;
46      return arg8 + var8;
47    }
48  };
49  return localstruct1::staticfn1 (arg1) + localstruct1::staticfn2 (arg1);
50}
51
52int
53main ()
54{
55  return foo (1) - 10;
56}
57
58// { dg-final { scan-assembler "main\[^\n\r\]*DW_AT_name" } }
59// { dg-final { scan-assembler "foo\[^\n\r\]*DW_AT_name" } }
60// { dg-final { scan-assembler "staticfn1\[^\n\r\]*DW_AT_name" } }
61// { dg-final { scan-assembler "staticfn2\[^\n\r\]*DW_AT_name" } }
62// { dg-final { scan-assembler "staticfn3\[^\n\r\]*DW_AT_name" } }
63// { dg-final { scan-assembler "staticfn4\[^\n\r\]*DW_AT_name" } }
64// { dg-final { scan-assembler-not "staticfn5\[^\n\r\]*DW_AT_name" } }
65// { dg-final { scan-assembler-not "staticfn6\[^\n\r\]*DW_AT_name" } }
66// { dg-final { scan-assembler "method1\[^\n\r\]*DW_AT_name" } }
67// { dg-final { scan-assembler "arg1\[^\n\r\]*DW_AT_name" } }
68// { dg-final { scan-assembler "arg2\[^\n\r\]*DW_AT_name" } }
69// { dg-final { scan-assembler "arg3\[^\n\r\]*DW_AT_name" } }
70// { dg-final { scan-assembler-not "arg4\[^\n\r\]*DW_AT_name" } }
71// { dg-final { scan-assembler-not "arg5\[^\n\r\]*DW_AT_name" } }
72// { dg-final { scan-assembler-not "arg6\[^\n\r\]*DW_AT_name" } }
73// { dg-final { scan-assembler-not "arg7\[^\n\r\]*DW_AT_name" } }
74// { dg-final { scan-assembler-not "arg8\[^\n\r\]*DW_AT_name" } }
75// { dg-final { scan-assembler "localstruct1\[^\n\r\]*DW_AT_name" } }
76// { dg-final { scan-assembler-not "localstruct2\[^\n\r\]*DW_AT_name" } }
77