1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
// RUN: %ldc -O2 -c -output-ll -of=%t.ll %s && FileCheck %s < %t.ll
// RUN: %ldc -O2 -disable-gc2stack -c -output-ll -of=%t.ll %s && FileCheck %s --check-prefix NOOPT < %t.ll
class Bar
{
int i;
}
// CHECK: define
int foo1()
{
// NOOPT: call{{.*}}_d_newarrayT
// CHECK-NOT: _d_newarrayT
int[] i = new int[5];
i[3] = 42;
// CHECK: ret
return i[3];
}
// CHECK: define
int foo2()
{
// NOOPT: call{{.*}}_d_allocmemoryT
// CHECK-NOT: _d_allocmemoryT
int* i = new int;
*i = 42;
// CHECK: ret
return *i;
}
// CHECK: define
int foo3()
{
// NOOPT: call{{.*}}_d_allocclass
// CHECK-NOT: _d_allocclass
Bar i = new Bar;
i.i = 42;
// CHECK: ret
return i.i;
}
int[] bar1()
{
// CHECK: _d_newarrayT
int[] i = new int[5];
// CHECK: ret
return i;
}
int* bar2()
{
// CHECK: _d_allocmemoryT
int* i = new int;
// CHECK: ret
return i;
}
Bar bar3()
{
// CHECK: _d_allocclass
Bar i = new Bar;
// CHECK: ret
return i;
}
extern void fun(int[]);
extern void fun(int*);
extern void fun(Bar);
// CHECK: define
int baz1()
{
// CHECK: _d_newarrayT
int[] i = new int[5];
fun(i);
i[3] = 42;
// CHECK: ret
return i[3];
}
// CHECK: define
int baz2()
{
// CHECK: _d_allocmemoryT
int* i = new int;
fun(i);
*i = 42;
// CHECK: ret
return *i;
}
// CHECK: define
int baz3()
{
// CHECK: _d_allocclass
Bar i = new Bar;
fun(i);
i.i = 42;
// CHECK: ret
return i.i;
}
__gshared int[] p1;
__gshared int* p2;
__gshared Bar p3;
// CHECK: define
int bzz1()
{
// CHECK: _d_newarrayT
int[] i = new int[5];
p1 = i;
i[3] = 42;
// CHECK: ret
return i[3];
}
// CHECK: define
int bzz2()
{
// CHECK: _d_allocmemoryT
int* i = new int;
p2 = i;
*i = 42;
// CHECK: ret
return *i;
}
// CHECK: define
int bzz3()
{
// CHECK: _d_allocclass
Bar i = new Bar;
p3 = i;
i.i = 42;
// CHECK: ret
return i.i;
}
|