Emit a proper diagnostic when attempting to forward inalloca arguments

The previous assertion was relatively easy to trigger, and likely will
be easy to trigger going forward. EmitDelegateCallArg is relatively
popular.

This cleanly diagnoses PR28299 while I work on a proper solution.

llvm-svn: 348991
This commit is contained in:
Reid Kleckner 2018-12-12 23:46:06 +00:00
parent e01c646dda
commit 25b56024aa
2 changed files with 14 additions and 2 deletions

View File

@ -3076,8 +3076,9 @@ void CodeGenFunction::EmitDelegateCallArg(CallArgList &args,
QualType type = param->getType();
assert(!isInAllocaArgument(CGM.getCXXABI(), type) &&
"cannot emit delegate call arguments for inalloca arguments!");
if (isInAllocaArgument(CGM.getCXXABI(), type)) {
CGM.ErrorUnsupported(param, "forwarded non-trivially copyable parameter");
}
// GetAddrOfLocalVar returns a pointer-to-pointer for references,
// but the argument needs to be the original pointer.

View File

@ -0,0 +1,11 @@
// RUN: not %clang_cc1 -triple i686-windows-msvc -emit-llvm -o /dev/null %s 2>&1 | FileCheck %s
// PR28299
// CHECK: error: cannot compile this forwarded non-trivially copyable parameter yet
class A {
A(const A &);
};
typedef void (*fptr_t)(A);
fptr_t fn1() { return [](A) {}; }