[cfe-commits] r164332 - in /cfe/trunk: lib/Analysis/ThreadSafety.cpp test/SemaCXX/warn-thread-safety-analysis.cpp
DeLesley Hutchins
delesley at google.com
Thu Sep 20 16:14:43 PDT 2012
Author: delesley
Date: Thu Sep 20 18:14:43 2012
New Revision: 164332
URL: http://llvm.org/viewvc/llvm-project?rev=164332&view=rev
Log:
Thread-safety analysis: fix bug where shared trylock was treated
as exclusive.
Modified:
cfe/trunk/lib/Analysis/ThreadSafety.cpp
cfe/trunk/test/SemaCXX/warn-thread-safety-analysis.cpp
Modified: cfe/trunk/lib/Analysis/ThreadSafety.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/ThreadSafety.cpp?rev=164332&r1=164331&r2=164332&view=diff
==============================================================================
--- cfe/trunk/lib/Analysis/ThreadSafety.cpp (original)
+++ cfe/trunk/lib/Analysis/ThreadSafety.cpp Thu Sep 20 18:14:43 2012
@@ -1681,7 +1681,7 @@
case attr::SharedTrylockFunction: {
SharedTrylockFunctionAttr *A =
cast<SharedTrylockFunctionAttr>(Attr);
- getMutexIDs(ExclusiveLocksToAdd, A, Exp, FunDecl,
+ getMutexIDs(SharedLocksToAdd, A, Exp, FunDecl,
PredBlock, CurrBlock, A->getSuccessValue(), Negate);
break;
}
Modified: cfe/trunk/test/SemaCXX/warn-thread-safety-analysis.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-thread-safety-analysis.cpp?rev=164332&r1=164331&r2=164332&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/warn-thread-safety-analysis.cpp (original)
+++ cfe/trunk/test/SemaCXX/warn-thread-safety-analysis.cpp Thu Sep 20 18:14:43 2012
@@ -1655,6 +1655,8 @@
}; // end namespace FunctionAttrTest
+namespace TryLockTest {
+
struct TestTryLock {
Mutex mu;
int a GUARDED_BY(mu);
@@ -1751,8 +1753,36 @@
b = !b;
}
}
+
+ // Test merge of exclusive trylock
+ void foo11() {
+ if (cond) {
+ if (!mu.TryLock())
+ return;
+ }
+ else {
+ mu.Lock();
+ }
+ a = 10;
+ mu.Unlock();
+ }
+
+ // Test merge of shared trylock
+ void foo12() {
+ if (cond) {
+ if (!mu.ReaderTryLock())
+ return;
+ }
+ else {
+ mu.ReaderLock();
+ }
+ int i = a;
+ mu.Unlock();
+ }
}; // end TestTrylock
+} // end namespace TrylockTest
+
namespace TestTemplateAttributeInstantiation {
More information about the cfe-commits
mailing list