brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · 6ac2ae6 Raw
81 lines · plain
1// RUN: %clang_cc1 -debug-info-kind=limited -emit-llvm -o - %s | FileCheck %s2// The DWARF standard says the underlying data type of an enum may be3// stored in an DW_AT_type entry in the enum DIE. This is useful to have4// so the debugger knows about the signedness of the underlying type.5 6typedef long NSInteger;7#define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type8 9// Enum with no specified underlying type10typedef enum {11  Enum0One,12  Enum0Two13} Enum0;14 15// Enum declared with the NS_ENUM macro16typedef NS_ENUM(NSInteger, Enum1) {17  Enum1One = -1,18  Enum1Two19};20 21// Enum declared with a fixed underlying type22typedef enum : NSInteger {23  Enum2One = -1,24  Enum2Two25} Enum2;26 27// Typedef and declaration separately28enum : NSInteger29{30  Enum3One = -1,31  Enum3Two32};33typedef NSInteger Enum3;34 35int main(void) {36  Enum0 e0 = Enum0One;37  // CHECK: #dbg_declare({{.*}}, ![[ENUM0:[0-9]+]], !{{.*}})38  Enum1 e1 = Enum1One;39  // CHECK: #dbg_declare({{.*}}, ![[ENUM1:[0-9]+]], !{{.*}})40  Enum2 e2 = Enum2One;41  // CHECK: #dbg_declare({{.*}}, ![[ENUM2:[0-9]+]], !{{.*}})42  Enum3 e3 = Enum3One;43  // CHECK: #dbg_declare({{.*}}, ![[ENUM3:[0-9]+]], !{{.*}})44 45  // -Werror and the following line ensures that these enums are not46  // -treated as C++11 strongly typed enums.47  return e0 != e1 && e1 == e2 && e2 == e3;48}49// CHECK: ![[ENUMERATOR0:[0-9]+]] = !DICompositeType(tag: DW_TAG_enumeration_type50// CHECK-SAME:                                       line: 10,51// CHECK: ![[ENUMERATOR1:[0-9]+]] = !DICompositeType(tag: DW_TAG_enumeration_type, name: "Enum1"52// CHECK-SAME:                                       line: 1653// CHECK-SAME:                                       baseType: ![[ENUMERATOR3:[0-9]+]]54// CHECK: ![[ENUMERATOR3]] = !DIDerivedType(tag: DW_TAG_typedef, name: "NSInteger"55// CHECK-SAME:                              line: 656// CHECK-SAME:                              baseType: ![[LONGINT:[0-9]+]]57// CHECK: ![[LONGINT]] = !DIBasicType(name: "long"58// CHECK: ![[ENUMERATOR2:[0-9]+]] = !DICompositeType(tag: DW_TAG_enumeration_type,59// CHECK-SAME:                                       line: 2260// CHECK-SAME:                                       baseType: ![[ENUMERATOR3]]61 62// CHECK: ![[ENUM0]] = !DILocalVariable(name: "e0"63// CHECK-SAME:                          type: ![[TYPE0:[0-9]+]]64// CHECK: ![[TYPE0]] = !DIDerivedType(tag: DW_TAG_typedef, name: "Enum0",65// CHECK-SAME:                        baseType: ![[ENUMERATOR0]]66 67// CHECK: ![[ENUM1]] = !DILocalVariable(name: "e1"68// CHECK-SAME:                          type: ![[TYPE1:[0-9]+]]69// CHECK: ![[TYPE1]] = !DIDerivedType(tag: DW_TAG_typedef, name: "Enum1"70// CHECK-SAME:                        baseType: ![[ENUMERATOR1]]71 72// CHECK: ![[ENUM2]] = !DILocalVariable(name: "e2"73// CHECK-SAME:                          type: ![[TYPE2:[0-9]+]]74// CHECK: ![[TYPE2]] = !DIDerivedType(tag: DW_TAG_typedef, name: "Enum2"75// CHECK-SAME:                        baseType: ![[ENUMERATOR2]]76 77// CHECK: ![[ENUM3]] = !DILocalVariable(name: "e3"78// CHECK-SAME:                          type: ![[TYPE3:[0-9]+]]79// CHECK: ![[TYPE3]] = !DIDerivedType(tag: DW_TAG_typedef, name: "Enum3"80// CHECK-SAME:                        baseType: ![[ENUMERATOR3]]81