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