diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2012-10-16 23:45:15 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2012-10-16 23:45:15 +0000 |
commit | f86e50737b7164b0435b69cb391f1e84f2862d3d (patch) | |
tree | 08446f37a6624e50c8e94f1b400272da16b30f79 | |
parent | cb177f15e78870aff3c6aa6f6c1ec89cbc3ad2fb (diff) | |
download | bcm5719-llvm-f86e50737b7164b0435b69cb391f1e84f2862d3d.tar.gz bcm5719-llvm-f86e50737b7164b0435b69cb391f1e84f2862d3d.zip |
Fix pretty-printing for variables declared in a condition. Patch by Grzegorz Jablonski.
llvm-svn: 166073
-rw-r--r-- | clang/lib/AST/StmtPrinter.cpp | 21 | ||||
-rw-r--r-- | clang/test/CXX/ast-print.cpp | 11 |
2 files changed, 26 insertions, 6 deletions
diff --git a/clang/lib/AST/StmtPrinter.cpp b/clang/lib/AST/StmtPrinter.cpp index 93d10f7aafe..892442ea3bf 100644 --- a/clang/lib/AST/StmtPrinter.cpp +++ b/clang/lib/AST/StmtPrinter.cpp @@ -61,7 +61,7 @@ namespace { void PrintRawCompoundStmt(CompoundStmt *S); void PrintRawDecl(Decl *D); - void PrintRawDeclStmt(DeclStmt *S); + void PrintRawDeclStmt(const DeclStmt *S); void PrintRawIfStmt(IfStmt *If); void PrintRawCXXCatchStmt(CXXCatchStmt *Catch); void PrintCallArgs(CallExpr *E); @@ -121,8 +121,8 @@ void StmtPrinter::PrintRawDecl(Decl *D) { D->print(OS, Policy, IndentLevel); } -void StmtPrinter::PrintRawDeclStmt(DeclStmt *S) { - DeclStmt::decl_iterator Begin = S->decl_begin(), End = S->decl_end(); +void StmtPrinter::PrintRawDeclStmt(const DeclStmt *S) { + DeclStmt::const_decl_iterator Begin = S->decl_begin(), End = S->decl_end(); SmallVector<Decl*, 2> Decls; for ( ; Begin != End; ++Begin) Decls.push_back(*Begin); @@ -187,7 +187,10 @@ void StmtPrinter::VisitAttributedStmt(AttributedStmt *Node) { void StmtPrinter::PrintRawIfStmt(IfStmt *If) { OS << "if ("; - PrintExpr(If->getCond()); + if (const DeclStmt *DS = If->getConditionVariableDeclStmt()) + PrintRawDeclStmt(DS); + else + PrintExpr(If->getCond()); OS << ')'; if (CompoundStmt *CS = dyn_cast<CompoundStmt>(If->getThen())) { @@ -224,7 +227,10 @@ void StmtPrinter::VisitIfStmt(IfStmt *If) { void StmtPrinter::VisitSwitchStmt(SwitchStmt *Node) { Indent() << "switch ("; - PrintExpr(Node->getCond()); + if (const DeclStmt *DS = Node->getConditionVariableDeclStmt()) + PrintRawDeclStmt(DS); + else + PrintExpr(Node->getCond()); OS << ")"; // Pretty print compoundstmt bodies (very common). @@ -240,7 +246,10 @@ void StmtPrinter::VisitSwitchStmt(SwitchStmt *Node) { void StmtPrinter::VisitWhileStmt(WhileStmt *Node) { Indent() << "while ("; - PrintExpr(Node->getCond()); + if (const DeclStmt *DS = Node->getConditionVariableDeclStmt()) + PrintRawDeclStmt(DS); + else + PrintExpr(Node->getCond()); OS << ")\n"; PrintStmt(Node->getBody()); } diff --git a/clang/test/CXX/ast-print.cpp b/clang/test/CXX/ast-print.cpp index fb8588d4b13..44b34aa12cf 100644 --- a/clang/test/CXX/ast-print.cpp +++ b/clang/test/CXX/ast-print.cpp @@ -19,3 +19,14 @@ int main() (r->method()); } +// CHECK: if (int a = 1) +// CHECK: while (int a = 1) +// CHECK: switch (int a = 1) + +void f() +{ + if (int a = 1) { } + while (int a = 1) { } + switch (int a = 1) { } +} + |