// RUN: %clang_cc1 %s -triple x86_64-unknown-unknown -emit-llvm -o - | FileCheck %s | |
// PR6641 | |
extern "C" int printf(const char *, ...); | |
struct Foo { | |
Foo() : iFoo (2) { | |
printf("%p\n", this); | |
} | |
int iFoo; | |
}; | |
typedef Foo (*T)[3][4]; | |
T bar() { | |
return new Foo[2][3][4]; | |
} | |
T bug(int i) { | |
return new Foo[i][3][4]; | |
} | |
void pr(T a) { | |
for (int i = 0; i < 3; i++) | |
for (int j = 0; j < 4; j++) | |
printf("%p\n", a[i][j]); | |
} | |
Foo *test() { | |
return new Foo[5]; | |
} | |
int main() { | |
T f = bar(); | |
pr(f); | |
f = bug(3); | |
pr(f); | |
Foo * g = test(); | |
for (int i = 0; i < 5; i++) | |
printf("%d\n", g[i].iFoo); | |
return 0; | |
} | |
// CHECK: call noalias nonnull i8* @_Znam | |
// CHECK: call noalias nonnull i8* @_Znam | |
// CHECK: call noalias nonnull i8* @_Znam |