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