Author: rnk Date: Wed Dec 12 15:46:06 2018 New Revision: 348991 URL: http://llvm.org/viewvc/llvm-project?rev=348991&view=rev Log: 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. Added: cfe/trunk/test/CodeGenCXX/inalloca-lambda.cpp Modified: cfe/trunk/lib/CodeGen/CGCall.cpp Modified: cfe/trunk/lib/CodeGen/CGCall.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGCall.cpp?rev=348991&r1=348990&r2=348991&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CGCall.cpp (original) +++ cfe/trunk/lib/CodeGen/CGCall.cpp Wed Dec 12 15:46:06 2018 @@ -3076,8 +3076,9 @@ void CodeGenFunction::EmitDelegateCallAr 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. Added: cfe/trunk/test/CodeGenCXX/inalloca-lambda.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/inalloca-lambda.cpp?rev=348991&view=auto ============================================================================== --- cfe/trunk/test/CodeGenCXX/inalloca-lambda.cpp (added) +++ cfe/trunk/test/CodeGenCXX/inalloca-lambda.cpp Wed Dec 12 15:46:06 2018 @@ -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) {}; } + _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits