summaryrefslogtreecommitdiffstats
path: root/clang/lib/Analysis/ThreadSafety.cpp
diff options
context:
space:
mode:
authorDeLesley Hutchins <delesley@google.com>2012-07-02 22:16:54 +0000
committerDeLesley Hutchins <delesley@google.com>2012-07-02 22:16:54 +0000
commit6e6dbb76180bf9ee9d45fc5b69eadfa16a54dd6c (patch)
tree152266425cbb5f47363030191f736d819f023cbb /clang/lib/Analysis/ThreadSafety.cpp
parent2a15baf9683d29849cbc82c6f972d338927609b8 (diff)
downloadbcm5719-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.cpp21
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
OpenPOWER on IntegriCloud