diff options
author | DeLesley Hutchins <delesley@google.com> | 2012-07-02 22:12:12 +0000 |
---|---|---|
committer | DeLesley Hutchins <delesley@google.com> | 2012-07-02 22:12:12 +0000 |
commit | 2a15baf9683d29849cbc82c6f972d338927609b8 (patch) | |
tree | b83e52d7b4383728d6a26094b6e4d3649a31dc2f /clang/lib/Analysis/ThreadSafety.cpp | |
parent | a6b4db812c0fcf18be414dc97338573ab58d8954 (diff) | |
download | bcm5719-llvm-2a15baf9683d29849cbc82c6f972d338927609b8.tar.gz bcm5719-llvm-2a15baf9683d29849cbc82c6f972d338927609b8.zip |
Thread safety analysis: don't warn in case of duplicate annotation.
llvm-svn: 159606
Diffstat (limited to 'clang/lib/Analysis/ThreadSafety.cpp')
-rw-r--r-- | clang/lib/Analysis/ThreadSafety.cpp | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/clang/lib/Analysis/ThreadSafety.cpp b/clang/lib/Analysis/ThreadSafety.cpp index 7406f324ae5..e29b2a9d069 100644 --- a/clang/lib/Analysis/ThreadSafety.cpp +++ b/clang/lib/Analysis/ThreadSafety.cpp @@ -924,9 +924,9 @@ public: ThreadSafetyAnalyzer(ThreadSafetyHandler &H) : Handler(H) {} Lockset addLock(const Lockset &LSet, const MutexID &Mutex, - const LockData &LDat); + const LockData &LDat, bool Warn=true); Lockset addLock(const Lockset &LSet, Expr *MutexExp, const NamedDecl *D, - const LockData &LDat); + const LockData &LDat, bool Warn=true); Lockset removeLock(const Lockset &LSet, const MutexID &Mutex, SourceLocation UnlockLoc, bool Warn=true, bool FullyRemove=false); @@ -962,11 +962,13 @@ public: /// \param LDat -- the LockData for the lock Lockset ThreadSafetyAnalyzer::addLock(const Lockset &LSet, const MutexID &Mutex, - const LockData &LDat) { + const LockData &LDat, + bool Warn) { // FIXME: deal with acquired before/after annotations. // FIXME: Don't always warn when we have support for reentrant locks. if (LSet.lookup(Mutex)) { - Handler.handleDoubleLock(Mutex.getName(), LDat.AcquireLoc); + if (Warn) + Handler.handleDoubleLock(Mutex.getName(), LDat.AcquireLoc); return LSet; } else { return LocksetFactory.add(LSet, Mutex, LDat); @@ -976,13 +978,14 @@ Lockset ThreadSafetyAnalyzer::addLock(const Lockset &LSet, /// \brief Construct a new mutex and add it to the lockset. Lockset ThreadSafetyAnalyzer::addLock(const Lockset &LSet, Expr *MutexExp, const NamedDecl *D, - const LockData &LDat) { + const LockData &LDat, + bool Warn) { MutexID Mutex(MutexExp, 0, D); if (!Mutex.isValid()) { MutexID::warnInvalidLock(Handler, MutexExp, 0, D); return LSet; } - return addLock(LSet, Mutex, LDat); + return addLock(LSet, Mutex, LDat, Warn); } @@ -1637,14 +1640,14 @@ void ThreadSafetyAnalyzer::runAnalysis(AnalysisDeclContext &AC) { SLRIter = SLRAttr->args_begin(), SLREnd = SLRAttr->args_end(); SLRIter != SLREnd; ++SLRIter) InitialLockset = addLock(InitialLockset, *SLRIter, D, - LockData(AttrLoc, LK_Shared)); + LockData(AttrLoc, LK_Shared), false); } else if (ExclusiveLocksRequiredAttr *ELRAttr = dyn_cast<ExclusiveLocksRequiredAttr>(Attr)) { for (ExclusiveLocksRequiredAttr::args_iterator ELRIter = ELRAttr->args_begin(), ELREnd = ELRAttr->args_end(); ELRIter != ELREnd; ++ELRIter) InitialLockset = addLock(InitialLockset, *ELRIter, D, - LockData(AttrLoc, LK_Exclusive)); + LockData(AttrLoc, LK_Exclusive), false); } else if (isa<UnlockFunctionAttr>(Attr)) { // Don't try to check unlock functions for now return; |