Code gen for multi-dimensional dynamic allocations.
Fixes PR6641.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@99404 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/CodeGenCXX/multi-dim-operator-new.cpp b/test/CodeGenCXX/multi-dim-operator-new.cpp
new file mode 100644
index 0000000..46832ae
--- /dev/null
+++ b/test/CodeGenCXX/multi-dim-operator-new.cpp
@@ -0,0 +1,44 @@
+// RUN: %clang_cc1 -emit-llvm-only -verify %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;
+}