xref: /aosp_15_r20/external/clang/test/CodeGenCXX/multi-dim-operator-new.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 %s -triple x86_64-unknown-unknown -emit-llvm -o - | FileCheck %s
2*67e74705SXin Li // PR6641
3*67e74705SXin Li 
4*67e74705SXin Li extern "C" int printf(const char *, ...);
5*67e74705SXin Li 
6*67e74705SXin Li struct Foo {
FooFoo7*67e74705SXin Li  Foo() : iFoo (2) {
8*67e74705SXin Li   printf("%p\n", this);
9*67e74705SXin Li  }
10*67e74705SXin Li  int iFoo;
11*67e74705SXin Li };
12*67e74705SXin Li 
13*67e74705SXin Li 
14*67e74705SXin Li typedef Foo (*T)[3][4];
15*67e74705SXin Li 
bar()16*67e74705SXin Li T bar() {
17*67e74705SXin Li  return new Foo[2][3][4];
18*67e74705SXin Li }
19*67e74705SXin Li 
bug(int i)20*67e74705SXin Li T bug(int i) {
21*67e74705SXin Li   return new Foo[i][3][4];
22*67e74705SXin Li }
23*67e74705SXin Li 
pr(T a)24*67e74705SXin Li void pr(T a) {
25*67e74705SXin Li   for (int i = 0; i < 3; i++)
26*67e74705SXin Li    for (int j = 0; j < 4; j++)
27*67e74705SXin Li      printf("%p\n", a[i][j]);
28*67e74705SXin Li }
29*67e74705SXin Li 
test()30*67e74705SXin Li Foo *test() {
31*67e74705SXin Li   return new Foo[5];
32*67e74705SXin Li }
33*67e74705SXin Li 
main()34*67e74705SXin Li int main() {
35*67e74705SXin Li  T f =  bar();
36*67e74705SXin Li  pr(f);
37*67e74705SXin Li  f = bug(3);
38*67e74705SXin Li  pr(f);
39*67e74705SXin Li 
40*67e74705SXin Li  Foo * g = test();
41*67e74705SXin Li  for (int i = 0; i < 5; i++)
42*67e74705SXin Li  printf("%d\n", g[i].iFoo);
43*67e74705SXin Li  return 0;
44*67e74705SXin Li }
45*67e74705SXin Li 
46*67e74705SXin Li // CHECK: call i8* @_Znam
47*67e74705SXin Li // CHECK: call i8* @_Znam
48*67e74705SXin Li // CHECK: call i8* @_Znam
49*67e74705SXin Li 
50