On Fri, Dec 6, 2013 at 4:05 AM, Alexander Potapenko <[email protected]> wrote: > Maybe MSVC doesn't define __GNUC__? I guess it's better to remove the > #ifdef clutter so that the attribute is applied unconditionally.
Even when I did that, I was unable to reproduce. A very basic test of: __attribute__((__force_align_arg_pointer__)) void f(void); Would not demonstrate the issue. When I stepped through the code, it would get to getKind, strip off the leading and trailing underscores, and determine the proper attribute id. > The problem is reproducible for me and Kostya on our machines as well > as on our build server (all of them running Linux) I don't have access to a Linux box right now. Give me a bit to set one up; any particular distro you are seeing this with? Also, x86 or x64 host environment? In the meantime, does the following code work for you: __attribute__((force_align_arg_pointer)) void f(void); Or does it also emit the diagnostic? Thanks! ~Aaron > > 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
