Re: [pushed] c++: add fixed test [PR126472]

Patrick Palka <[email protected]>
Newsgroups gmane.comp.gcc.patches
Message-ID <491e11bf-45f1-4828-9a5e-b5976b897f0d@idea>
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.
> 
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.