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