Here is patch that goes back to the old separate diagnostics. Cheers,
Caitlin On Fri, Sep 9, 2011 at 9:13 AM, Chandler Carruth <[email protected]> wrote: > On Fri, Sep 9, 2011 at 9:07 AM, Caitlin Sadowski <[email protected]> > wrote: >> >> + // FIXME: It would be nice if this case printed without single quotes >> around >> + // the phrase 'any mutex' > > I think you should use two diagnostics, or use a %select in the message. The > C++ code shouldn't be providing "any mutex", all the text should come from > the diagnostic message table.
From 7d0b2cd9042ecc965be7f25c801517d63cfe4daa Mon Sep 17 00:00:00 2001 From: Caitlin Sadowski <[email protected]> Date: Mon, 12 Sep 2011 15:53:21 -0700 Subject: [PATCH] Thread safety: reverting to use separate warning for requirement to hold any lock --- include/clang/Basic/DiagnosticSemaKinds.td | 8 ++++++++ lib/Sema/AnalysisBasedWarnings.cpp | 20 ++++++++++++++++---- test/SemaCXX/warn-thread-safety-analysis.cpp | 16 ++++++++-------- 3 files changed, 32 insertions(+), 12 deletions(-) diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index 3c9e0f7..a5aa397 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -1418,6 +1418,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; diff --git a/lib/Sema/AnalysisBasedWarnings.cpp b/lib/Sema/AnalysisBasedWarnings.cpp index 6a7c5d3..37f4ffc 100644 --- a/lib/Sema/AnalysisBasedWarnings.cpp +++ b/lib/Sema/AnalysisBasedWarnings.cpp @@ -689,9 +689,21 @@ 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_FunctionCall); + unsigned DiagID; + switch (POK) { + case POK_VarAccess: + DiagID = diag::warn_variable_requires_any_lock; + break; + case POK_VarDereference: + DiagID = diag::warn_var_deref_requires_any_lock; + break; + default: + break; + } + PartialDiagnostic Warning = S.PDiag(DiagID) + << D->getName() << getLockKindFromAccessKind(AK); + Warnings.push_back(DelayedDiag(Loc, Warning)); } void handleMutexNotHeld(const NamedDecl *D, ProtectedOperationKind POK, @@ -709,7 +721,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)); } diff --git a/test/SemaCXX/warn-thread-safety-analysis.cpp b/test/SemaCXX/warn-thread-safety-analysis.cpp index a3f37ef..fc9d145 100644 --- a/test/SemaCXX/warn-thread-safety-analysis.cpp +++ b/test/SemaCXX/warn-thread-safety-analysis.cpp @@ -345,12 +345,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() { @@ -365,12 +365,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() { @@ -391,13 +391,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}} } //-----------------------------------------------// -- 1.7.3.1
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
