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

Reply via email to