Hans Wennborg | 442e4f7 | 2013-12-13 22:43:52 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -triple i686-pc-win32 -cxx-abi itanium -fms-compatibility %s -emit-llvm -o - | FileCheck %s
|
Aaron Ballman | 324fbee | 2013-05-30 01:55:39 +0000 | [diff] [blame] | 2 |
|
Aaron Ballman | 1235464 | 2013-05-30 02:02:23 +0000 | [diff] [blame] | 3 | #include <stddef.h>
|
| 4 |
|
Aaron Ballman | 324fbee | 2013-05-30 01:55:39 +0000 | [diff] [blame] | 5 | struct arbitrary_t {} arbitrary;
|
Aaron Ballman | 1235464 | 2013-05-30 02:02:23 +0000 | [diff] [blame] | 6 | void *operator new(size_t size, arbitrary_t);
|
Aaron Ballman | 324fbee | 2013-05-30 01:55:39 +0000 | [diff] [blame] | 7 |
|
| 8 | struct arbitrary2_t {} arbitrary2;
|
Aaron Ballman | 1235464 | 2013-05-30 02:02:23 +0000 | [diff] [blame] | 9 | void *operator new[](size_t size, arbitrary2_t);
|
Aaron Ballman | 324fbee | 2013-05-30 01:55:39 +0000 | [diff] [blame] | 10 |
|
| 11 | namespace PR13164 {
|
| 12 | void f() {
|
| 13 | // MSVC will fall back on the non-array operator new.
|
| 14 | void *a;
|
| 15 | int *p = new(arbitrary) int[4];
|
| 16 | // CHECK: call i8* @_Znwj11arbitrary_t(i32 16, %struct.arbitrary_t*
|
| 17 | }
|
| 18 |
|
| 19 | struct S {
|
Aaron Ballman | 1235464 | 2013-05-30 02:02:23 +0000 | [diff] [blame] | 20 | void *operator new[](size_t size, arbitrary_t);
|
Aaron Ballman | 324fbee | 2013-05-30 01:55:39 +0000 | [diff] [blame] | 21 | };
|
| 22 |
|
| 23 | void g() {
|
| 24 | S *s = new(arbitrary) S[2];
|
| 25 | // CHECK: call i8* @_ZN7PR131641SnaEj11arbitrary_t(i32 2, %struct.arbitrary_t*
|
| 26 | S *s1 = new(arbitrary) S;
|
| 27 | // CHECK: call i8* @_Znwj11arbitrary_t(i32 1, %struct.arbitrary_t*
|
| 28 | }
|
| 29 |
|
| 30 | struct T {
|
Aaron Ballman | 1235464 | 2013-05-30 02:02:23 +0000 | [diff] [blame] | 31 | void *operator new(size_t size, arbitrary2_t);
|
Aaron Ballman | 324fbee | 2013-05-30 01:55:39 +0000 | [diff] [blame] | 32 | };
|
| 33 |
|
| 34 | void h() {
|
| 35 | // This should still call the global operator new[].
|
| 36 | T *t = new(arbitrary2) T[2];
|
| 37 | // CHECK: call i8* @_Znaj12arbitrary2_t(i32 2, %struct.arbitrary2_t*
|
| 38 | }
|
| 39 | }
|