Author: delesley Date: Tue Sep 29 10:25:51 2015 New Revision: 248803 URL: http://llvm.org/viewvc/llvm-project?rev=248803&view=rev Log: Thread Safety Analysis: fix before/after checks so that they work on global variables as well member variables.
Modified: cfe/trunk/include/clang/Analysis/Analyses/ThreadSafetyCommon.h cfe/trunk/lib/Analysis/ThreadSafetyCommon.cpp cfe/trunk/test/Sema/warn-thread-safety-analysis.c cfe/trunk/test/SemaCXX/warn-thread-safety-analysis.cpp Modified: cfe/trunk/include/clang/Analysis/Analyses/ThreadSafetyCommon.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/Analyses/ThreadSafetyCommon.h?rev=248803&r1=248802&r2=248803&view=diff ============================================================================== --- cfe/trunk/include/clang/Analysis/Analyses/ThreadSafetyCommon.h (original) +++ cfe/trunk/include/clang/Analysis/Analyses/ThreadSafetyCommon.h Tue Sep 29 10:25:51 2015 @@ -291,6 +291,8 @@ public: return nullptr; if (auto *P = dyn_cast<til::Project>(CapExpr)) return P->clangDecl(); + if (auto *P = dyn_cast<til::LiteralPtr>(CapExpr)) + return P->clangDecl(); return nullptr; } Modified: cfe/trunk/lib/Analysis/ThreadSafetyCommon.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/ThreadSafetyCommon.cpp?rev=248803&r1=248802&r2=248803&view=diff ============================================================================== --- cfe/trunk/lib/Analysis/ThreadSafetyCommon.cpp (original) +++ cfe/trunk/lib/Analysis/ThreadSafetyCommon.cpp Tue Sep 29 10:25:51 2015 @@ -290,7 +290,7 @@ til::SExpr *SExprBuilder::translateDeclR VD = FD->getParamDecl(I); } - // For non-local variables, treat it as a referenced to a named object. + // For non-local variables, treat it as a reference to a named object. return new (Arena) til::LiteralPtr(VD); } Modified: cfe/trunk/test/Sema/warn-thread-safety-analysis.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/warn-thread-safety-analysis.c?rev=248803&r1=248802&r2=248803&view=diff ============================================================================== --- cfe/trunk/test/Sema/warn-thread-safety-analysis.c (original) +++ cfe/trunk/test/Sema/warn-thread-safety-analysis.c Tue Sep 29 10:25:51 2015 @@ -81,7 +81,8 @@ int main() { mutex_shared_lock(&mu2); Foo_fun1(1); - mutex_shared_lock(&mu1); // expected-warning{{acquiring mutex 'mu1' that is already held}} + mutex_shared_lock(&mu1); // expected-warning{{acquiring mutex 'mu1' that is already held}} \ + expected-warning{{mutex 'mu1' must be acquired before 'mu2'}} mutex_unlock(&mu1); mutex_unlock(&mu2); mutex_shared_lock(&mu1); 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=248803&r1=248802&r2=248803&view=diff ============================================================================== --- cfe/trunk/test/SemaCXX/warn-thread-safety-analysis.cpp (original) +++ cfe/trunk/test/SemaCXX/warn-thread-safety-analysis.cpp Tue Sep 29 10:25:51 2015 @@ -5145,4 +5145,17 @@ void test() { } // end namespace TestReferenceNoThreadSafetyAnalysis +namespace GlobalAcquiredBeforeAfterTest { + +Mutex mu1; +Mutex mu2 ACQUIRED_AFTER(mu1); + +void test3() { + mu2.Lock(); + mu1.Lock(); // expected-warning {{mutex 'mu1' must be acquired before 'mu2'}} + mu1.Unlock(); + mu2.Unlock(); +} + +} // end namespace GlobalAcquiredBeforeAfterTest _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits