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