[clang] df8d6d9 - [clang] Fix pretty-printing for variables declared in a for-loop condition

Fangrui Song via cfe-commits cfe-commits at lists.llvm.org
Sat Jun 24 19:27:15 PDT 2023


Author: Vaibhav Thakkar
Date: 2023-06-24T19:27:10-07:00
New Revision: df8d6d95ca64c70b3acc5a4266326966f3e6f93e

URL: https://github.com/llvm/llvm-project/commit/df8d6d95ca64c70b3acc5a4266326966f3e6f93e
DIFF: https://github.com/llvm/llvm-project/commit/df8d6d95ca64c70b3acc5a4266326966f3e6f93e.diff

LOG: [clang] Fix pretty-printing for variables declared in a for-loop condition

Reviewed By: MaskRay

Differential Revision: https://reviews.llvm.org/D153699

Added: 
    

Modified: 
    clang/lib/AST/StmtPrinter.cpp
    clang/test/PCH/for-loop-init-ternary-operator-statement.cpp
    clang/test/SemaCXX/ast-print.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/AST/StmtPrinter.cpp b/clang/lib/AST/StmtPrinter.cpp
index d62b7e52e8e6d..c3db500d8a8de 100644
--- a/clang/lib/AST/StmtPrinter.cpp
+++ b/clang/lib/AST/StmtPrinter.cpp
@@ -400,7 +400,9 @@ void StmtPrinter::VisitForStmt(ForStmt *Node) {
     PrintInitStmt(Node->getInit(), 5);
   else
     OS << (Node->getCond() ? "; " : ";");
-  if (Node->getCond())
+  if (const DeclStmt *DS = Node->getConditionVariableDeclStmt())
+    PrintRawDeclStmt(DS);
+  else if (Node->getCond())
     PrintExpr(Node->getCond());
   OS << ";";
   if (Node->getInc()) {

diff  --git a/clang/test/PCH/for-loop-init-ternary-operator-statement.cpp b/clang/test/PCH/for-loop-init-ternary-operator-statement.cpp
index 50819e79e6f6f..8bce3e8eeb3c4 100644
--- a/clang/test/PCH/for-loop-init-ternary-operator-statement.cpp
+++ b/clang/test/PCH/for-loop-init-ternary-operator-statement.cpp
@@ -2,7 +2,7 @@
 // RUN: %clang_cc1 -x ast -ast-print %t | FileCheck %s
 
 int f() {
-  // CHECK: for (int i = 0; x; i++) {
+  // CHECK: for (int i = 0; int x = i < 2 ? 1 : 0; i++) {
   for (int i = 0; int x = i < 2 ? 1 : 0; i++) {
     return x;
   }

diff  --git a/clang/test/SemaCXX/ast-print.cpp b/clang/test/SemaCXX/ast-print.cpp
index fd1d3fe84fac3..2cb1ec440b6bb 100644
--- a/clang/test/SemaCXX/ast-print.cpp
+++ b/clang/test/SemaCXX/ast-print.cpp
@@ -21,12 +21,14 @@ void test1() {
 // CHECK: if (int a = 1)
 // CHECK:  while (int a = 1)
 // CHECK:  switch (int a = 1)
+// CHECK:  for (; int a = 1;)
 
 void test2()
 {
     if (int a = 1) { }
     while (int a = 1) { }
     switch (int a = 1) { }
+    for(; int a = 1; ) { }
 }
 
 // CHECK: new (1) int;


        


More information about the cfe-commits mailing list