; REQUIRES: webassembly-registered-target

; Test case 4 - Missing nested enumerations.

; pr-46466.cpp
;   1  struct Struct {
;   2    union Union {
;   3      enum NestedEnum { RED, BLUE };
;   4    };
;   5    Union U;
;   6  };
;   7
;   8  Struct S;
;   9  int test() {
;  10    return S.U.BLUE;
;  11  }

; The above test is used to illustrate a scope issue found in the Clang
; compiler.
; PR46466: https://bugs.llvm.org/show_bug.cgi?id=46466
; PR45811: https://github.com/llvm/llvm-project/issues/45811

; In the following logical views, we can see that the DWARF debug
; information generated by the Clang compiler does not include any
; references to the enumerators 'RED' and 'BLUE'. The DWARF generated
; by GCC, does include such references.

; RUN: llvm-mc -arch=wasm32 -filetype=obj \
; RUN:         %p/Inputs/pr-46466-clang.s -o %t.pr-46466-clang.o

; RUN: llvm-debuginfo-analyzer --attribute=language,level,format,producer \
; RUN:                         --output-sort=name \
; RUN:                         --print=symbols,types \
; RUN:                         %t.pr-46466-clang.o \
; RUN:                         %p/../DWARF/Inputs/pr-46466-dwarf-gcc.o 2>&1 | \
; RUN: FileCheck --strict-whitespace -check-prefix=ONE %s

; ONE:      Logical View:
; ONE-NEXT: [000]           {File} '{{.*}}pr-46466-clang.o' -> WASM
; ONE-EMPTY:
; ONE-NEXT: [001]             {CompileUnit} 'pr-46466.cpp'
; ONE-NEXT: [002]               {Producer} 'clang version 19{{.*}}'
; ONE-NEXT: [002]               {Language} 'DW_LANG_C_plus_plus_14'
; ONE-NEXT: [002]     8         {Variable} extern 'S' -> 'Struct'
; ONE-NEXT: [002]     1         {Struct} 'Struct'
; ONE-NEXT: [003]     5           {Member} public 'U' -> 'Union'
; ONE-EMPTY:
; ONE-NEXT: Logical View:
; ONE-NEXT: [000]           {File} 'pr-46466-dwarf-gcc.o' -> elf64-x86-64
; ONE-EMPTY:
; ONE-NEXT: [001]             {CompileUnit} 'pr-46466.cpp'
; ONE-NEXT: [002]               {Producer} 'GNU C++14 10.3.0 {{.*}}'
; ONE-NEXT: [002]               {Language} 'DW_LANG_C_plus_plus'
; ONE-NEXT: [002]     8         {Variable} extern 'S' -> 'Struct'
; ONE-NEXT: [002]     1         {Struct} 'Struct'
; ONE-NEXT: [003]     5           {Member} public 'U' -> 'Union'
; ONE-NEXT: [003]     2           {Union} 'Union'
; ONE-NEXT: [004]     3             {Enumeration} 'NestedEnum' -> 'unsigned int'
; ONE-NEXT: [005]                     {Enumerator} 'BLUE' = '0x1'
; ONE-NEXT: [005]                     {Enumerator} 'RED' = '0x0'

; Using the selection facilities, we can produce a logical view
; showing just the logical types that are 'Enumerator' and its
; parents. The logical view is sorted by the types name.

; RUN: llvm-debuginfo-analyzer --attribute=level,format \
; RUN:                         --output-sort=name \
; RUN:                         --select-types=Enumerator \
; RUN:                         --report=parents \
; RUN:                         --print=types \
; RUN:                         %t.pr-46466-clang.o \
; RUN:                         %p/../DWARF/Inputs/pr-46466-dwarf-gcc.o 2>&1 | \
; RUN: FileCheck --strict-whitespace -check-prefix=TWO %s

; TWO:      Logical View:
; TWO-NEXT: [000]           {File} '{{.*}}pr-46466-clang.o' -> WASM
; TWO-EMPTY:
; TWO-NEXT: [001]             {CompileUnit} 'pr-46466.cpp'
; TWO-EMPTY:
; TWO-NEXT: Logical View:
; TWO-NEXT: [000]           {File} 'pr-46466-dwarf-gcc.o' -> elf64-x86-64
; TWO-EMPTY:
; TWO-NEXT: [001]             {CompileUnit} 'pr-46466.cpp'
; TWO-NEXT: [002]     1         {Struct} 'Struct'
; TWO-NEXT: [003]     2           {Union} 'Union'
; TWO-NEXT: [004]     3             {Enumeration} 'NestedEnum' -> 'unsigned int'
; TWO-NEXT: [005]                     {Enumerator} 'BLUE' = '0x1'
; TWO-NEXT: [005]                     {Enumerator} 'RED' = '0x0'

; Using the selection facilities, we can produce a simple tabular output
; including a summary for the logical types that are 'Enumerator'. The
; logical view is sorted by the types name.

; RUN: llvm-debuginfo-analyzer --attribute=level,format \
; RUN:                         --output-sort=name \
; RUN:                         --select-types=Enumerator \
; RUN:                         --print=types,summary \
; RUN:                         %t.pr-46466-clang.o \
; RUN:                         %p/../DWARF/Inputs/pr-46466-dwarf-gcc.o 2>&1 | \
; RUN: FileCheck --strict-whitespace -check-prefix=THR %s

; THR:      Logical View:
; THR-NEXT: [000]           {File} '{{.*}}pr-46466-clang.o' -> WASM
; THR-EMPTY:
; THR-NEXT: [001]           {CompileUnit} 'pr-46466.cpp'
; THR-EMPTY:
; THR-NEXT: -----------------------------
; THR-NEXT: Element      Total    Printed
; THR-NEXT: -----------------------------
; THR-NEXT: Scopes           4          0
; THR-NEXT: Symbols          0          0
; THR-NEXT: Types            0          0
; THR-NEXT: Lines            0          0
; THR-NEXT: -----------------------------
; THR-NEXT: Total            4          0
; THR-EMPTY:
; THR-NEXT: Logical View:
; THR-NEXT: [000]           {File} 'pr-46466-dwarf-gcc.o' -> elf64-x86-64
; THR-EMPTY:
; THR-NEXT: [001]           {CompileUnit} 'pr-46466.cpp'
; THR-NEXT: [005]           {Enumerator} 'BLUE' = '0x1'
; THR-NEXT: [005]           {Enumerator} 'RED' = '0x0'
; THR-EMPTY:
; THR-NEXT: -----------------------------
; THR-NEXT: Element      Total    Printed
; THR-NEXT: -----------------------------
; THR-NEXT: Scopes           5          0
; THR-NEXT: Symbols          0          0
; THR-NEXT: Types            2          2
; THR-NEXT: Lines            0          0
; THR-NEXT: -----------------------------
; THR-NEXT: Total            7          2
