]> granicus.if.org Git - clang/commitdiff
Thread safety: reverting to use separate warning for requirement to hold any lock
authorCaitlin Sadowski <supertri@google.com>
Wed, 14 Sep 2011 20:09:09 +0000 (20:09 +0000)
committerCaitlin Sadowski <supertri@google.com>
Wed, 14 Sep 2011 20:09:09 +0000 (20:09 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139723 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticSemaKinds.td
lib/Sema/AnalysisBasedWarnings.cpp
test/SemaCXX/warn-thread-safety-analysis.cpp

index f15d0482ba8d7b0a019dfc6f393ca64296113b07..332aa69432cdadaccff4d42181093350d8939429 100644 (file)
@@ -1421,6 +1421,14 @@ def warn_var_deref_requires_lock : Warning<
   "%select{reading|writing}2 the value pointed to by '%0' requires lock on '%1'"
   " to be %select{held|held exclusively}2">,
   InGroup<ThreadSafety>, DefaultIgnore;
+def warn_variable_requires_any_lock : Warning<
+  "%select{reading|writing}1 variable '%0' requires lock on any mutex to be "
+  "%select{held|held exclusively}1">,
+  InGroup<ThreadSafety>, DefaultIgnore;
+def warn_var_deref_requires_any_lock : Warning<
+  "%select{reading|writing}1 the value pointed to by '%0' requires lock on any"
+  " mutex to be %select{held|held exclusively}1">,
+  InGroup<ThreadSafety>, DefaultIgnore;
 def warn_fun_requires_lock : Warning<
   "calling function '%0' requires %select{shared|exclusive}2 lock on '%1'">,
   InGroup<ThreadSafety>, DefaultIgnore;
index 8ea8a67bc7394b26ad40b9a2f350b550a3d2a5c5..bbd8fa38fe79a1d32b7e4fab6445338733524ae9 100644 (file)
@@ -660,9 +660,14 @@ class ThreadSafetyReporter : public clang::thread_safety::ThreadSafetyHandler {
 
   void handleNoMutexHeld(const NamedDecl *D, ProtectedOperationKind POK,
                          AccessKind AK, SourceLocation Loc) {
-    // FIXME: It would be nice if this case printed without single quotes around
-    // the phrase 'any mutex'
-    handleMutexNotHeld(D, POK, "any mutex", getLockKindFromAccessKind(AK), Loc);
+    assert((POK == POK_VarAccess || POK == POK_VarDereference)
+             && "Only works for variables");
+    unsigned DiagID = POK == POK_VarAccess?
+                        diag::warn_variable_requires_any_lock:
+                        diag::warn_var_deref_requires_any_lock;
+    PartialDiagnostic Warning = S.PDiag(DiagID)
+      << D->getName() << getLockKindFromAccessKind(AK);
+    Warnings.push_back(DelayedDiag(Loc, Warning));
   }
 
   void handleMutexNotHeld(const NamedDecl *D, ProtectedOperationKind POK,
@@ -680,7 +685,7 @@ class ThreadSafetyReporter : public clang::thread_safety::ThreadSafetyHandler {
         break;
     }
     PartialDiagnostic Warning = S.PDiag(DiagID)
-      << D->getName().str() << LockName << LK;
+      << D->getName() << LockName << LK;
     Warnings.push_back(DelayedDiag(Loc, Warning));
   }
 
index f9ba5ec0916264ef4a2fcac6671fa6fb8d8911cd..899076bb0e668e01da721773c867f079f3b3e1af 100644 (file)
@@ -351,12 +351,12 @@ void gb_fun_3() {
 
 void gb_bad_0() {
   sls_guard_var = 1; // \
-    // expected-warning{{writing variable 'sls_guard_var' requires lock on 'any mutex' to be held exclusively}}
+    // expected-warning{{writing variable 'sls_guard_var' requires lock on any mutex to be held exclusively}}
 }
 
 void gb_bad_1() {
   int x = sls_guard_var; // \
-    // expected-warning{{reading variable 'sls_guard_var' requires lock on 'any mutex' to be held}}
+    // expected-warning{{reading variable 'sls_guard_var' requires lock on any mutex to be held}}
 }
 
 void gb_bad_2() {
@@ -371,12 +371,12 @@ void gb_bad_3() {
 
 void gb_bad_4() {
   *pgb_gvar = 1; // \
-    // expected-warning {{writing the value pointed to by 'pgb_gvar' requires lock on 'any mutex' to be held exclusively}}
+    // expected-warning {{writing the value pointed to by 'pgb_gvar' requires lock on any mutex to be held exclusively}}
 }
 
 void gb_bad_5() {
   int x = *pgb_gvar; // \
-    // expected-warning {{reading the value pointed to by 'pgb_gvar' requires lock on 'any mutex' to be held}}
+    // expected-warning {{reading the value pointed to by 'pgb_gvar' requires lock on any mutex to be held}}
 }
 
 void gb_bad_6() {
@@ -397,13 +397,13 @@ void gb_bad_8() {
 
 void gb_bad_9() {
   sls_guard_var++; // \
-    // expected-warning{{writing variable 'sls_guard_var' requires lock on 'any mutex' to be held exclusively}}
+    // expected-warning{{writing variable 'sls_guard_var' requires lock on any mutex to be held exclusively}}
   sls_guard_var--; // \
-    // expected-warning{{writing variable 'sls_guard_var' requires lock on 'any mutex' to be held exclusively}}
+    // expected-warning{{writing variable 'sls_guard_var' requires lock on any mutex to be held exclusively}}
   ++sls_guard_var; // \
-    // expected-warning{{writing variable 'sls_guard_var' requires lock on 'any mutex' to be held exclusively}}
+    // expected-warning{{writing variable 'sls_guard_var' requires lock on any mutex to be held exclusively}}
   --sls_guard_var;// \
-    // expected-warning{{writing variable 'sls_guard_var' requires lock on 'any mutex' to be held exclusively}}
+    // expected-warning{{writing variable 'sls_guard_var' requires lock on any mutex to be held exclusively}}
 }
 
 //-----------------------------------------------//