xref: /aosp_15_r20/external/clang/test/CodeGenCXX/debug-info-enum.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s
2*67e74705SXin Li 
3*67e74705SXin Li // CHECK: !DICompileUnit(
4*67e74705SXin Li // CHECK-SAME:           enums: [[ENUMS:![0-9]*]]
5*67e74705SXin Li // CHECK: [[ENUMS]] = !{[[E1:![0-9]*]], [[E2:![0-9]*]], [[E3:![0-9]*]]}
6*67e74705SXin Li 
7*67e74705SXin Li namespace test1 {
8*67e74705SXin Li // CHECK: [[E1]] = !DICompositeType(tag: DW_TAG_enumeration_type, name: "e"
9*67e74705SXin Li // CHECK-SAME:                      scope: [[TEST1:![0-9]*]]
10*67e74705SXin Li // CHECK-SAME:                      elements: [[TEST1_ENUMS:![0-9]*]]
11*67e74705SXin Li // CHECK-SAME:                      identifier: "_ZTSN5test11eE"
12*67e74705SXin Li // CHECK: [[TEST1]] = !DINamespace(name: "test1"
13*67e74705SXin Li // CHECK: [[TEST1_ENUMS]] = !{[[TEST1_E:![0-9]*]]}
14*67e74705SXin Li // CHECK: [[TEST1_E]] = !DIEnumerator(name: "E", value: 0)
15*67e74705SXin Li enum e { E };
foo()16*67e74705SXin Li void foo() {
17*67e74705SXin Li   int v = E;
18*67e74705SXin Li }
19*67e74705SXin Li }
20*67e74705SXin Li 
21*67e74705SXin Li namespace test2 {
22*67e74705SXin Li // rdar://8195980
23*67e74705SXin Li // CHECK: [[E2]] = !DICompositeType(tag: DW_TAG_enumeration_type, name: "e"
24*67e74705SXin Li // CHECK-SAME:                      scope: [[TEST2:![0-9]+]]
25*67e74705SXin Li // CHECK-SAME:                      elements: [[TEST1_ENUMS]]
26*67e74705SXin Li // CHECK-SAME:                      identifier: "_ZTSN5test21eE"
27*67e74705SXin Li // CHECK: [[TEST2]] = !DINamespace(name: "test2"
28*67e74705SXin Li enum e { E };
func(int i)29*67e74705SXin Li bool func(int i) {
30*67e74705SXin Li   return i == E;
31*67e74705SXin Li }
32*67e74705SXin Li }
33*67e74705SXin Li 
34*67e74705SXin Li namespace test3 {
35*67e74705SXin Li // CHECK: [[E3]] = !DICompositeType(tag: DW_TAG_enumeration_type, name: "e"
36*67e74705SXin Li // CHECK-SAME:                      scope: [[TEST3:![0-9]*]]
37*67e74705SXin Li // CHECK-SAME:                      elements: [[TEST3_ENUMS:![0-9]*]]
38*67e74705SXin Li // CHECK-SAME:                      identifier: "_ZTSN5test31eE"
39*67e74705SXin Li // CHECK: [[TEST3]] = !DINamespace(name: "test3"
40*67e74705SXin Li // CHECK: [[TEST3_ENUMS]] = !{[[TEST3_E:![0-9]*]]}
41*67e74705SXin Li // CHECK: [[TEST3_E]] = !DIEnumerator(name: "E", value: -1)
42*67e74705SXin Li enum e { E = -1 };
func()43*67e74705SXin Li void func() {
44*67e74705SXin Li   e x;
45*67e74705SXin Li }
46*67e74705SXin Li }
47*67e74705SXin Li 
48*67e74705SXin Li namespace test4 {
49*67e74705SXin Li // Don't try to build debug info for a dependent enum.
50*67e74705SXin Li // CHECK-NOT: test4
51*67e74705SXin Li template <typename T>
52*67e74705SXin Li struct S {
53*67e74705SXin Li   enum e { E = T::v };
54*67e74705SXin Li };
55*67e74705SXin Li }
56