https://github.com/tbaederr updated 
https://github.com/llvm/llvm-project/pull/186816

>From 84caf12129d920e7dc4eb8c9083fecd29ac2ec01 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timm=20B=C3=A4der?= <[email protected]>
Date: Mon, 16 Mar 2026 15:50:55 +0100
Subject: [PATCH] asdf

---
 clang/lib/AST/ByteCode/Compiler.cpp | 26 +++++++++++++++-----------
 clang/test/AST/ByteCode/loops.cpp   | 16 +++++++++++++---
 2 files changed, 28 insertions(+), 14 deletions(-)

diff --git a/clang/lib/AST/ByteCode/Compiler.cpp 
b/clang/lib/AST/ByteCode/Compiler.cpp
index 8bbdf284b313d..fc2da6362d0bb 100644
--- a/clang/lib/AST/ByteCode/Compiler.cpp
+++ b/clang/lib/AST/ByteCode/Compiler.cpp
@@ -6115,11 +6115,13 @@ bool Compiler<Emitter>::visitWhileStmt(const WhileStmt 
*S) {
   this->fallthrough(CondLabel);
   this->emitLabel(CondLabel);
 
-  {
-    LocalScope<Emitter> CondScope(this);
-    if (const DeclStmt *CondDecl = S->getConditionVariableDeclStmt())
-      if (!visitDeclStmt(CondDecl))
-        return false;
+  // Start of the loop body {
+  LocalScope<Emitter> CondScope(this);
+
+  if (const DeclStmt *CondDecl = S->getConditionVariableDeclStmt()) {
+    if (!visitDeclStmt(CondDecl))
+      return false;
+  }
 
     if (!this->visitBool(Cond))
       return false;
@@ -6135,12 +6137,14 @@ bool Compiler<Emitter>::visitWhileStmt(const WhileStmt 
*S) {
 
     if (!CondScope.destroyLocals())
       return false;
-  }
-  if (!this->jump(CondLabel))
-    return false;
-  this->fallthrough(EndLabel);
-  this->emitLabel(EndLabel);
-  return WholeLoopScope.destroyLocals();
+    // } End of loop body.
+
+    if (!this->jump(CondLabel))
+      return false;
+    this->fallthrough(EndLabel);
+    this->emitLabel(EndLabel);
+
+    return CondScope.destroyLocals() && WholeLoopScope.destroyLocals();
 }
 
 template <class Emitter> bool Compiler<Emitter>::visitDoStmt(const DoStmt *S) {
diff --git a/clang/test/AST/ByteCode/loops.cpp 
b/clang/test/AST/ByteCode/loops.cpp
index 38ab5613e1cbd..ff80ef5c6e2ed 100644
--- a/clang/test/AST/ByteCode/loops.cpp
+++ b/clang/test/AST/ByteCode/loops.cpp
@@ -1,7 +1,7 @@
-// RUN: %clang_cc1 -fexperimental-new-constant-interpreter -std=c++14 -verify 
%s
-// RUN: %clang_cc1 -std=c++14 -verify=ref %s
+// RUN: %clang_cc1 -fexperimental-new-constant-interpreter -std=c++14 -verify  
              %s
+// RUN: %clang_cc1                                         -std=c++14 
-verify=ref            %s
 // RUN: %clang_cc1 -fexperimental-new-constant-interpreter -std=c++20 
-verify=expected-cpp20 %s
-// RUN: %clang_cc1 -std=c++20 -verify=ref %s
+// RUN: %clang_cc1                                         -std=c++20 
-verify=ref            %s
 
 namespace WhileLoop {
   constexpr int f() {
@@ -351,4 +351,14 @@ namespace Scopes {
     return n;
   }
   static_assert(foo() == 14, "");
+
+  constexpr bool WhileConditionDecl() {
+    bool b = true;
+    for (int i = 0; i < 3; ++i) {
+      while (int x = 0) {
+      }
+    }
+    return true;
+  }
+  static_assert(WhileConditionDecl(), "");
 }

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to