diff options
author | DeLesley Hutchins <delesley@google.com> | 2012-07-02 22:16:54 +0000 |
---|---|---|
committer | DeLesley Hutchins <delesley@google.com> | 2012-07-02 22:16:54 +0000 |
commit | 6e6dbb76180bf9ee9d45fc5b69eadfa16a54dd6c (patch) | |
tree | 152266425cbb5f47363030191f736d819f023cbb /clang/lib/Analysis/ThreadSafety.cpp | |
parent | 2a15baf9683d29849cbc82c6f972d338927609b8 (diff) | |
download | bcm5719-llvm-6e6dbb76180bf9ee9d45fc5b69eadfa16a54dd6c.tar.gz bcm5719-llvm-6e6dbb76180bf9ee9d45fc5b69eadfa16a54dd6c.zip |
Thread safety analysis: fixed incorrect error message at the end of a locks_required function.
llvm-svn: 159607
Diffstat (limited to 'clang/lib/Analysis/ThreadSafety.cpp')
-rw-r--r-- | clang/lib/Analysis/ThreadSafety.cpp | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/clang/lib/Analysis/ThreadSafety.cpp b/clang/lib/Analysis/ThreadSafety.cpp index e29b2a9d069..b82bc55dffd 100644 --- a/clang/lib/Analysis/ThreadSafety.cpp +++ b/clang/lib/Analysis/ThreadSafety.cpp @@ -951,7 +951,13 @@ public: const CFGBlock *CurrBlock); Lockset intersectAndWarn(const Lockset &LSet1, const Lockset &LSet2, - SourceLocation JoinLoc, LockErrorKind LEK); + SourceLocation JoinLoc, + LockErrorKind LEK1, LockErrorKind LEK2); + + Lockset intersectAndWarn(const Lockset &LSet1, const Lockset &LSet2, + SourceLocation JoinLoc, LockErrorKind LEK1) { + return intersectAndWarn(LSet1, LSet2, JoinLoc, LEK1, LEK1); + } void runAnalysis(AnalysisDeclContext &AC); }; @@ -1541,11 +1547,13 @@ void BuildLockset::VisitDeclStmt(DeclStmt *S) { /// \param LSet1 The first lockset. /// \param LSet2 The second lockset. /// \param JoinLoc The location of the join point for error reporting -/// \param LEK The error message to report. +/// \param LEK1 The error message to report if a mutex is missing from LSet1 +/// \param LEK2 The error message to report if a mutex is missing from Lset2 Lockset ThreadSafetyAnalyzer::intersectAndWarn(const Lockset &LSet1, const Lockset &LSet2, SourceLocation JoinLoc, - LockErrorKind LEK) { + LockErrorKind LEK1, + LockErrorKind LEK2) { Lockset Intersection = LSet1; for (Lockset::iterator I = LSet2.begin(), E = LSet2.end(); I != E; ++I) { @@ -1564,7 +1572,7 @@ Lockset ThreadSafetyAnalyzer::intersectAndWarn(const Lockset &LSet1, if (!LSet2LockData.Managed) Handler.handleMutexHeldEndOfScope(LSet2Mutex.getName(), LSet2LockData.AcquireLoc, - JoinLoc, LEK); + JoinLoc, LEK1); } } @@ -1576,7 +1584,7 @@ Lockset ThreadSafetyAnalyzer::intersectAndWarn(const Lockset &LSet1, if (!MissingLock.Managed) Handler.handleMutexHeldEndOfScope(Mutex.getName(), MissingLock.AcquireLoc, - JoinLoc, LEK); + JoinLoc, LEK2); Intersection = LocksetFactory.remove(Intersection, Mutex); } } @@ -1818,7 +1826,8 @@ void ThreadSafetyAnalyzer::runAnalysis(AnalysisDeclContext &AC) { // FIXME: Should we call this function for all blocks which exit the function? intersectAndWarn(Initial->EntrySet, Final->ExitSet, Final->ExitLoc, - LEK_LockedAtEndOfFunction); + LEK_LockedAtEndOfFunction, + LEK_NotLockedAtEndOfFunction); } } // end anonymous namespace |