зеркало из https://github.com/microsoft/clang.git
50 строки
721 B
C++
50 строки
721 B
C++
// 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 i8* @_Znam
|
|
// CHECK: call noalias i8* @_Znam
|
|
// CHECK: call noalias i8* @_Znam
|
|
|