| // REQUIRED_ARGS: -vgc -o- |
| // PERMUTE_ARGS: |
| |
| /***************** NewExp *******************/ |
| |
| struct S1 { } |
| struct S2 { this(int); } |
| struct S3 { this(int) @nogc; } |
| struct S4 { new(size_t); } |
| struct S5 { @nogc new(size_t); } |
| |
| /* |
| TEST_OUTPUT: |
| --- |
| compilable/vgc1.d(27): vgc: 'new' causes GC allocation |
| compilable/vgc1.d(29): vgc: 'new' causes GC allocation |
| compilable/vgc1.d(30): vgc: 'new' causes GC allocation |
| compilable/vgc1.d(32): vgc: 'new' causes GC allocation |
| compilable/vgc1.d(33): vgc: 'new' causes GC allocation |
| compilable/vgc1.d(34): vgc: 'new' causes GC allocation |
| compilable/vgc1.d(38): vgc: 'new' causes 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); |
| S4* ps4 = new S4; // no error |
| S5* ps5 = new S5; // no error |
| |
| Object o1 = new Object(); |
| } |
| |
| /* |
| TEST_OUTPUT: |
| --- |
| compilable/vgc1.d(55): vgc: 'new' causes GC allocation |
| compilable/vgc1.d(57): vgc: 'new' causes GC allocation |
| compilable/vgc1.d(58): vgc: 'new' causes GC allocation |
| compilable/vgc1.d(60): vgc: 'new' causes GC allocation |
| compilable/vgc1.d(61): vgc: 'new' causes GC allocation |
| compilable/vgc1.d(62): vgc: 'new' causes 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 S4* ps4 = new S4; // no error |
| scope S5* ps5 = new S5; // no error |
| |
| scope Object o1 = new Object(); // no error |
| scope o2 = new Object(); // no error |
| scope Object o3; |
| o3 = o2; // no error |
| } |
| |
| /***************** DeleteExp *******************/ |
| |
| /* |
| TEST_OUTPUT: |
| --- |
| compilable/vgc1.d(84): vgc: 'delete' requires GC |
| compilable/vgc1.d(85): vgc: 'delete' requires GC |
| compilable/vgc1.d(86): vgc: 'delete' requires GC |
| --- |
| */ |
| void testDelete(int* p, Object o, S1* s) |
| { |
| delete p; |
| delete o; |
| delete s; |
| } |