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 Livoid 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 Libool 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 Livoid 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