mirror of
https://github.com/llvm/llvm-project.git
synced 2025-05-03 14:56:07 +00:00

We accept 'void *p; p->~void();' for MSVC compatibility since r148682. However, we were returning ExprError, rather than producing an AST, despite only diagnosing it with a warning. CodeGen noticed that the template function specialization had an invalid AST, and therefore didn't generate code for it. This change makes us produce an AST with a void pseudo-dtor call. Part of PR18256. llvm-svn: 207771
22 lines
520 B
C++
22 lines
520 B
C++
// RUN: %clang_cc1 %s -triple i686-pc-win32 -std=c++11 -fms-compatibility -emit-llvm -o - | FileCheck %s
|
|
|
|
template<class T>
|
|
void destroy(T *p) {
|
|
p->~T();
|
|
}
|
|
|
|
extern "C" void f() {
|
|
int a;
|
|
destroy((void*)&a);
|
|
}
|
|
|
|
// CHECK-LABEL: define void @f()
|
|
// CHECK: call void @"\01??$destroy@X@@YAXPAX@Z"
|
|
// CHECK: ret void
|
|
|
|
// CHECK-LABEL: define linkonce_odr void @"\01??$destroy@X@@YAXPAX@Z"(i8* %p)
|
|
// The pseudo-dtor expr should not generate calls to anything.
|
|
// CHECK-NOT: call
|
|
// CHECK-NOT: invoke
|
|
// CHECK: ret void
|