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