From: Ted Kremenek Date: Tue, 5 May 2009 23:11:51 +0000 (+0000) Subject: source-level CFG: have the body for the @synchronized start with its own basic X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=da5348eda7bb45d715561249dec9833d51dfda67;p=clang source-level CFG: have the body for the @synchronized start with its own basic block. This makes it a little easier for diagnostics generation. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71037 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/AST/CFG.cpp b/lib/AST/CFG.cpp index f5b604554d..af2a8910d8 100644 --- a/lib/AST/CFG.cpp +++ b/lib/AST/CFG.cpp @@ -937,7 +937,18 @@ CFGBlock* CFGBuilder::VisitObjCAtSynchronizedStmt(ObjCAtSynchronizedStmt* S) { // FIXME: Add locking 'primitives' to CFG for @synchronized. // Inline the body. - Visit(S->getSynchBody()); + CFGBlock *SyncBlock = Visit(S->getSynchBody()); + + // The sync body starts its own basic block. This makes it a little easier + // for diagnostic clients. + if (SyncBlock) { + if (!FinishBlock(SyncBlock)) + return 0; + + Block = 0; + } + + Succ = SyncBlock; // Inline the sync expression. return Visit(S->getSynchExpr());