From fcf8eba0c78634243383f92a77381e919e7e27ef Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Fri, 21 Sep 2012 18:33:56 +0000 Subject: [PATCH] Experiment in BodyFarm of structuring AST creation calls in a hierarchy, so that they visually look like an AST dump. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@164401 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Analysis/BodyFarm.cpp | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/lib/Analysis/BodyFarm.cpp b/lib/Analysis/BodyFarm.cpp index 54c8ab4430..be998581d7 100644 --- a/lib/Analysis/BodyFarm.cpp +++ b/lib/Analysis/BodyFarm.cpp @@ -151,12 +151,15 @@ static Stmt *create_dispatch_once(ASTContext &C, const FunctionDecl *D) { IntegerLiteral *IL = IntegerLiteral::Create(C, llvm::APInt(C.getTypeSize(C.IntTy), (uint64_t) 1), C.IntTy, SourceLocation()); - ICE = M.makeIntegralCast(IL, PredicateTy); - DR = M.makeDeclRefExpr(Predicate); - ImplicitCastExpr *LValToRval = M.makeLvalueToRvalue(DR, PredicateQPtrTy); - UnaryOperator *UO = M.makeDereference(LValToRval, PredicateTy); - BinaryOperator * B = M.makeAssignment(UO, ICE, PredicateTy); - + BinaryOperator *B = + M.makeAssignment( + M.makeDereference( + M.makeLvalueToRvalue( + M.makeDeclRefExpr(Predicate), PredicateQPtrTy), + PredicateTy), + M.makeIntegralCast(IL, PredicateTy), + PredicateTy); + // (3) Create the compound statement. Stmt *Stmts[2]; Stmts[0] = B; @@ -165,12 +168,18 @@ static Stmt *create_dispatch_once(ASTContext &C, const FunctionDecl *D) { SourceLocation()); // (4) Create the 'if' condition. - DR = M.makeDeclRefExpr(Predicate); - LValToRval = M.makeLvalueToRvalue(DR, PredicateQPtrTy); - UO = M.makeDereference(LValToRval, PredicateTy); - LValToRval = M.makeLvalueToRvalue(UO, PredicateTy); - UO = new (C) UnaryOperator(LValToRval, UO_LNot, C.IntTy, - VK_RValue, OK_Ordinary, SourceLocation()); + ImplicitCastExpr *LValToRval = + M.makeLvalueToRvalue( + M.makeDereference( + M.makeLvalueToRvalue( + M.makeDeclRefExpr(Predicate), + PredicateQPtrTy), + PredicateTy), + PredicateTy); + + UnaryOperator *UO = new (C) UnaryOperator(LValToRval, UO_LNot, C.IntTy, + VK_RValue, OK_Ordinary, + SourceLocation()); // (5) Create the 'if' statement. IfStmt *If = new (C) IfStmt(C, SourceLocation(), 0, UO, CS); -- 2.40.0