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

            Bug ID: 115897
           Summary: [14/15 Regression] __is_same fails for vector builtin
           Product: gcc
           Version: 14.1.0
            Status: UNCONFIRMED
          Keywords: rejects-valid
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: mkretz at gcc dot gnu.org
  Target Milestone: ---

Test case (https://compiler-explorer.com/z/6dWYMdcef):

---------------------------------------------------
template <typename _Tp, typename _Up>
  constexpr bool is_same_v = __is_same(_Tp, _Up);

template <typename _Tp>
  using _Vp [[gnu::vector_size(16)]] = _Tp;

static_assert(sizeof(_Vp<float>) == 16);
static_assert(not is_same_v<float, _Vp<float>>);

template <typename _Tp>
  struct Test
  {
    static_assert(sizeof(_Vp<_Tp>) == 16);
    static_assert(not is_same_v<_Tp, _Vp<_Tp>>);
  };

Test<float> x;
---------------------------------------------------

Here the first 'is_same_v' assertion passes but the second assertion fails,
even though both are testing '__is_same(float, _Vp<float>)'. Note that _Vp<_Tp>
appears to still be a vector builtin inside of 'Test<float>' (sizeof assertion
passes).

Reply via email to