File: gc2stack.d

package info (click to toggle)
ldc 1%3A1.30.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 59,248 kB
  • sloc: cpp: 61,598; ansic: 14,545; sh: 1,014; makefile: 972; asm: 510; objc: 135; exp: 48; python: 12
file content (138 lines) | stat: -rw-r--r-- 1,886 bytes parent folder | download | duplicates (4)
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;
}