From 149e6031323d6507860909a5cbb449fb2d0e0210 Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Tue, 30 Jun 2015 03:30:26 +0000 Subject: [MS ABI] Workaround corner-case bug in the ABI for operator delete MSVC only genreates array cookies if the class has a destructor. This is problematic when having to call T::operator delete[](void *, size_t) because the second argument's argument is impossible to synthesize correctly if the class has no destructor (because there will be no array cookie). Instead, MSVC passes the size of the class. Do the same, for compatibility, instead of crashing. This fixes PR23990. llvm-svn: 241038 --- clang/test/CodeGenCXX/microsoft-abi-array-cookies.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'clang/test/CodeGenCXX/microsoft-abi-array-cookies.cpp') diff --git a/clang/test/CodeGenCXX/microsoft-abi-array-cookies.cpp b/clang/test/CodeGenCXX/microsoft-abi-array-cookies.cpp index 619b1b8a948..62ead4fb69d 100644 --- a/clang/test/CodeGenCXX/microsoft-abi-array-cookies.cpp +++ b/clang/test/CodeGenCXX/microsoft-abi-array-cookies.cpp @@ -58,4 +58,14 @@ void check_array_cookies_aligned() { // CHECK: getelementptr inbounds i8, i8* [[ARRAY_AS_CHAR]], i64 -8 } +namespace PR23990 { +struct S { + char x[42]; + void operator delete[](void *p, __SIZE_TYPE__); + // CHECK-LABEL: define void @"\01?delete_s@PR23990@@YAXPAUS@1@@Z"( + // CHECK: call void @"\01??_VS@PR23990@@SAXPAXI@Z"(i8* {{.*}}, i32 42) +}; +void delete_s(S *s) { delete[] s; } +} + // CHECK: attributes [[NUW]] = { nounwind{{.*}} } -- cgit v1.2.3