| ; REQUIRES: x86-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-debuginfo-analyzer --attribute=level,format,producer \ |
| ; RUN: --output-sort=name \ |
| ; RUN: --print=symbols,types \ |
| ; RUN: %p/Inputs/pr-46466-dwarf-clang.o \ |
| ; RUN: %p/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-dwarf-clang.o' -> elf64-x86-64 |
| ; ONE-EMPTY: |
| ; ONE-NEXT: [001] {CompileUnit} 'pr-46466.cpp' |
| ; ONE-NEXT: [002] {Producer} 'clang version 15.0.0 {{.*}}' |
| ; 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] 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: %p/Inputs/pr-46466-*.o 2>&1 | \ |
| ; RUN: FileCheck --strict-whitespace -check-prefix=TWO %s |
| |
| ; TWO: Logical View: |
| ; TWO-NEXT: [000] {File} 'pr-46466-dwarf-clang.o' -> elf64-x86-64 |
| ; 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: %p/Inputs/pr-46466-*.o 2>&1 | \ |
| ; RUN: FileCheck --strict-whitespace -check-prefix=THR %s |
| |
| ; THR: Logical View: |
| ; THR-NEXT: [000] {File} 'pr-46466-dwarf-clang.o' -> elf64-x86-64 |
| ; 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 |