From a2587ef26d802ccc00b7853ffdab7b8070a67ad8 Mon Sep 17 00:00:00 2001 From: DeLesley Hutchins Date: Fri, 2 Mar 2012 22:02:58 +0000 Subject: Thread safety analysis: handle CFG blocks which call functions marked as noreturn. llvm-svn: 151944 --- clang/lib/Analysis/ThreadSafety.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'clang/lib/Analysis/ThreadSafety.cpp') diff --git a/clang/lib/Analysis/ThreadSafety.cpp b/clang/lib/Analysis/ThreadSafety.cpp index 1370d5dbacd..40ad79b25c8 100644 --- a/clang/lib/Analysis/ThreadSafety.cpp +++ b/clang/lib/Analysis/ThreadSafety.cpp @@ -1526,6 +1526,10 @@ void ThreadSafetyAnalyzer::runAnalysis(AnalysisDeclContext &AC) { if (*PI == 0 || !VisitedBlocks.alreadySet(*PI)) continue; + // Ignore edges from blocks that can't return. + if ((*PI)->hasNoReturnElement()) + continue; + // If the previous block ended in a 'continue' or 'break' statement, then // a difference in locksets is probably due to a bug in that block, rather // than in some other predecessor. In that case, keep the other -- cgit v1.2.3