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