| // REQUIRED_ARGS: -vgc -o- |
| // PERMUTE_ARGS: |
| |
| /***************** NewExp *******************/ |
| |
| struct S1 { } |
| struct S2 { this(int); } |
| struct S3 { this(int) @nogc; } |
| |
| /* |
| TEST_OUTPUT: |
| --- |
| compilable/vgc1.d(25): vgc: `new` causes a GC allocation |
| compilable/vgc1.d(27): vgc: `new` causes a GC allocation |
| compilable/vgc1.d(28): vgc: `new` causes a GC allocation |
| compilable/vgc1.d(30): vgc: `new` causes a GC allocation |
| compilable/vgc1.d(31): vgc: `new` causes a GC allocation |
| compilable/vgc1.d(32): vgc: `new` causes a GC allocation |
| compilable/vgc1.d(34): vgc: `new` causes a GC allocation |
| --- |
| */ |
| |
| void testNew() |
| { |
| int* p1 = new int; |
| |
| int[] a1 = new int[3]; |
| int[][] a2 = new int[][](2, 3); |
| |
| S1* ps1 = new S1(); |
| S2* ps2 = new S2(1); |
| S3* ps3 = new S3(1); |
| |
| Object o1 = new Object(); |
| } |
| |
| /* |
| TEST_OUTPUT: |
| --- |
| compilable/vgc1.d(51): vgc: `new` causes a GC allocation |
| compilable/vgc1.d(53): vgc: `new` causes a GC allocation |
| compilable/vgc1.d(54): vgc: `new` causes a GC allocation |
| compilable/vgc1.d(56): vgc: `new` causes a GC allocation |
| compilable/vgc1.d(57): vgc: `new` causes a GC allocation |
| compilable/vgc1.d(58): vgc: `new` causes a GC allocation |
| --- |
| */ |
| |
| void testNewScope() |
| { |
| scope int* p1 = new int; |
| |
| scope int[] a1 = new int[3]; |
| scope int[][] a2 = new int[][](2, 3); |
| |
| scope S1* ps1 = new S1(); |
| scope S2* ps2 = new S2(1); |
| scope S3* ps3 = new S3(1); |
| |
| scope Object o1 = new Object(); // no error |
| scope o2 = new Object(); // no error |
| scope Object o3; |
| o3 = o2; // no error |
| } |
| |
| /***************** DeleteExp *******************/ |
| |
| void testDelete(int* p, Object o, S1* s) |
| { |
| destroy(p); |
| destroy(o); |
| destroy(s); |
| } |