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 <[email protected]> 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 <[email protected]> 
> 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 <[email protected]> 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
>>> [email protected]
>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>
>>
>>
>> --
>> Alexander Potapenko
>> Software Engineer
>> Google Moscow



-- 
Alexander Potapenko
Software Engineer
Google Moscow
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to