1*67e74705SXin Li // RUN: %clang_cc1 %s -triple x86_64-unknown-unknown -emit-llvm -o - | FileCheck %s 2*67e74705SXin Li // PR6641 3*67e74705SXin Li 4*67e74705SXin Li extern "C" int printf(const char *, ...); 5*67e74705SXin Li 6*67e74705SXin Li struct Foo { FooFoo7*67e74705SXin Li Foo() : iFoo (2) { 8*67e74705SXin Li printf("%p\n", this); 9*67e74705SXin Li } 10*67e74705SXin Li int iFoo; 11*67e74705SXin Li }; 12*67e74705SXin Li 13*67e74705SXin Li 14*67e74705SXin Li typedef Foo (*T)[3][4]; 15*67e74705SXin Li bar()16*67e74705SXin LiT bar() { 17*67e74705SXin Li return new Foo[2][3][4]; 18*67e74705SXin Li } 19*67e74705SXin Li bug(int i)20*67e74705SXin LiT bug(int i) { 21*67e74705SXin Li return new Foo[i][3][4]; 22*67e74705SXin Li } 23*67e74705SXin Li pr(T a)24*67e74705SXin Livoid pr(T a) { 25*67e74705SXin Li for (int i = 0; i < 3; i++) 26*67e74705SXin Li for (int j = 0; j < 4; j++) 27*67e74705SXin Li printf("%p\n", a[i][j]); 28*67e74705SXin Li } 29*67e74705SXin Li test()30*67e74705SXin LiFoo *test() { 31*67e74705SXin Li return new Foo[5]; 32*67e74705SXin Li } 33*67e74705SXin Li main()34*67e74705SXin Liint main() { 35*67e74705SXin Li T f = bar(); 36*67e74705SXin Li pr(f); 37*67e74705SXin Li f = bug(3); 38*67e74705SXin Li pr(f); 39*67e74705SXin Li 40*67e74705SXin Li Foo * g = test(); 41*67e74705SXin Li for (int i = 0; i < 5; i++) 42*67e74705SXin Li printf("%d\n", g[i].iFoo); 43*67e74705SXin Li return 0; 44*67e74705SXin Li } 45*67e74705SXin Li 46*67e74705SXin Li // CHECK: call i8* @_Znam 47*67e74705SXin Li // CHECK: call i8* @_Znam 48*67e74705SXin Li // CHECK: call i8* @_Znam 49*67e74705SXin Li 50