https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108262

            Bug ID: 108262
           Summary: Spurious [Wignored-attributes] on vector intrinsic
                    types, even in constexpr contexts
           Product: gcc
           Version: 13.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ian at geometrian dot com
  Target Milestone: ---

We've been running into a peculiar issue where [Wignored-attributes] is
triggering on apparently benign uses of vector intrinsic types.  Consider the
following example:

    #include <xmmintrin.h>
    template<class T> struct Wrap { T val; };
    using WrapT = Wrap<__m128>;

This will produce (compiled with no arguments, which is a bit surprising; one
might expect "-std=c++17 -Wignored-attributes"):

    <source>:3:26: warning: ignoring attributes on template argument '__m128'
[-Wignored-attributes]
        3 | using WrapT = Wrap<__m128>;
          |                          ^

You can get a similar error with another test case:

    #include <immintrin.h>
    #include <type_traits>
    constexpr inline bool b = std::is_same_v< int, __m128 >;

Clang, MSVC, and ICC all compile these examples cleanly, but GCC produces the
warning.

I believe the warning is erroneous.  `__m128`, etc. are of course aligned,
which I assume is the "attribute" to which GCC is referring (bonus bug: it
would be helpful if this were specified!), however the attribute is not being
ignored in any way.  In the first example, the alignment of `Wrap` inherits
from its members (easily confirmable with
`static_assert(alignof(WrapT)==16);`).  In the second example, we're just using
`__m128` as a template argument, in the standard library no less.

The warning can be silenced with "-Wno-ignored-attributes".

This issue seems to have existed for a long time; the first example is a
distillation of https://stackoverflow.com/q/41676311/, and I have tested it as
reproducing all the way back to GCC 6.1.

Version: 13.0.0 20230101
System + Options: x86_64-linux-gnu

Reply via email to