r195275 - 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.

Richard Smith richard at metafoo.co.uk
Wed Nov 20 17:13:06 PST 2013


On Wed, Nov 20, 2013 at 1:41 PM, Aaron Ballman <aaron at aaronballman.com>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
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20131120/0b41ce17/attachment.html>


More information about the cfe-commits mailing list