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. > >