rsmith accepted this revision.
This revision is now accepted and ready to land.
================
Comment at: include/clang/Basic/DiagnosticParseKinds.td:769
@@ +768,3 @@
+ "attribute specifier|'constexpr'}0">;
+def err_lambda_declspecifier_repeated : Error<
+ "%select{'mutable'|'constexpr'}0 cannot appear multiple times in a lambda
declarator">;
----------------
declspecifier -> decl_specifier
================
Comment at: lib/AST/ExprConstant.cpp:2049-2063
@@ -2047,3 +2048,17 @@
Result = Frame->getTemporary(VD);
+ if (!Result && isLambdaCallOperator(Frame->Callee) &&
+ (VD->getDeclContext() != Frame->Callee || VD->isInitCapture())) {
+ // Assume variables referenced within a lambda's call operator that were
+ // not declared within the call operator are captures and during checking
+ // of a potential constant expression, assume they are unknown constant
+ // expressions.
+ if (Info.checkingPotentialConstantExpression())
+ return false;
+ // FIXME: implement capture evaluation during constant expr evaluation.
+ Info.Diag(E->getLocStart(),
+ diag::note_unimplemented_constexpr_lambda_feature_ast)
+ << "captures not currently allowed";
+ return false;
+ }
assert(Result && "missing value for local variable");
return true;
----------------
I'd prefer to phrase this if/assert arrangement as:
if (!Result) {
assert(isLambdaCallOperator(...) && (VD->getDeclContext != ...
================
Comment at: lib/Parse/ParseExprCXX.cpp:1077
@@ +1076,3 @@
+ default:
+ return ;
+ }
----------------
No space before `;`.
http://reviews.llvm.org/D14905
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits