On Fri, 21 Aug 2026, H.J. Lu wrote:

> On Fri, Aug 21, 2026 at 5:00 AM Patrick Palka <[email protected]> wrote:
> >
> > Fixed by r17-2835 for PR c++/126335 and, unlike that PR's testcase, did
> > not depend on r17-1661 to trigger the bug.
> >
> >         PR c++/126472
> >
> > gcc/testsuite/ChangeLog:
> >
> >         * g++.dg/cpp0x/initlist135.C: New test.
> 
> On Linux/x86-64, I got
> 
> FAIL: g++.dg/cpp0x/initlist135.C  -std=c++11 (test for excess errors)
> Excess errors:
> /export/gnu/import/git/gitlab/x86-gcc-test/gcc/testsuite/g++.dg/cpp0x/initlist135.C:5:28:
> fatal error: definition of 'struct std::initializer_list<_E>' does not
> match '#include <initializer_list>'
> compilation terminated.
> 
> with -m32.

Thanks for the heads up, this should be fixed by r17-3485-g2bb0802bf84491.

> 
> > ---
> >  gcc/testsuite/g++.dg/cpp0x/initlist135.C | 47 ++++++++++++++++++++++++
> >  1 file changed, 47 insertions(+)
> >  create mode 100644 gcc/testsuite/g++.dg/cpp0x/initlist135.C
> >
> > diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist135.C 
> > b/gcc/testsuite/g++.dg/cpp0x/initlist135.C
> > new file mode 100644
> > index 000000000000..759ff6833a2e
> > --- /dev/null
> > +++ b/gcc/testsuite/g++.dg/cpp0x/initlist135.C
> > @@ -0,0 +1,47 @@
> > +// PR c++/126472
> > +// { dg-do run { target c++11 } }
> > +
> > +namespace std {
> > +template <class _E> struct initializer_list {
> > +  typedef const _E *const_iterator;
> > +  const _E *_M_array;
> > +  unsigned long _M_len;
> > +  const_iterator begin() const { return _M_array; }
> > +  const_iterator end() const { return begin() + _M_len; }
> > +};
> > +struct _Optional_payload_base {
> > +  struct _Storage {
> > +    constexpr _Storage() : _M_empty() {}
> > +#if __cpp_constexpr >= 201907L
> > +    constexpr
> > +#endif
> > +    ~_Storage() {}
> > +    int _M_empty;
> > +  } _M_payload;
> > +};
> > +struct _Optional_payload : _Optional_payload_base {};
> > +template <typename> struct optional {
> > +  constexpr optional() {}
> > +  template <typename _Up> optional(_Up) {}
> > +  _Optional_payload _M_payload;
> > +};
> > +template <typename _T1, typename _T2> struct pair {
> > +  _T1 first;
> > +  _T2 second;
> > +  constexpr pair(_T1 __x, _T2 __y) : first(__x), second(__y) { }
> > +};
> > +template <typename> struct vector {
> > +  vector(int, int) {}
> > +};
> > +} // namespace std
> > +
> > +using namespace std;
> > +const initializer_list<pair<optional<vector<int>>, int>> data {
> > +  pair<optional<vector<int>>, int>( optional<vector<int>>(vector<int>(1, 
> > 10)), 42), // non-constant
> > +  pair<optional<vector<int>>, int>( optional<vector<int>>(), 100), // 
> > constant
> > +};
> > +
> > +int main() {
> > +  if (data.begin()[0].second != 42 || data.begin()[1].second != 100)
> > +    __builtin_abort();
> > +}
> > --
> > 2.55.0.618.g1a3e64c6c4
> >
> 
> 
> -- 
> H.J.
> 
> 

Reply via email to