1*b19cfb91SCarlos Alberto Enciso; REQUIRES: webassembly-registered-target
2*b19cfb91SCarlos Alberto Enciso
3*b19cfb91SCarlos Alberto Enciso; Test case 4 - Missing nested enumerations.
4*b19cfb91SCarlos Alberto Enciso
5*b19cfb91SCarlos Alberto Enciso; pr-46466.cpp
6*b19cfb91SCarlos Alberto Enciso;   1  struct Struct {
7*b19cfb91SCarlos Alberto Enciso;   2    union Union {
8*b19cfb91SCarlos Alberto Enciso;   3      enum NestedEnum { RED, BLUE };
9*b19cfb91SCarlos Alberto Enciso;   4    };
10*b19cfb91SCarlos Alberto Enciso;   5    Union U;
11*b19cfb91SCarlos Alberto Enciso;   6  };
12*b19cfb91SCarlos Alberto Enciso;   7
13*b19cfb91SCarlos Alberto Enciso;   8  Struct S;
14*b19cfb91SCarlos Alberto Enciso;   9  int test() {
15*b19cfb91SCarlos Alberto Enciso;  10    return S.U.BLUE;
16*b19cfb91SCarlos Alberto Enciso;  11  }
17*b19cfb91SCarlos Alberto Enciso
18*b19cfb91SCarlos Alberto Enciso; The above test is used to illustrate a scope issue found in the Clang
19*b19cfb91SCarlos Alberto Enciso; compiler.
20*b19cfb91SCarlos Alberto Enciso; PR46466: https://bugs.llvm.org/show_bug.cgi?id=46466
21*b19cfb91SCarlos Alberto Enciso; PR45811: https://github.com/llvm/llvm-project/issues/45811
22*b19cfb91SCarlos Alberto Enciso
23*b19cfb91SCarlos Alberto Enciso; In the following logical views, we can see that the DWARF debug
24*b19cfb91SCarlos Alberto Enciso; information generated by the Clang compiler does not include any
25*b19cfb91SCarlos Alberto Enciso; references to the enumerators 'RED' and 'BLUE'. The DWARF generated
26*b19cfb91SCarlos Alberto Enciso; by GCC, does include such references.
27*b19cfb91SCarlos Alberto Enciso
28*b19cfb91SCarlos Alberto Enciso; RUN: llvm-mc -arch=wasm32 -filetype=obj \
29*b19cfb91SCarlos Alberto Enciso; RUN:         %p/Inputs/pr-46466-clang.s -o %t.pr-46466-clang.o
30*b19cfb91SCarlos Alberto Enciso
31*b19cfb91SCarlos Alberto Enciso; RUN: llvm-debuginfo-analyzer --attribute=level,format,producer \
32*b19cfb91SCarlos Alberto Enciso; RUN:                         --output-sort=name \
33*b19cfb91SCarlos Alberto Enciso; RUN:                         --print=symbols,types \
34*b19cfb91SCarlos Alberto Enciso; RUN:                         %t.pr-46466-clang.o \
35*b19cfb91SCarlos Alberto Enciso; RUN:                         %p/../DWARF/Inputs/pr-46466-dwarf-gcc.o 2>&1 | \
36*b19cfb91SCarlos Alberto Enciso; RUN: FileCheck --strict-whitespace -check-prefix=ONE %s
37*b19cfb91SCarlos Alberto Enciso
38*b19cfb91SCarlos Alberto Enciso; ONE:      Logical View:
39*b19cfb91SCarlos Alberto Enciso; ONE-NEXT: [000]           {File} '{{.*}}pr-46466-clang.o' -> WASM
40*b19cfb91SCarlos Alberto Enciso; ONE-EMPTY:
41*b19cfb91SCarlos Alberto Enciso; ONE-NEXT: [001]             {CompileUnit} 'pr-46466.cpp'
42*b19cfb91SCarlos Alberto Enciso; ONE-NEXT: [002]               {Producer} 'clang version 19{{.*}}'
43*b19cfb91SCarlos Alberto Enciso; ONE-NEXT: [002]     8         {Variable} extern 'S' -> 'Struct'
44*b19cfb91SCarlos Alberto Enciso; ONE-NEXT: [002]     1         {Struct} 'Struct'
45*b19cfb91SCarlos Alberto Enciso; ONE-NEXT: [003]     5           {Member} public 'U' -> 'Union'
46*b19cfb91SCarlos Alberto Enciso; ONE-EMPTY:
47*b19cfb91SCarlos Alberto Enciso; ONE-NEXT: Logical View:
48*b19cfb91SCarlos Alberto Enciso; ONE-NEXT: [000]           {File} 'pr-46466-dwarf-gcc.o' -> elf64-x86-64
49*b19cfb91SCarlos Alberto Enciso; ONE-EMPTY:
50*b19cfb91SCarlos Alberto Enciso; ONE-NEXT: [001]             {CompileUnit} 'pr-46466.cpp'
51*b19cfb91SCarlos Alberto Enciso; ONE-NEXT: [002]               {Producer} 'GNU C++14 10.3.0 {{.*}}'
52*b19cfb91SCarlos Alberto Enciso; ONE-NEXT: [002]     8         {Variable} extern 'S' -> 'Struct'
53*b19cfb91SCarlos Alberto Enciso; ONE-NEXT: [002]     1         {Struct} 'Struct'
54*b19cfb91SCarlos Alberto Enciso; ONE-NEXT: [003]     5           {Member} public 'U' -> 'Union'
55*b19cfb91SCarlos Alberto Enciso; ONE-NEXT: [003]     2           {Union} 'Union'
56*b19cfb91SCarlos Alberto Enciso; ONE-NEXT: [004]     3             {Enumeration} 'NestedEnum' -> 'unsigned int'
57*b19cfb91SCarlos Alberto Enciso; ONE-NEXT: [005]                     {Enumerator} 'BLUE' = '0x1'
58*b19cfb91SCarlos Alberto Enciso; ONE-NEXT: [005]                     {Enumerator} 'RED' = '0x0'
59*b19cfb91SCarlos Alberto Enciso
60*b19cfb91SCarlos Alberto Enciso; Using the selection facilities, we can produce a logical view
61*b19cfb91SCarlos Alberto Enciso; showing just the logical types that are 'Enumerator' and its
62*b19cfb91SCarlos Alberto Enciso; parents. The logical view is sorted by the types name.
63*b19cfb91SCarlos Alberto Enciso
64*b19cfb91SCarlos Alberto Enciso; RUN: llvm-debuginfo-analyzer --attribute=level,format \
65*b19cfb91SCarlos Alberto Enciso; RUN:                         --output-sort=name \
66*b19cfb91SCarlos Alberto Enciso; RUN:                         --select-types=Enumerator \
67*b19cfb91SCarlos Alberto Enciso; RUN:                         --report=parents \
68*b19cfb91SCarlos Alberto Enciso; RUN:                         --print=types \
69*b19cfb91SCarlos Alberto Enciso; RUN:                         %t.pr-46466-clang.o \
70*b19cfb91SCarlos Alberto Enciso; RUN:                         %p/../DWARF/Inputs/pr-46466-dwarf-gcc.o 2>&1 | \
71*b19cfb91SCarlos Alberto Enciso; RUN: FileCheck --strict-whitespace -check-prefix=TWO %s
72*b19cfb91SCarlos Alberto Enciso
73*b19cfb91SCarlos Alberto Enciso; TWO:      Logical View:
74*b19cfb91SCarlos Alberto Enciso; TWO-NEXT: [000]           {File} '{{.*}}pr-46466-clang.o' -> WASM
75*b19cfb91SCarlos Alberto Enciso; TWO-EMPTY:
76*b19cfb91SCarlos Alberto Enciso; TWO-NEXT: [001]             {CompileUnit} 'pr-46466.cpp'
77*b19cfb91SCarlos Alberto Enciso; TWO-EMPTY:
78*b19cfb91SCarlos Alberto Enciso; TWO-NEXT: Logical View:
79*b19cfb91SCarlos Alberto Enciso; TWO-NEXT: [000]           {File} 'pr-46466-dwarf-gcc.o' -> elf64-x86-64
80*b19cfb91SCarlos Alberto Enciso; TWO-EMPTY:
81*b19cfb91SCarlos Alberto Enciso; TWO-NEXT: [001]             {CompileUnit} 'pr-46466.cpp'
82*b19cfb91SCarlos Alberto Enciso; TWO-NEXT: [002]     1         {Struct} 'Struct'
83*b19cfb91SCarlos Alberto Enciso; TWO-NEXT: [003]     2           {Union} 'Union'
84*b19cfb91SCarlos Alberto Enciso; TWO-NEXT: [004]     3             {Enumeration} 'NestedEnum' -> 'unsigned int'
85*b19cfb91SCarlos Alberto Enciso; TWO-NEXT: [005]                     {Enumerator} 'BLUE' = '0x1'
86*b19cfb91SCarlos Alberto Enciso; TWO-NEXT: [005]                     {Enumerator} 'RED' = '0x0'
87*b19cfb91SCarlos Alberto Enciso
88*b19cfb91SCarlos Alberto Enciso; Using the selection facilities, we can produce a simple tabular output
89*b19cfb91SCarlos Alberto Enciso; including a summary for the logical types that are 'Enumerator'. The
90*b19cfb91SCarlos Alberto Enciso; logical view is sorted by the types name.
91*b19cfb91SCarlos Alberto Enciso
92*b19cfb91SCarlos Alberto Enciso; RUN: llvm-debuginfo-analyzer --attribute=level,format \
93*b19cfb91SCarlos Alberto Enciso; RUN:                         --output-sort=name \
94*b19cfb91SCarlos Alberto Enciso; RUN:                         --select-types=Enumerator \
95*b19cfb91SCarlos Alberto Enciso; RUN:                         --print=types,summary \
96*b19cfb91SCarlos Alberto Enciso; RUN:                         %t.pr-46466-clang.o \
97*b19cfb91SCarlos Alberto Enciso; RUN:                         %p/../DWARF/Inputs/pr-46466-dwarf-gcc.o 2>&1 | \
98*b19cfb91SCarlos Alberto Enciso; RUN: FileCheck --strict-whitespace -check-prefix=THR %s
99*b19cfb91SCarlos Alberto Enciso
100*b19cfb91SCarlos Alberto Enciso; THR:      Logical View:
101*b19cfb91SCarlos Alberto Enciso; THR-NEXT: [000]           {File} '{{.*}}pr-46466-clang.o' -> WASM
102*b19cfb91SCarlos Alberto Enciso; THR-EMPTY:
103*b19cfb91SCarlos Alberto Enciso; THR-NEXT: [001]           {CompileUnit} 'pr-46466.cpp'
104*b19cfb91SCarlos Alberto Enciso; THR-EMPTY:
105*b19cfb91SCarlos Alberto Enciso; THR-NEXT: -----------------------------
106*b19cfb91SCarlos Alberto Enciso; THR-NEXT: Element      Total    Printed
107*b19cfb91SCarlos Alberto Enciso; THR-NEXT: -----------------------------
108*b19cfb91SCarlos Alberto Enciso; THR-NEXT: Scopes           4          0
109*b19cfb91SCarlos Alberto Enciso; THR-NEXT: Symbols          0          0
110*b19cfb91SCarlos Alberto Enciso; THR-NEXT: Types            0          0
111*b19cfb91SCarlos Alberto Enciso; THR-NEXT: Lines            0          0
112*b19cfb91SCarlos Alberto Enciso; THR-NEXT: -----------------------------
113*b19cfb91SCarlos Alberto Enciso; THR-NEXT: Total            4          0
114*b19cfb91SCarlos Alberto Enciso; THR-EMPTY:
115*b19cfb91SCarlos Alberto Enciso; THR-NEXT: Logical View:
116*b19cfb91SCarlos Alberto Enciso; THR-NEXT: [000]           {File} 'pr-46466-dwarf-gcc.o' -> elf64-x86-64
117*b19cfb91SCarlos Alberto Enciso; THR-EMPTY:
118*b19cfb91SCarlos Alberto Enciso; THR-NEXT: [001]           {CompileUnit} 'pr-46466.cpp'
119*b19cfb91SCarlos Alberto Enciso; THR-NEXT: [005]           {Enumerator} 'BLUE' = '0x1'
120*b19cfb91SCarlos Alberto Enciso; THR-NEXT: [005]           {Enumerator} 'RED' = '0x0'
121*b19cfb91SCarlos Alberto Enciso; THR-EMPTY:
122*b19cfb91SCarlos Alberto Enciso; THR-NEXT: -----------------------------
123*b19cfb91SCarlos Alberto Enciso; THR-NEXT: Element      Total    Printed
124*b19cfb91SCarlos Alberto Enciso; THR-NEXT: -----------------------------
125*b19cfb91SCarlos Alberto Enciso; THR-NEXT: Scopes           5          0
126*b19cfb91SCarlos Alberto Enciso; THR-NEXT: Symbols          0          0
127*b19cfb91SCarlos Alberto Enciso; THR-NEXT: Types            2          2
128*b19cfb91SCarlos Alberto Enciso; THR-NEXT: Lines            0          0
129*b19cfb91SCarlos Alberto Enciso; THR-NEXT: -----------------------------
130*b19cfb91SCarlos Alberto Enciso; THR-NEXT: Total            7          2
131