r196415 - This attribute somehow remained nameless in the attribute tablegen, until now.

Aaron Ballman aaron at aaronballman.com
Thu Dec 5 09:22:07 PST 2013


Thank you for bringing this to my attention. I may need some further
information on this, as I am not able to reproduce. The leading and
trailing underscores are stripped when determining the attribute kind
based off the name (you can see this in AttributeList.cpp:124), so I
would be surprised if this came up as an unknown attribute based on
the name. Perhaps this is a transient build issue for you, and a
rebuild solves it?

I am testing with ToT (fetched this morning), built using MSVC 2013
for x86 and tested on Windows 7.

~Aaron

On Thu, Dec 5, 2013 at 10:37 AM, Alexander Potapenko <glider at google.com> wrote:
> Hi Aaron,
>
> Clang now reports an unknown attribute for the following code (a
> slightly modified excerpt from Mozilla QCMS):
>
> $ bin/clang++ -c t.cc
> t.cc:14:16: warning: unknown attribute '__force_align_arg_pointer__'
> ignored [-Wattributes]
> __attribute__((__force_align_arg_pointer__))
>                ^
>
>
> ==============================================================
> $ cat t.cc
> /* __force_align_arg_pointer__ is an x86-only attribute, and gcc/clang
> warns on unused
>  * attributes. Don't use this on ARM or AMD64. __has_attribute can
> detect the presence
>  * of the attribute but is currently only supported by clang */
> #if defined(__has_attribute)
> #define HAS_FORCE_ALIGN_ARG_POINTER __has_attribute(__force_align_arg_pointer__)
> #elif defined(__GNUC__) && !defined(__x86_64__) && !defined(__amd64__)
> && !defined(__arm__) && !defined(__mips__)
> #define HAS_FORCE_ALIGN_ARG_POINTER 1
> #else
> #define HAS_FORCE_ALIGN_ARG_POINTER 0
> #endif
>
> #if HAS_FORCE_ALIGN_ARG_POINTER
> /* we need this to avoid crashes when gcc assumes the stack is 128bit aligned */
> __attribute__((__force_align_arg_pointer__))
> #endif
> int foo() {
>   return 0;
> }
> ==============================================================
>
> On Thu, Dec 5, 2013 at 1:43 AM, Aaron Ballman <aaron at aaronballman.com> wrote:
>> Author: aaronballman
>> Date: Wed Dec  4 15:43:30 2013
>> New Revision: 196415
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=196415&view=rev
>> Log:
>> This attribute somehow remained nameless in the attribute tablegen, until now.
>>
>> Modified:
>>     cfe/trunk/include/clang/Basic/Attr.td
>>     cfe/trunk/lib/Sema/TargetAttributesSema.cpp
>>
>> Modified: cfe/trunk/include/clang/Basic/Attr.td
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Attr.td?rev=196415&r1=196414&r2=196415&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Basic/Attr.td (original)
>> +++ cfe/trunk/include/clang/Basic/Attr.td Wed Dec  4 15:43:30 2013
>> @@ -916,7 +916,10 @@ def WeakRef : InheritableAttr {
>>  }
>>
>>  def X86ForceAlignArgPointer : InheritableAttr, TargetSpecificAttr {
>> -  let Spellings = [];
>> +  let Spellings = [GNU<"force_align_arg_pointer">];
>> +  // Technically, this appertains to a FunctionDecl, but the target-specific
>> +  // code silently allows anything function-like (such as typedefs or function
>> +  // pointers), but does not apply the attribute to them.
>>  }
>>
>>  // Attribute to disable AddressSanitizer (or equivalent) checks.
>>
>> Modified: cfe/trunk/lib/Sema/TargetAttributesSema.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/TargetAttributesSema.cpp?rev=196415&r1=196414&r2=196415&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Sema/TargetAttributesSema.cpp (original)
>> +++ cfe/trunk/lib/Sema/TargetAttributesSema.cpp Wed Dec  4 15:43:30 2013
>> @@ -267,8 +267,7 @@ namespace {
>>          }
>>        }
>>        if (Triple.getArch() != llvm::Triple::x86_64 &&
>> -          (Attr.getName()->getName() == "force_align_arg_pointer" ||
>> -           Attr.getName()->getName() == "__force_align_arg_pointer__")) {
>> +          Attr.getKind() == AttributeList::AT_X86ForceAlignArgPointer) {
>>          HandleX86ForceAlignArgPointerAttr(D, Attr, S);
>>          return true;
>>        }
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
>
> --
> Alexander Potapenko
> Software Engineer
> Google Moscow



More information about the cfe-commits mailing list