diff options
author | Younan Zhang <zyn7109@gmail.com> | 2025-03-11 15:41:56 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-11 15:41:56 +0800 |
commit | f4218753ad93dd44b019e38bae61dceb93514aee (patch) | |
tree | d788b45565304a61352db297810417780096af63 /clang/lib/CodeGen/CodeGenFunction.cpp | |
parent | f120b0d6d2629e226e6fa75974fbd17f46206bca (diff) | |
download | llvm-f4218753ad93dd44b019e38bae61dceb93514aee.zip llvm-f4218753ad93dd44b019e38bae61dceb93514aee.tar.gz llvm-f4218753ad93dd44b019e38bae61dceb93514aee.tar.bz2 |
[Clang] Implement P0963R3 "Structured binding declaration as a condition" (#130228)
This implements the R2 semantics of P0963.
The R1 semantics, as outlined in the paper, were introduced in Clang 6.
In addition to that, the paper proposes swapping the evaluation order of
condition expressions and the initialization of binding declarations
(i.e. std::tuple-like decompositions).
Diffstat (limited to 'clang/lib/CodeGen/CodeGenFunction.cpp')
-rw-r--r-- | clang/lib/CodeGen/CodeGenFunction.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CodeGenFunction.cpp b/clang/lib/CodeGen/CodeGenFunction.cpp index 63f0bf5..447192b 100644 --- a/clang/lib/CodeGen/CodeGenFunction.cpp +++ b/clang/lib/CodeGen/CodeGenFunction.cpp @@ -1846,7 +1846,8 @@ void CodeGenFunction::EmitBranchToCounterBlock( /// LHS and RHS nodes. void CodeGenFunction::EmitBranchOnBoolExpr( const Expr *Cond, llvm::BasicBlock *TrueBlock, llvm::BasicBlock *FalseBlock, - uint64_t TrueCount, Stmt::Likelihood LH, const Expr *ConditionalOp) { + uint64_t TrueCount, Stmt::Likelihood LH, const Expr *ConditionalOp, + const VarDecl *ConditionalDecl) { Cond = Cond->IgnoreParens(); if (const BinaryOperator *CondBOp = dyn_cast<BinaryOperator>(Cond)) { @@ -2047,6 +2048,8 @@ void CodeGenFunction::EmitBranchOnBoolExpr( CondV = EvaluateExprAsBool(Cond); } + MaybeEmitDeferredVarDeclInit(ConditionalDecl); + // If not at the top of the logical operator nest, update MCDC temp with the // boolean result of the evaluated condition. if (!MCDCLogOpStack.empty()) { |