| // 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 |
| |