r326665 - Create a subject list for the `used` attribute rather than use custom checking logic.

Aaron Ballman via cfe-commits cfe-commits at lists.llvm.org
Sun Mar 4 08:26:55 PST 2018


Good suggestion -- I've switched the order in r326676.

~Aaron

On Sat, Mar 3, 2018 at 6:16 PM, Nico Weber <thakis at chromium.org> wrote:
> Is it easy to mention variables first in the diag? That's probably the most
> common subject for this attribute. (If it's not easy, nevermind --
> definitely a polish thing.)
>
> On Sat, Mar 3, 2018, 4:04 PM Aaron Ballman via cfe-commits
> <cfe-commits at lists.llvm.org> wrote:
>>
>> Author: aaronballman
>> Date: Sat Mar  3 13:02:09 2018
>> New Revision: 326665
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=326665&view=rev
>> Log:
>> Create a subject list for the `used` attribute rather than use custom
>> checking logic.
>>
>> This changes the diagnostic wording somewhat, but otherwise intends no
>> functional change to the attribute.
>>
>> Modified:
>>     cfe/trunk/include/clang/Basic/Attr.td
>>     cfe/trunk/lib/Sema/SemaDeclAttr.cpp
>>     cfe/trunk/test/Sema/attr-used.c
>>
>> Modified: cfe/trunk/include/clang/Basic/Attr.td
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Attr.td?rev=326665&r1=326664&r2=326665&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/include/clang/Basic/Attr.td (original)
>> +++ cfe/trunk/include/clang/Basic/Attr.td Sat Mar  3 13:02:09 2018
>> @@ -83,6 +83,9 @@ def LocalVar : SubsetSubject<Var,
>>  def NonParmVar : SubsetSubject<Var,
>>                                 [{S->getKind() != Decl::ParmVar}],
>>                                 "variables">;
>> +def NonLocalVar : SubsetSubject<Var,
>> +                                [{!S->hasLocalStorage()}],
>> +                                "variables with non-local storage">;
>>  def NonBitField : SubsetSubject<Field,
>>                                  [{!S->isBitField()}],
>>                                  "non-bit-field non-static data members">;
>> @@ -2007,6 +2010,7 @@ def Unused : InheritableAttr {
>>
>>  def Used : InheritableAttr {
>>    let Spellings = [GCC<"used">];
>> +  let Subjects = SubjectList<[Function, ObjCMethod, NonLocalVar]>;
>>    let Documentation = [Undocumented];
>>  }
>>
>>
>> Modified: cfe/trunk/lib/Sema/SemaDeclAttr.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclAttr.cpp?rev=326665&r1=326664&r2=326665&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Sema/SemaDeclAttr.cpp (original)
>> +++ cfe/trunk/lib/Sema/SemaDeclAttr.cpp Sat Mar  3 13:02:09 2018
>> @@ -2086,23 +2086,6 @@ static void handleDisableTailCallsAttr(S
>>        AL.getRange(), S.Context, AL.getAttributeSpellingListIndex()));
>>  }
>>
>> -static void handleUsedAttr(Sema &S, Decl *D, const AttributeList &AL) {
>> -  if (const auto *VD = dyn_cast<VarDecl>(D)) {
>> -    if (VD->hasLocalStorage()) {
>> -      S.Diag(AL.getLoc(), diag::warn_attribute_ignored) << AL.getName();
>> -      return;
>> -    }
>> -  } else if (!isFunctionOrMethod(D)) {
>> -    S.Diag(AL.getLoc(), diag::warn_attribute_wrong_decl_type)
>> -      << AL.getName() << ExpectedVariableOrFunction;
>> -    return;
>> -  }
>> -
>> -  D->addAttr(::new (S.Context)
>> -             UsedAttr(AL.getRange(), S.Context,
>> -                      AL.getAttributeSpellingListIndex()));
>> -}
>> -
>>  static void handleUnusedAttr(Sema &S, Decl *D, const AttributeList &AL) {
>>    bool IsCXX17Attr = AL.isCXX11Attribute() && !AL.getScopeName();
>>
>> @@ -6248,7 +6231,7 @@ static void ProcessDeclAttribute(Sema &S
>>      handleDisableTailCallsAttr(S, D, AL);
>>      break;
>>    case AttributeList::AT_Used:
>> -    handleUsedAttr(S, D, AL);
>> +    handleSimpleAttribute<UsedAttr>(S, D, AL);
>>      break;
>>    case AttributeList::AT_Visibility:
>>      handleVisibilityAttr(S, D, AL, false);
>>
>> Modified: cfe/trunk/test/Sema/attr-used.c
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-used.c?rev=326665&r1=326664&r2=326665&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/test/Sema/attr-used.c (original)
>> +++ cfe/trunk/test/Sema/attr-used.c Sat Mar  3 13:02:09 2018
>> @@ -3,7 +3,7 @@
>>  extern int l0 __attribute__((used)); // expected-warning {{'used'
>> attribute ignored}}
>>  __private_extern__ int l1 __attribute__((used)); // expected-warning
>> {{'used' attribute ignored}}
>>
>> -struct __attribute__((used)) s { // expected-warning {{'used' attribute
>> only applies to variables and functions}}
>> +struct __attribute__((used)) s { // expected-warning {{'used' attribute
>> only applies to functions, Objective-C methods, and variables with non-local
>> storage}}
>>    int x;
>>  };
>>
>> @@ -14,7 +14,7 @@ static void __attribute__((used)) f0(voi
>>
>>  void f1() {
>>    static int a __attribute__((used));
>> -  int b __attribute__((used)); // expected-warning {{'used' attribute
>> ignored}}
>> +  int b __attribute__((used)); // expected-warning {{'used' attribute
>> only applies to functions, Objective-C methods, and variables with non-local
>> storage}}
>>  }
>>
>>  static void __attribute__((used)) f0(void);
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


More information about the cfe-commits mailing list