16bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// REQUIRES: xcore-registered-target 26bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// RUN: %clang_cc1 -triple xcore-unknown-unknown -fno-signed-char -fno-common -emit-llvm -o - %s | FileCheck %s 36bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 46bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: target triple = "xcore-unknown-unknown" 56bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 66bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// In the tests below, some types are not supported by the ABI (_Complex, 76bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// variable length arrays) and will thus emit no meta data. 86bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// The 33 tests that do emit typestrings are gathered into '!xcore.typestrings' 96bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// Please see 'Tools Development Guide' section 2.16.2 for format details: 106bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// <https://www.xmos.com/download/public/Tools-Development-Guide%28X9114A%29.pdf> 116bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 12ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !xcore.typestrings = !{!1, !2, !3, !4, !5, !6, !7, !8, !9, !10, !11, 13ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !12, !13, !14, !15, !16, !17, !18, !19, !20, !21, !22, !23, !24, !25, 14ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !26, !27, !28, !29, !30, !31, !32, !33, !34, !35, !36, !37, !38} 156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 166bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 176bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// test BuiltinType 18ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !1 = metadata !{void (i1, i8, i8, i8, i16, i16, i16, i32, i32, i32, 196bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: i32, i32, i32, i64, i64, i64, float, double, double)* 206bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: @builtinType, metadata !"f{0}(b,uc,uc,sc,ss,us,ss,si,ui,si,sl, 216bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: ul,sl,sll,ull,sll,ft,d,ld)"} 226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid builtinType(_Bool B, char C, unsigned char UC, signed char SC, short S, 236bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines unsigned short US, signed short SS, int I, unsigned int UI, 246bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines signed int SI, long L, unsigned long UL, signed long SL, 256bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines long long LL, unsigned long long ULL, signed long long SLL, 266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines float F, double D, long double LD) {} 276bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesdouble _Complex Complex; // not supported 286bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 296bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 306bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// test FunctionType & Qualifiers 31ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !2 = metadata !{void ()* @gI, metadata !"f{0}()"} 32ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !3 = metadata !{void (...)* @eI, metadata !"f{0}()"} 33ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !4 = metadata !{void ()* @gV, metadata !"f{0}(0)"} 34ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !5 = metadata !{void ()* @eV, metadata !"f{0}(0)"} 35ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !6 = metadata !{void (i32, ...)* @gVA, metadata !"f{0}(si,va)"} 36ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !7 = metadata !{void (i32, ...)* @eVA, metadata !"f{0}(si,va)"} 37ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !8 = metadata !{i32* (i32*)* @gQ, metadata !"f{crv:p(cv:si)}(p(cv:si))"} 38ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !9 = metadata !{i32* (i32*)* @eQ, metadata !"f{crv:p(cv:si)}(p(cv:si))"} 396bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesextern void eI(); 406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid gI() {eI();}; 416bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesextern void eV(void); 426bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid gV(void) {eV();} 436bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesextern void eVA(int, ...); 446bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid gVA(int i, ...) {eVA(i);} 456bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesextern const volatile int* volatile restrict const 466bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines eQ(const volatile int * volatile restrict const); 476bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesconst volatile int* volatile restrict const 486bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines gQ(const volatile int * volatile restrict const i) {return eQ(i);} 496bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 506bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 516bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// test PointerType 52ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !10 = metadata !{i32* (i32*, i32* (i32*)*)* 53ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: @pointerType, metadata !"f{p(si)}(p(si),p(f{p(si)}(p(si))))"} 54ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !11 = metadata !{i32** @EP, metadata !"p(si)"} 55ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !12 = metadata !{i32** @GP, metadata !"p(si)"} 566bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesextern int* EP; 576bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesint* GP; 586bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesint* pointerType(int *I, int * (*FP)(int *)) { 596bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return I? EP : GP; 606bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 616bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 626bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// test ArrayType 63ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !13 = metadata !{[2 x i32]* (i32*, i32*, [2 x i32]*, [2 x i32]*, i32*)* 64ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: @arrayType, metadata !"f{p(a(2:si))}(p(si),p(cv:si),p(a(2:si)), 656bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: p(a(2:si)),p(si))"} 66ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !14 = metadata !{[0 x i32]* @EA1, metadata !"a(*:cv:si)"} 67ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !15 = metadata !{[2 x i32]* @EA2, metadata !"a(2:si)"} 68ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !16 = metadata !{[0 x [2 x i32]]* @EA3, metadata !"a(*:a(2:si))"} 69ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !17 = metadata !{[3 x [2 x i32]]* @EA4, metadata !"a(3:a(2:si))"} 70ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !18 = metadata !{[2 x i32]* @GA1, metadata !"a(2:cv:si)"} 71ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !19 = metadata !{void ([2 x i32]*)* @arrayTypeVariable1, 726bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: metadata !"f{0}(p(a(2:si)))"} 73ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !20 = metadata !{void (void ([2 x i32]*)*)* @arrayTypeVariable2, 746bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: metadata !"f{0}(p(f{0}(p(a(2:si)))))"} 75ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !21 = metadata !{[3 x [2 x i32]]* @GA2, metadata !"a(3:a(2:si))"} 76ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesextern int GA2[3][2]; 77ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesextern const volatile int EA1[]; 786bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesextern int EA2[2]; 796bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesextern int EA3[][2]; 806bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesextern int EA4[3][2]; 81ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesconst volatile int GA1[2]; 826bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesextern void arrayTypeVariable1(int[*][2]); 836bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesextern void arrayTypeVariable2( void(*fp)(int[*][2]) ); 846bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesextern void arrayTypeVariable3(int[3][*]); // not supported 856bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesextern void arrayTypeVariable4( void(*fp)(int[3][*]) ); // not supported 866bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinestypedef int RetType[2]; 87ef8225444452a1486bd721f3285301fe84643b00Stephen HinesRetType* arrayType(int A1[], int const volatile A2[2], int A3[][2], 88ef8225444452a1486bd721f3285301fe84643b00Stephen Hines int A4[3][2], int A5[const volatile restrict static 2]) { 89ef8225444452a1486bd721f3285301fe84643b00Stephen Hines if (A1) EA2[0] = EA1[0]; 906bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines if (A2) return &EA2; 916bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines if (A3) return EA3; 926bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines if (A4) return EA4; 93ef8225444452a1486bd721f3285301fe84643b00Stephen Hines if (A5) EA2[0] = GA1[0]; 946bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines arrayTypeVariable1(EA4); 956bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines arrayTypeVariable2(arrayTypeVariable1); 966bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines arrayTypeVariable3(EA4); 976bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines arrayTypeVariable4(arrayTypeVariable3); 986bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return GA2; 996bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 1006bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 1016bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 1026bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// test StructureType 103ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !22 = metadata !{void (%struct.S1*)* @structureType1, metadata 1046bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: !"f{0}(s(S1){m(ps2){p(s(S2){m(ps3){p(s(S3){m(s1){s(S1){}}})}})}})"} 105ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !23 = metadata !{void (%struct.S2*)* @structureType2, metadata 1066bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: !"f{0}(s(S2){m(ps3){p(s(S3){m(s1){s(S1){m(ps2){p(s(S2){})}}}})}})"} 107ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !24 = metadata !{void (%struct.S3*)* @structureType3, metadata 1086bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: !"f{0}(s(S3){m(s1){s(S1){m(ps2){p(s(S2){m(ps3){p(s(S3){})}})}}}})"} 109ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !25 = metadata !{void (%struct.S4*)* @structureType4, metadata 1106bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: !"f{0}(s(S4){m(s1){s(S1){m(ps2){p(s(S2){m(ps3){p(s(S3){m(s1){s(S1){}}})}})}}}})"} 111ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !26 = metadata !{%struct.anon* @StructAnon, metadata !"s(){m(A){si}}"} 112ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !27 = metadata !{i32 (%struct.SB*)* @structureTypeB, metadata 1136bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: !"f{si}(s(SB){m(){b(4:si)},m(){b(2:si)},m(N4){b(4:si)}, 1146bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: m(N2){b(2:si)},m(){b(4:ui)},m(){b(4:si)},m(){b(4:c:si)}, 1156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: m(){b(4:c:si)},m(){b(4:cv:si)}})"} 1166bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct S2; 1176bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct S1{struct S2 *ps2;}; 1186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct S3; 1196bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct S2{struct S3 *ps3;}; 1206bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct S3{struct S1 s1;}; 1216bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct S4{struct S1 s1;}; 1226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid structureType1(struct S1 s1){} 1236bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid structureType2(struct S2 s2){} 1246bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid structureType3(struct S3 s3){} 1256bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid structureType4(struct S4 s4){} 1266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct {int A;} StructAnon = {1}; 1276bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct SB{int:4; int:2; int N4:4; int N2:2; unsigned int:4; signed int:4; 1286bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines const int:4; int const :4; volatile const int:4;}; 1296bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesint structureTypeB(struct SB sb){return StructAnon.A;} 1306bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 1316bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 1326bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// test UnionType 133ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !28 = metadata !{void (%union.U1*)* @unionType1, metadata 1346bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: !"f{0}(u(U1){m(pu2){p(u(U2){m(pu3){p(u(U3){m(u1){u(U1){}}})}})}})"} 135ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !29 = metadata !{void (%union.U2*)* @unionType2, metadata 1366bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: !"f{0}(u(U2){m(pu3){p(u(U3){m(u1){u(U1){m(pu2){p(u(U2){})}}}})}})"} 137ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !30 = metadata !{void (%union.U3*)* @unionType3, metadata 1386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: !"f{0}(u(U3){m(u1){u(U1){m(pu2){p(u(U2){m(pu3){p(u(U3){})}})}}}})"} 139ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !31 = metadata !{void (%union.U4*)* @unionType4, metadata 1406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: !"f{0}(u(U4){m(u1){u(U1){m(pu2){p(u(U2){m(pu3){p(u(U3){m(u1){u(U1){}}})}})}}}})"} 141ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !32 = metadata !{%union.anon* @UnionAnon, metadata !"u(){m(A){si}}"} 142ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !33 = metadata !{i32 (%union.UB*)* @unionTypeB, metadata 1436bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: !"f{si}(u(UB){m(N2){b(2:si)},m(N4){b(4:si)},m(){b(2:si)}, 1446bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: m(){b(4:c:si)},m(){b(4:c:si)},m(){b(4:cv:si)},m(){b(4:si)}, 1456bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: m(){b(4:si)},m(){b(4:ui)}})"} 1466bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesunion U2; 1476bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesunion U1{union U2 *pu2;}; 1486bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesunion U3; 1496bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesunion U2{union U3 *pu3;}; 1506bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesunion U3{union U1 u1;}; 1516bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesunion U4{union U1 u1;}; 1526bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid unionType1(union U1 u1) {} 1536bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid unionType2(union U2 u2) {} 1546bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid unionType3(union U3 u3) {} 1556bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesvoid unionType4(union U4 u4) {} 1566bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesunion UB{int:4; int:2; int N4:4; int N2:2; unsigned int:4; signed int:4; 1576bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines const int:4; int const :4; volatile const int:4;}; 1586bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesunion {int A;} UnionAnon = {1}; 1596bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesint unionTypeB(union UB ub) {return UnionAnon.A;} 1606bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 1616bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 1626bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// test EnumType 163ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !34 = metadata !{i32* @EnumAnon, metadata !"e(){m(EA){3}}"} 164ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !35 = metadata !{i32 (i32)* @enumType, metadata 1656bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: !"f{si}(e(E){m(A){7},m(B){6},m(C){5},m(D){0}})"} 1666bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesenum E {D, C=5, B, A}; 1676bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesenum {EA=3} EnumAnon = EA; 1686bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesint enumType(enum E e) {return EnumAnon;} 169ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 170ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 171ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !36 = metadata !{i32 ()* @testReDecl, metadata !"f{si}()"} 172ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !37 = metadata !{[10 x i32]* @After, metadata !"a(10:si)"} 173ef8225444452a1486bd721f3285301fe84643b00Stephen Hines// CHECK: !38 = metadata !{[10 x i32]* @Before, metadata !"a(10:si)"} 174ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesextern int After[]; 175ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesextern int Before[10]; 176ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesint testReDecl() {return After[0] + Before[0];} 177ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesint After[10]; 178ef8225444452a1486bd721f3285301fe84643b00Stephen Hinesint Before[]; 179ef8225444452a1486bd721f3285301fe84643b00Stephen Hines 180