1 ; REQUIRES: x86-registered-target
3 ; Test case 4 - Missing nested enumerations.
8 ; 3 enum NestedEnum { RED, BLUE };
18 ; The above test is used to illustrate a scope issue found in the Clang
20 ; PR46466: https://bugs.llvm.org/show_bug.cgi?id=46466
21 ; PR45811: https://github.com/llvm/llvm-project/issues/45811
23 ; In the following logical views, we can see that the CodeView debug
24 ; information generated by the Clang compiler does not include any
25 ; references to the enumerators 'RED' and 'BLUE'. The CodeView generated
26 ; by GCC and MSVC, does include such references.
28 ; RUN: llvm-debuginfo-analyzer --attribute=level,format,producer \
29 ; RUN: --output-sort=name \
30 ; RUN: --print=symbols,types \
31 ; RUN: %p/Inputs/pr-46466-codeview-clang.o \
32 ; RUN: %p/Inputs/pr-46466-codeview-msvc.o 2>&1 | \
33 ; RUN: FileCheck --strict-whitespace -check-prefix=ONE %s
36 ; ONE-NEXT: [000] {File} 'pr-46466-codeview-clang.o' -> COFF-x86-64
38 ; ONE-NEXT: [001] {CompileUnit} 'pr-46466.cpp'
39 ; ONE-NEXT: [002] {Producer} 'clang version 15.0.0 {{.*}}'
40 ; ONE-NEXT: [002] {Variable} extern 'S' -> 'Struct'
41 ; ONE-NEXT: [002] 1 {Struct} 'Struct'
42 ; ONE-NEXT: [003] {Member} public 'U' -> 'Union'
43 ; ONE-NEXT: [003] 2 {Union} 'Union'
44 ; ONE-NEXT: [004] 3 {Enumeration} 'NestedEnum' -> 'int'
45 ; ONE-NEXT: [005] {Enumerator} 'BLUE' = '0x1'
46 ; ONE-NEXT: [005] {Enumerator} 'RED' = '0x0'
48 ; ONE-NEXT: Logical View:
49 ; ONE-NEXT: [000] {File} 'pr-46466-codeview-msvc.o' -> COFF-x86-64
51 ; ONE-NEXT: [001] {CompileUnit} 'pr-46466.cpp'
52 ; ONE-NEXT: [002] {Producer} 'Microsoft (R) Optimizing Compiler'
53 ; ONE-NEXT: [002] {Variable} extern 'S' -> 'Struct'
54 ; ONE-NEXT: [002] 1 {Struct} 'Struct'
55 ; ONE-NEXT: [003] {Member} public 'U' -> 'Union'
56 ; ONE-NEXT: [003] 2 {Union} 'Union'
57 ; ONE-NEXT: [004] 3 {Enumeration} 'NestedEnum' -> 'int'
58 ; ONE-NEXT: [005] {Enumerator} 'BLUE' = '0x1'
59 ; ONE-NEXT: [005] {Enumerator} 'RED' = '0x0'
61 ; Using the selection facilities, we can produce a logical view
62 ; showing just the logical types that are 'Enumerator' and its
63 ; parents. The logical view is sorted by the types name.
65 ; RUN: llvm-debuginfo-analyzer --attribute=level,format \
66 ; RUN: --output-sort=name \
67 ; RUN: --select-types=Enumerator \
68 ; RUN: --report=parents \
69 ; RUN: --print=types \
70 ; RUN: %p/Inputs/pr-46466-*.o 2>&1 | \
71 ; RUN: FileCheck --strict-whitespace -check-prefix=TWO %s
74 ; TWO-NEXT: [000] {File} 'pr-46466-codeview-clang.o' -> COFF-x86-64
76 ; TWO-NEXT: [001] {CompileUnit} 'pr-46466.cpp'
77 ; TWO-NEXT: [002] 1 {Struct} 'Struct'
78 ; TWO-NEXT: [003] 2 {Union} 'Union'
79 ; TWO-NEXT: [004] 3 {Enumeration} 'NestedEnum' -> 'int'
80 ; TWO-NEXT: [005] {Enumerator} 'BLUE' = '0x1'
81 ; TWO-NEXT: [005] {Enumerator} 'RED' = '0x0'
83 ; TWO-NEXT: Logical View:
84 ; TWO-NEXT: [000] {File} 'pr-46466-codeview-msvc.o' -> COFF-x86-64
86 ; TWO-NEXT: [001] {CompileUnit} 'pr-46466.cpp'
87 ; TWO-NEXT: [002] 1 {Struct} 'Struct'
88 ; TWO-NEXT: [003] 2 {Union} 'Union'
89 ; TWO-NEXT: [004] 3 {Enumeration} 'NestedEnum' -> 'int'
90 ; TWO-NEXT: [005] {Enumerator} 'BLUE' = '0x1'
91 ; TWO-NEXT: [005] {Enumerator} 'RED' = '0x0'
93 ; Using the selection facilities, we can produce a simple tabular output
94 ; including a summary for the logical types that are 'Enumerator'. The
95 ; logical view is sorted by the types name.
97 ; RUN: llvm-debuginfo-analyzer --attribute=level,format \
98 ; RUN: --output-sort=name \
99 ; RUN: --select-types=Enumerator \
100 ; RUN: --print=types,summary \
101 ; RUN: %p/Inputs/pr-46466-*.o 2>&1 | \
102 ; RUN: FileCheck --strict-whitespace -check-prefix=THR %s
105 ; THR-NEXT: [000] {File} 'pr-46466-codeview-clang.o' -> COFF-x86-64
107 ; THR-NEXT: [001] {CompileUnit} 'pr-46466.cpp'
108 ; THR-NEXT: [005] {Enumerator} 'BLUE' = '0x1'
109 ; THR-NEXT: [005] {Enumerator} 'RED' = '0x0'
111 ; THR-NEXT: -----------------------------
112 ; THR-NEXT: Element Total Printed
113 ; THR-NEXT: -----------------------------
114 ; THR-NEXT: Scopes 5 0
115 ; THR-NEXT: Symbols 2 0
116 ; THR-NEXT: Types 6 2
117 ; THR-NEXT: Lines 0 0
118 ; THR-NEXT: -----------------------------
119 ; THR-NEXT: Total 13 2
121 ; THR-NEXT: Logical View:
122 ; THR-NEXT: [000] {File} 'pr-46466-codeview-msvc.o' -> COFF-x86-64
124 ; THR-NEXT: [001] {CompileUnit} 'pr-46466.cpp'
125 ; THR-NEXT: [005] {Enumerator} 'BLUE' = '0x1'
126 ; THR-NEXT: [005] {Enumerator} 'RED' = '0x0'
128 ; THR-NEXT: -----------------------------
129 ; THR-NEXT: Element Total Printed
130 ; THR-NEXT: -----------------------------
131 ; THR-NEXT: Scopes 5 0
132 ; THR-NEXT: Symbols 2 0
133 ; THR-NEXT: Types 7 2
134 ; THR-NEXT: Lines 0 0
135 ; THR-NEXT: -----------------------------
136 ; THR-NEXT: Total 14 2