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

Alexander Potapenko glider at google.com
Fri Dec 6 01:05:15 PST 2013


Maybe MSVC doesn't define __GNUC__? I guess it's better to remove the
#ifdef clutter so that the attribute is applied unconditionally.
The problem is reproducible for me and Kostya on our machines as well
as on our build server (all of them running Linux)

On Thu, Dec 5, 2013 at 9:22 PM, Aaron Ballman <aaron at aaronballman.com> wrote:
> 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



-- 
Alexander Potapenko
Software Engineer
Google Moscow



More information about the cfe-commits mailing list