Mercurial > hg > CbC > CbC_llvm
diff clang/test/CodeGenCXX/microsoft-new.cpp @ 150:1d019706d866
LLVM10
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 15:10:13 +0900 |
parents | |
children | c4bab56944e8 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/clang/test/CodeGenCXX/microsoft-new.cpp Thu Feb 13 15:10:13 2020 +0900 @@ -0,0 +1,39 @@ +// RUN: %clang_cc1 -triple i686-pc-win32 -fms-compatibility %s -emit-llvm -o - | FileCheck %s + +#include <stddef.h> + +struct arbitrary_t {} arbitrary; +void *operator new(size_t size, arbitrary_t); + +struct arbitrary2_t {} arbitrary2; +void *operator new[](size_t size, arbitrary2_t); + +namespace PR13164 { + void f() { + // MSVC will fall back on the non-array operator new. + void *a; + int *p = new(arbitrary) int[4]; + // CHECK: call i8* @"??2@YAPAXIUarbitrary_t@@@Z"(i32 16, %struct.arbitrary_t* + } + + struct S { + void *operator new[](size_t size, arbitrary_t); + }; + + void g() { + S *s = new(arbitrary) S[2]; + // CHECK: call i8* @"??_US@PR13164@@SAPAXIUarbitrary_t@@@Z"(i32 2, %struct.arbitrary_t* + S *s1 = new(arbitrary) S; + // CHECK: call i8* @"??2@YAPAXIUarbitrary_t@@@Z"(i32 1, %struct.arbitrary_t* + } + + struct T { + void *operator new(size_t size, arbitrary2_t); + }; + + void h() { + // This should still call the global operator new[]. + T *t = new(arbitrary2) T[2]; + // CHECK: call i8* @"??_U@YAPAXIUarbitrary2_t@@@Z"(i32 2, %struct.arbitrary2_t* + } +}