Attached is a patch which skips analysis inside of lock functions (avoiding spurious warnings).
Cheers, Caitlin
From c0aba1cbc2f62113c430abf49c79a99d089c88ac Mon Sep 17 00:00:00 2001 From: Caitlin Sadowski <[email protected]> Date: Mon, 12 Sep 2011 16:05:34 -0700 Subject: [PATCH] Thread safety: skip analysis inside of lock functions --- lib/Analysis/ThreadSafety.cpp | 9 +++++++-- test/SemaCXX/warn-thread-safety-analysis.cpp | 8 ++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/Analysis/ThreadSafety.cpp b/lib/Analysis/ThreadSafety.cpp index e4c144d..9954b4f 100644 --- a/lib/Analysis/ThreadSafety.cpp +++ b/lib/Analysis/ThreadSafety.cpp @@ -709,8 +709,13 @@ void runThreadSafetyAnalysis(AnalysisContext &AC, ThreadSafetyHandler &Handler) { CFG *CFGraph = AC.getCFG(); if (!CFGraph) return; - const Decl *D = AC.getDecl(); - if (D && D->getAttr<NoThreadSafetyAnalysisAttr>()) return; + if (const Decl *D = AC.getDecl()) { + if (D->getAttr<NoThreadSafetyAnalysisAttr>() || + D->getAttr<ExclusiveLockFunctionAttr>() || + D->getAttr<SharedLockFunctionAttr>() || + D->getAttr<UnlockFunctionAttr>()) + return; + } Lockset::Factory LocksetFactory; diff --git a/test/SemaCXX/warn-thread-safety-analysis.cpp b/test/SemaCXX/warn-thread-safety-analysis.cpp index fc9d145..5788a43 100644 --- a/test/SemaCXX/warn-thread-safety-analysis.cpp +++ b/test/SemaCXX/warn-thread-safety-analysis.cpp @@ -231,6 +231,14 @@ public: void globalUnlock() __attribute__((unlock_function(aa_mu))); }; +void GlobalLocker::globalLock() { + aa_mu.Lock(); // no error +} + +void GlobalLocker::globalUnlock() { + aa_mu.Unlock(); // no error +} + GlobalLocker glock; void aa_fun_1() { -- 1.7.3.1
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
