11664d540d1524f0faffd2f839fccb56178975c60Richard Smith// RUN: %clang_cc1 -triple x86_64-apple-darwin -std=c++11 -emit-llvm %s -o - | FileCheck %s
288f4280f6b60edcbdea6a38a3da8b17d66473ad6Fariborz Jahanian
388f4280f6b60edcbdea6a38a3da8b17d66473ad6Fariborz Jahanianextern "C" int printf(...);
488f4280f6b60edcbdea6a38a3da8b17d66473ad6Fariborz Jahanian
588f4280f6b60edcbdea6a38a3da8b17d66473ad6Fariborz Jahanianint count;
688f4280f6b60edcbdea6a38a3da8b17d66473ad6Fariborz Jahanian
788f4280f6b60edcbdea6a38a3da8b17d66473ad6Fariborz Jahanianstruct S {
888f4280f6b60edcbdea6a38a3da8b17d66473ad6Fariborz Jahanian  S() : iS(++count) { printf("S::S(%d)\n", iS); }
988f4280f6b60edcbdea6a38a3da8b17d66473ad6Fariborz Jahanian  ~S() { printf("S::~S(%d)\n", iS); }
1088f4280f6b60edcbdea6a38a3da8b17d66473ad6Fariborz Jahanian  int iS;
1188f4280f6b60edcbdea6a38a3da8b17d66473ad6Fariborz Jahanian};
1288f4280f6b60edcbdea6a38a3da8b17d66473ad6Fariborz Jahanian
1388f4280f6b60edcbdea6a38a3da8b17d66473ad6Fariborz Jahanian
1488f4280f6b60edcbdea6a38a3da8b17d66473ad6Fariborz JahanianS arr[2][1];
1588f4280f6b60edcbdea6a38a3da8b17d66473ad6Fariborz JahanianS s1;
1688f4280f6b60edcbdea6a38a3da8b17d66473ad6Fariborz JahanianS arr1[3];
1788f4280f6b60edcbdea6a38a3da8b17d66473ad6Fariborz Jahanianstatic S sarr[4];
1888f4280f6b60edcbdea6a38a3da8b17d66473ad6Fariborz Jahanian
1988f4280f6b60edcbdea6a38a3da8b17d66473ad6Fariborz Jahanianint main () {}
2088f4280f6b60edcbdea6a38a3da8b17d66473ad6Fariborz JahanianS arr2[2];
2188f4280f6b60edcbdea6a38a3da8b17d66473ad6Fariborz Jahanianstatic S sarr1[4];
2288f4280f6b60edcbdea6a38a3da8b17d66473ad6Fariborz JahanianS s2;
2388f4280f6b60edcbdea6a38a3da8b17d66473ad6Fariborz JahanianS arr3[3];
2488f4280f6b60edcbdea6a38a3da8b17d66473ad6Fariborz Jahanian
251664d540d1524f0faffd2f839fccb56178975c60Richard Smith// CHECK: call {{.*}} @__cxa_atexit
261664d540d1524f0faffd2f839fccb56178975c60Richard Smith// CHECK: call {{.*}} @__cxa_atexit
271664d540d1524f0faffd2f839fccb56178975c60Richard Smith// CHECK: call {{.*}} @__cxa_atexit
281664d540d1524f0faffd2f839fccb56178975c60Richard Smith// CHECK: call {{.*}} @__cxa_atexit
291664d540d1524f0faffd2f839fccb56178975c60Richard Smith// CHECK: call {{.*}} @__cxa_atexit
301664d540d1524f0faffd2f839fccb56178975c60Richard Smith// CHECK: call {{.*}} @__cxa_atexit
311664d540d1524f0faffd2f839fccb56178975c60Richard Smith// CHECK: call {{.*}} @__cxa_atexit
321664d540d1524f0faffd2f839fccb56178975c60Richard Smith// CHECK: call {{.*}} @__cxa_atexit
331664d540d1524f0faffd2f839fccb56178975c60Richard Smith
341664d540d1524f0faffd2f839fccb56178975c60Richard Smithstruct T {
351664d540d1524f0faffd2f839fccb56178975c60Richard Smith  double d;
361664d540d1524f0faffd2f839fccb56178975c60Richard Smith  int n;
371664d540d1524f0faffd2f839fccb56178975c60Richard Smith  ~T();
381664d540d1524f0faffd2f839fccb56178975c60Richard Smith};
391664d540d1524f0faffd2f839fccb56178975c60Richard SmithT t[2][3] = { 1.0, 2, 3.0, 4, 5.0, 6, 7.0, 8, 9.0, 10, 11.0, 12 };
401664d540d1524f0faffd2f839fccb56178975c60Richard Smith
411664d540d1524f0faffd2f839fccb56178975c60Richard Smith// CHECK: call {{.*}} @__cxa_atexit
421664d540d1524f0faffd2f839fccb56178975c60Richard Smith// CHECK: getelementptr inbounds ({{.*}} bitcast {{.*}}* @t to %struct.T*), i64 6
431664d540d1524f0faffd2f839fccb56178975c60Richard Smith// CHECK: call void @_ZN1TD1Ev
441664d540d1524f0faffd2f839fccb56178975c60Richard Smith// CHECK: icmp eq {{.*}} @t
451664d540d1524f0faffd2f839fccb56178975c60Richard Smith// CHECK: br i1 {{.*}}
465f9a7e31d038843f1d3a5e2544fc365ffd563951Richard Smith
475f9a7e31d038843f1d3a5e2544fc365ffd563951Richard Smithstatic T t2[2][3] = { 1.0, 2, 3.0, 4, 5.0, 6, 7.0, 8, 9.0, 10, 11.0, 12 };
485f9a7e31d038843f1d3a5e2544fc365ffd563951Richard Smith
495f9a7e31d038843f1d3a5e2544fc365ffd563951Richard Smith// CHECK: call {{.*}} @__cxa_atexit
505f9a7e31d038843f1d3a5e2544fc365ffd563951Richard Smith// CHECK: getelementptr inbounds ({{.*}} bitcast {{.*}}* @_ZL2t2 to %struct.T*), i64 6
515f9a7e31d038843f1d3a5e2544fc365ffd563951Richard Smith// CHECK: call void @_ZN1TD1Ev
525f9a7e31d038843f1d3a5e2544fc365ffd563951Richard Smith// CHECK: icmp eq {{.*}} @_ZL2t
535f9a7e31d038843f1d3a5e2544fc365ffd563951Richard Smith// CHECK: br i1 {{.*}}
54802e22682c17c4a9df3f747abd224db38e382e39Richard Smith
55802e22682c17c4a9df3f747abd224db38e382e39Richard Smithusing U = T[2][3];
56802e22682c17c4a9df3f747abd224db38e382e39Richard SmithU &&u = U{ {{1.0, 2}, {3.0, 4}, {5.0, 6}}, {{7.0, 8}, {9.0, 10}, {11.0, 12}} };
57802e22682c17c4a9df3f747abd224db38e382e39Richard Smith
58802e22682c17c4a9df3f747abd224db38e382e39Richard Smith// CHECK: call {{.*}} @__cxa_atexit
593ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar// CHECK: getelementptr inbounds ({{.*}}* getelementptr inbounds ([2 x [3 x {{.*}}]], [2 x [3 x {{.*}}]]* @_ZGR1u_, i32 0, i32 0, i32 0), i64 6)
60802e22682c17c4a9df3f747abd224db38e382e39Richard Smith// CHECK: call void @_ZN1TD1Ev
616bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines// CHECK: icmp eq {{.*}} @_ZGR1u_
62802e22682c17c4a9df3f747abd224db38e382e39Richard Smith// CHECK: br i1 {{.*}}
63