| // RUN: clang-cc %s -emit-llvm -o %t && |
| |
| void t1() { |
| int* a = new int; |
| } |
| |
| // Placement. |
| void* operator new(unsigned long, void*) throw(); |
| |
| void t2(int* a) { |
| int* b = new (a) int; |
| } |
| |
| struct S { |
| int a; |
| }; |
| |
| // POD types. |
| void t3() { |
| int *a = new int(10); |
| _Complex int* b = new _Complex int(10i); |
| |
| S s; |
| s.a = 10; |
| S *sp = new S(s); |
| } |
| |
| // Non-POD |
| struct T { |
| T(); |
| int a; |
| }; |
| |
| void t4() { |
| // RUN: grep "call void @_ZN1TC1Ev" %t | count 1 && |
| T *t = new T; |
| } |
| |
| struct T2 { |
| int a; |
| T2(int, int); |
| }; |
| |
| void t5() { |
| // RUN: grep "call void @_ZN2T2C1Eii" %t | count 1 |
| T2 *t2 = new T2(10, 10); |
| } |
| |
| int *t6() { |
| // Null check. |
| return new (0) int(10); |
| } |