On Wed, Nov 20, 2013 at 1:41 PM, Aaron Ballman <[email protected]>wrote:
> Author: aaronballman > Date: Wed Nov 20 15:41:42 2013 > New Revision: 195275 > > URL: http://llvm.org/viewvc/llvm-project?rev=195275&view=rev > Log: > Removed a duplicate diagnostic related to attribute subjects for thread > safety annotations, and replaced it with the more general attribute > diagnostic. Updated the test case in the one instance where wording > changed. No functional change intended. > This introduces a functional change: the warning flag to suppress this warning has changed. Delesley: Does that matter? We'd ideally like to be able to factor out the subject checking from the handlers for individual attributes, and this is a step on that path. > Modified: > cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td > cfe/trunk/lib/Sema/SemaDeclAttr.cpp > cfe/trunk/test/SemaCXX/warn-thread-safety-parsing.cpp > > Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=195275&r1=195274&r2=195275&view=diff > > ============================================================================== > --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original) > +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Wed Nov 20 > 15:41:42 2013 > @@ -2136,11 +2136,6 @@ def warn_thread_attribute_decl_not_locka > def warn_thread_attribute_decl_not_pointer : Warning< > "'%0' only applies to pointer types; type here is %1">, > InGroup<ThreadSafetyAttributes>, DefaultIgnore; > -def warn_thread_attribute_wrong_decl_type : Warning< > - "%0 attribute only applies to %select{" > - "fields and global variables|functions and methods|" > - "classes and structs}1">, > - InGroup<ThreadSafetyAttributes>, DefaultIgnore; > def err_attribute_argument_out_of_range : Error< > "%0 attribute parameter %1 is out of bounds: " > "%plural{0:no parameters to index into|" > > Modified: cfe/trunk/lib/Sema/SemaDeclAttr.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclAttr.cpp?rev=195275&r1=195274&r2=195275&view=diff > > ============================================================================== > --- cfe/trunk/lib/Sema/SemaDeclAttr.cpp (original) > +++ cfe/trunk/lib/Sema/SemaDeclAttr.cpp Wed Nov 20 15:41:42 2013 > @@ -535,18 +535,12 @@ static void checkAttrArgsAreLockableObjs > // least add some helper functions to check most argument patterns (# > // and types of args). > > -enum ThreadAttributeDeclKind { > - ThreadExpectedFieldOrGlobalVar, > - ThreadExpectedFunctionOrMethod, > - ThreadExpectedClassOrStruct > -}; > - > static bool checkGuardedVarAttrCommon(Sema &S, Decl *D, > const AttributeList &Attr) { > // D must be either a member field or global (potentially shared) > variable. > if (!mayBeSharedVariable(D)) { > - S.Diag(Attr.getLoc(), diag::warn_thread_attribute_wrong_decl_type) > - << Attr.getName() << ThreadExpectedFieldOrGlobalVar; > + S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) > + << Attr.getName() << ExpectedFieldOrGlobalVar; > return false; > } > > @@ -580,8 +574,8 @@ static bool checkGuardedByAttrCommon(Sem > Expr* &Arg) { > // D must be either a member field or global (potentially shared) > variable. > if (!mayBeSharedVariable(D)) { > - S.Diag(Attr.getLoc(), diag::warn_thread_attribute_wrong_decl_type) > - << Attr.getName() << ThreadExpectedFieldOrGlobalVar; > + S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) > + << Attr.getName() << ExpectedFieldOrGlobalVar; > return false; > } > > @@ -622,8 +616,8 @@ static bool checkLockableAttrCommon(Sema > const AttributeList &Attr) { > // FIXME: Lockable structs for C code. > if (!isa<RecordDecl>(D)) { > - S.Diag(Attr.getLoc(), diag::warn_thread_attribute_wrong_decl_type) > - << Attr.getName() << ThreadExpectedClassOrStruct; > + S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) > + << Attr.getName() << ExpectedStructOrUnionOrClass; > return false; > } > > @@ -650,8 +644,8 @@ static void handleScopedLockableAttr(Sem > static void handleNoThreadSafetyAnalysis(Sema &S, Decl *D, > const AttributeList &Attr) { > if (!isa<FunctionDecl>(D) && !isa<FunctionTemplateDecl>(D)) { > - S.Diag(Attr.getLoc(), diag::warn_thread_attribute_wrong_decl_type) > - << Attr.getName() << ThreadExpectedFunctionOrMethod; > + S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) > + << Attr.getName() << ExpectedFunctionOrMethod; > return; > } > > @@ -705,8 +699,8 @@ static bool checkAcquireOrderAttrCommon( > // D must be either a member field or global (potentially shared) > variable. > ValueDecl *VD = dyn_cast<ValueDecl>(D); > if (!VD || !mayBeSharedVariable(D)) { > - S.Diag(Attr.getLoc(), diag::warn_thread_attribute_wrong_decl_type) > - << Attr.getName() << ThreadExpectedFieldOrGlobalVar; > + S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) > + << Attr.getName() << ExpectedFieldOrGlobalVar; > return false; > } > > @@ -762,8 +756,8 @@ static bool checkLockFunAttrCommon(Sema > > // check that the attribute is applied to a function > if (!isa<FunctionDecl>(D) && !isa<FunctionTemplateDecl>(D)) { > - S.Diag(Attr.getLoc(), diag::warn_thread_attribute_wrong_decl_type) > - << Attr.getName() << ThreadExpectedFunctionOrMethod; > + S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) > + << Attr.getName() << ExpectedFunctionOrMethod; > return false; > } > > @@ -835,8 +829,8 @@ static bool checkTryLockFunAttrCommon(Se > return false; > > if (!isa<FunctionDecl>(D) && !isa<FunctionTemplateDecl>(D)) { > - S.Diag(Attr.getLoc(), diag::warn_thread_attribute_wrong_decl_type) > - << Attr.getName() << ThreadExpectedFunctionOrMethod; > + S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) > + << Attr.getName() << ExpectedFunctionOrMethod; > return false; > } > > @@ -885,8 +879,8 @@ static bool checkLocksRequiredCommon(Sem > return false; > > if (!isa<FunctionDecl>(D) && !isa<FunctionTemplateDecl>(D)) { > - S.Diag(Attr.getLoc(), diag::warn_thread_attribute_wrong_decl_type) > - << Attr.getName() << ThreadExpectedFunctionOrMethod; > + S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) > + << Attr.getName() << ExpectedFunctionOrMethod; > return false; > } > > @@ -929,8 +923,8 @@ static void handleUnlockFunAttr(Sema &S, > // zero or more arguments ok > > if (!isa<FunctionDecl>(D) && !isa<FunctionTemplateDecl>(D)) { > - S.Diag(Attr.getLoc(), diag::warn_thread_attribute_wrong_decl_type) > - << Attr.getName() << ThreadExpectedFunctionOrMethod; > + S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) > + << Attr.getName() << ExpectedFunctionOrMethod; > return; > } > > @@ -948,8 +942,8 @@ static void handleUnlockFunAttr(Sema &S, > static void handleLockReturnedAttr(Sema &S, Decl *D, > const AttributeList &Attr) { > if (!isa<FunctionDecl>(D) && !isa<FunctionTemplateDecl>(D)) { > - S.Diag(Attr.getLoc(), diag::warn_thread_attribute_wrong_decl_type) > - << Attr.getName() << ThreadExpectedFunctionOrMethod; > + S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) > + << Attr.getName() << ExpectedFunctionOrMethod; > return; > } > > @@ -971,8 +965,8 @@ static void handleLocksExcludedAttr(Sema > return; > > if (!isa<FunctionDecl>(D) && !isa<FunctionTemplateDecl>(D)) { > - S.Diag(Attr.getLoc(), diag::warn_thread_attribute_wrong_decl_type) > - << Attr.getName() << ThreadExpectedFunctionOrMethod; > + S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type) > + << Attr.getName() << ExpectedFunctionOrMethod; > return; > } > > > Modified: cfe/trunk/test/SemaCXX/warn-thread-safety-parsing.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-thread-safety-parsing.cpp?rev=195275&r1=195274&r2=195275&view=diff > > ============================================================================== > --- cfe/trunk/test/SemaCXX/warn-thread-safety-parsing.cpp (original) > +++ cfe/trunk/test/SemaCXX/warn-thread-safety-parsing.cpp Wed Nov 20 > 15:41:42 2013 > @@ -229,28 +229,28 @@ class __attribute__((lockable (1))) LTes > }; > > void l_test_function() LOCKABLE; // \ > - // expected-warning {{'lockable' attribute only applies to classes}} > + // expected-warning {{'lockable' attribute only applies to struct, > union or class}} > > int l_testfn(int y) { > int x LOCKABLE = y; // \ > - // expected-warning {{'lockable' attribute only applies to classes}} > + // expected-warning {{'lockable' attribute only applies to struct, > union or class}} > return x; > } > > int l_test_var LOCKABLE; // \ > - // expected-warning {{'lockable' attribute only applies to classes}} > + // expected-warning {{'lockable' attribute only applies to struct, > union or class}} > > class LFoo { > private: > int test_field LOCKABLE; // \ > - // expected-warning {{'lockable' attribute only applies to classes}} > + // expected-warning {{'lockable' attribute only applies to struct, > union or class}} > void test_method() LOCKABLE; // \ > - // expected-warning {{'lockable' attribute only applies to classes}} > + // expected-warning {{'lockable' attribute only applies to struct, > union or class}} > }; > > > void l_function_params(int lvar LOCKABLE); // \ > - // expected-warning {{'lockable' attribute only applies to classes}} > + // expected-warning {{'lockable' attribute only applies to struct, > union or class}} > > > //-----------------------------------------// > @@ -269,28 +269,28 @@ class __attribute__((scoped_lockable (1) > }; > > void sl_test_function() SCOPED_LOCKABLE; // \ > - // expected-warning {{'scoped_lockable' attribute only applies to > classes}} > + // expected-warning {{'scoped_lockable' attribute only applies to > struct, union or class}} > > int sl_testfn(int y) { > int x SCOPED_LOCKABLE = y; // \ > - // expected-warning {{'scoped_lockable' attribute only applies to > classes}} > + // expected-warning {{'scoped_lockable' attribute only applies to > struct, union or class}} > return x; > } > > int sl_test_var SCOPED_LOCKABLE; // \ > - // expected-warning {{'scoped_lockable' attribute only applies to > classes}} > + // expected-warning {{'scoped_lockable' attribute only applies to > struct, union or class}} > > class SLFoo { > private: > int test_field SCOPED_LOCKABLE; // \ > - // expected-warning {{'scoped_lockable' attribute only applies to > classes}} > + // expected-warning {{'scoped_lockable' attribute only applies to > struct, union or class}} > void test_method() SCOPED_LOCKABLE; // \ > - // expected-warning {{'scoped_lockable' attribute only applies to > classes}} > + // expected-warning {{'scoped_lockable' attribute only applies to > struct, union or class}} > }; > > > void sl_function_params(int lvar SCOPED_LOCKABLE); // \ > - // expected-warning {{'scoped_lockable' attribute only applies to > classes}} > + // expected-warning {{'scoped_lockable' attribute only applies to > struct, union or class}} > > > //-----------------------------------------// > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
