1*d8584475SCarlos Alberto Enciso; REQUIRES: x86-registered-target 2*d8584475SCarlos Alberto Enciso 34f06d46fSCarlos Alberto Enciso; Test case 4 - Missing nested enumerations. 44f06d46fSCarlos Alberto Enciso 54f06d46fSCarlos Alberto Enciso; pr-46466.cpp 64f06d46fSCarlos Alberto Enciso; 1 struct Struct { 74f06d46fSCarlos Alberto Enciso; 2 union Union { 84f06d46fSCarlos Alberto Enciso; 3 enum NestedEnum { RED, BLUE }; 94f06d46fSCarlos Alberto Enciso; 4 }; 104f06d46fSCarlos Alberto Enciso; 5 Union U; 114f06d46fSCarlos Alberto Enciso; 6 }; 124f06d46fSCarlos Alberto Enciso; 7 134f06d46fSCarlos Alberto Enciso; 8 Struct S; 144f06d46fSCarlos Alberto Enciso; 9 int test() { 154f06d46fSCarlos Alberto Enciso; 10 return S.U.BLUE; 164f06d46fSCarlos Alberto Enciso; 11 } 174f06d46fSCarlos Alberto Enciso 184f06d46fSCarlos Alberto Enciso; The above test is used to illustrate a scope issue found in the Clang 194f06d46fSCarlos Alberto Enciso; compiler. 204f06d46fSCarlos Alberto Enciso; PR46466: https://bugs.llvm.org/show_bug.cgi?id=46466 214f06d46fSCarlos Alberto Enciso; PR45811: https://github.com/llvm/llvm-project/issues/45811 224f06d46fSCarlos Alberto Enciso 234f06d46fSCarlos Alberto Enciso; In the following logical views, we can see that the DWARF debug 244f06d46fSCarlos Alberto Enciso; information generated by the Clang compiler does not include any 254f06d46fSCarlos Alberto Enciso; references to the enumerators 'RED' and 'BLUE'. The DWARF generated 264f06d46fSCarlos Alberto Enciso; by GCC, does include such references. 274f06d46fSCarlos Alberto Enciso 284f06d46fSCarlos Alberto Enciso; RUN: llvm-debuginfo-analyzer --attribute=level,format,producer \ 294f06d46fSCarlos Alberto Enciso; RUN: --output-sort=name \ 304f06d46fSCarlos Alberto Enciso; RUN: --print=symbols,types \ 314f06d46fSCarlos Alberto Enciso; RUN: %p/Inputs/pr-46466-dwarf-clang.o \ 324f06d46fSCarlos Alberto Enciso; RUN: %p/Inputs/pr-46466-dwarf-gcc.o 2>&1 | \ 334f06d46fSCarlos Alberto Enciso; RUN: FileCheck --strict-whitespace -check-prefix=ONE %s 344f06d46fSCarlos Alberto Enciso 354f06d46fSCarlos Alberto Enciso; ONE: Logical View: 364f06d46fSCarlos Alberto Enciso; ONE-NEXT: [000] {File} 'pr-46466-dwarf-clang.o' -> elf64-x86-64 374f06d46fSCarlos Alberto Enciso; ONE-EMPTY: 384f06d46fSCarlos Alberto Enciso; ONE-NEXT: [001] {CompileUnit} 'pr-46466.cpp' 394f06d46fSCarlos Alberto Enciso; ONE-NEXT: [002] {Producer} 'clang version 15.0.0 {{.*}}' 404f06d46fSCarlos Alberto Enciso; ONE-NEXT: [002] 8 {Variable} extern 'S' -> 'Struct' 414f06d46fSCarlos Alberto Enciso; ONE-NEXT: [002] 1 {Struct} 'Struct' 424f06d46fSCarlos Alberto Enciso; ONE-NEXT: [003] 5 {Member} public 'U' -> 'Union' 434f06d46fSCarlos Alberto Enciso; ONE-EMPTY: 444f06d46fSCarlos Alberto Enciso; ONE-NEXT: Logical View: 454f06d46fSCarlos Alberto Enciso; ONE-NEXT: [000] {File} 'pr-46466-dwarf-gcc.o' -> elf64-x86-64 464f06d46fSCarlos Alberto Enciso; ONE-EMPTY: 474f06d46fSCarlos Alberto Enciso; ONE-NEXT: [001] {CompileUnit} 'pr-46466.cpp' 484f06d46fSCarlos Alberto Enciso; ONE-NEXT: [002] {Producer} 'GNU C++14 10.3.0 {{.*}}' 494f06d46fSCarlos Alberto Enciso; ONE-NEXT: [002] 8 {Variable} extern 'S' -> 'Struct' 504f06d46fSCarlos Alberto Enciso; ONE-NEXT: [002] 1 {Struct} 'Struct' 514f06d46fSCarlos Alberto Enciso; ONE-NEXT: [003] 5 {Member} public 'U' -> 'Union' 524f06d46fSCarlos Alberto Enciso; ONE-NEXT: [003] 2 {Union} 'Union' 534f06d46fSCarlos Alberto Enciso; ONE-NEXT: [004] 3 {Enumeration} 'NestedEnum' -> 'unsigned int' 544f06d46fSCarlos Alberto Enciso; ONE-NEXT: [005] {Enumerator} 'BLUE' = '0x1' 554f06d46fSCarlos Alberto Enciso; ONE-NEXT: [005] {Enumerator} 'RED' = '0x0' 564f06d46fSCarlos Alberto Enciso 574f06d46fSCarlos Alberto Enciso; Using the selection facilities, we can produce a logical view 584f06d46fSCarlos Alberto Enciso; showing just the logical types that are 'Enumerator' and its 594f06d46fSCarlos Alberto Enciso; parents. The logical view is sorted by the types name. 604f06d46fSCarlos Alberto Enciso 614f06d46fSCarlos Alberto Enciso; RUN: llvm-debuginfo-analyzer --attribute=level,format \ 624f06d46fSCarlos Alberto Enciso; RUN: --output-sort=name \ 634f06d46fSCarlos Alberto Enciso; RUN: --select-types=Enumerator \ 644f06d46fSCarlos Alberto Enciso; RUN: --report=parents \ 654f06d46fSCarlos Alberto Enciso; RUN: --print=types \ 664f06d46fSCarlos Alberto Enciso; RUN: %p/Inputs/pr-46466-*.o 2>&1 | \ 674f06d46fSCarlos Alberto Enciso; RUN: FileCheck --strict-whitespace -check-prefix=TWO %s 684f06d46fSCarlos Alberto Enciso 694f06d46fSCarlos Alberto Enciso; TWO: Logical View: 704f06d46fSCarlos Alberto Enciso; TWO-NEXT: [000] {File} 'pr-46466-dwarf-clang.o' -> elf64-x86-64 714f06d46fSCarlos Alberto Enciso; TWO-EMPTY: 724f06d46fSCarlos Alberto Enciso; TWO-NEXT: [001] {CompileUnit} 'pr-46466.cpp' 734f06d46fSCarlos Alberto Enciso; TWO-EMPTY: 744f06d46fSCarlos Alberto Enciso; TWO-NEXT: Logical View: 754f06d46fSCarlos Alberto Enciso; TWO-NEXT: [000] {File} 'pr-46466-dwarf-gcc.o' -> elf64-x86-64 764f06d46fSCarlos Alberto Enciso; TWO-EMPTY: 774f06d46fSCarlos Alberto Enciso; TWO-NEXT: [001] {CompileUnit} 'pr-46466.cpp' 784f06d46fSCarlos Alberto Enciso; TWO-NEXT: [002] 1 {Struct} 'Struct' 794f06d46fSCarlos Alberto Enciso; TWO-NEXT: [003] 2 {Union} 'Union' 804f06d46fSCarlos Alberto Enciso; TWO-NEXT: [004] 3 {Enumeration} 'NestedEnum' -> 'unsigned int' 814f06d46fSCarlos Alberto Enciso; TWO-NEXT: [005] {Enumerator} 'BLUE' = '0x1' 824f06d46fSCarlos Alberto Enciso; TWO-NEXT: [005] {Enumerator} 'RED' = '0x0' 834f06d46fSCarlos Alberto Enciso 844f06d46fSCarlos Alberto Enciso; Using the selection facilities, we can produce a simple tabular output 854f06d46fSCarlos Alberto Enciso; including a summary for the logical types that are 'Enumerator'. The 864f06d46fSCarlos Alberto Enciso; logical view is sorted by the types name. 874f06d46fSCarlos Alberto Enciso 884f06d46fSCarlos Alberto Enciso; RUN: llvm-debuginfo-analyzer --attribute=level,format \ 894f06d46fSCarlos Alberto Enciso; RUN: --output-sort=name \ 904f06d46fSCarlos Alberto Enciso; RUN: --select-types=Enumerator \ 914f06d46fSCarlos Alberto Enciso; RUN: --print=types,summary \ 924f06d46fSCarlos Alberto Enciso; RUN: %p/Inputs/pr-46466-*.o 2>&1 | \ 934f06d46fSCarlos Alberto Enciso; RUN: FileCheck --strict-whitespace -check-prefix=THR %s 944f06d46fSCarlos Alberto Enciso 954f06d46fSCarlos Alberto Enciso; THR: Logical View: 964f06d46fSCarlos Alberto Enciso; THR-NEXT: [000] {File} 'pr-46466-dwarf-clang.o' -> elf64-x86-64 974f06d46fSCarlos Alberto Enciso; THR-EMPTY: 984f06d46fSCarlos Alberto Enciso; THR-NEXT: [001] {CompileUnit} 'pr-46466.cpp' 994f06d46fSCarlos Alberto Enciso; THR-EMPTY: 1004f06d46fSCarlos Alberto Enciso; THR-NEXT: ----------------------------- 1014f06d46fSCarlos Alberto Enciso; THR-NEXT: Element Total Printed 1024f06d46fSCarlos Alberto Enciso; THR-NEXT: ----------------------------- 1034f06d46fSCarlos Alberto Enciso; THR-NEXT: Scopes 4 0 1044f06d46fSCarlos Alberto Enciso; THR-NEXT: Symbols 0 0 1054f06d46fSCarlos Alberto Enciso; THR-NEXT: Types 0 0 1064f06d46fSCarlos Alberto Enciso; THR-NEXT: Lines 0 0 1074f06d46fSCarlos Alberto Enciso; THR-NEXT: ----------------------------- 1084f06d46fSCarlos Alberto Enciso; THR-NEXT: Total 4 0 1094f06d46fSCarlos Alberto Enciso; THR-EMPTY: 1104f06d46fSCarlos Alberto Enciso; THR-NEXT: Logical View: 1114f06d46fSCarlos Alberto Enciso; THR-NEXT: [000] {File} 'pr-46466-dwarf-gcc.o' -> elf64-x86-64 1124f06d46fSCarlos Alberto Enciso; THR-EMPTY: 1134f06d46fSCarlos Alberto Enciso; THR-NEXT: [001] {CompileUnit} 'pr-46466.cpp' 1144f06d46fSCarlos Alberto Enciso; THR-NEXT: [005] {Enumerator} 'BLUE' = '0x1' 1154f06d46fSCarlos Alberto Enciso; THR-NEXT: [005] {Enumerator} 'RED' = '0x0' 1164f06d46fSCarlos Alberto Enciso; THR-EMPTY: 1174f06d46fSCarlos Alberto Enciso; THR-NEXT: ----------------------------- 1184f06d46fSCarlos Alberto Enciso; THR-NEXT: Element Total Printed 1194f06d46fSCarlos Alberto Enciso; THR-NEXT: ----------------------------- 1204f06d46fSCarlos Alberto Enciso; THR-NEXT: Scopes 5 0 1214f06d46fSCarlos Alberto Enciso; THR-NEXT: Symbols 0 0 1224f06d46fSCarlos Alberto Enciso; THR-NEXT: Types 2 2 1234f06d46fSCarlos Alberto Enciso; THR-NEXT: Lines 0 0 1244f06d46fSCarlos Alberto Enciso; THR-NEXT: ----------------------------- 1254f06d46fSCarlos Alberto Enciso; THR-NEXT: Total 7 2 126