[gcc r17-3480] c++: add fixed test [PR126472]

Patrick Palka via Gcc-cvs <[email protected]>
Newsgroups gmane.comp.gcc.cvs
Message-ID <[email protected]>
https://gcc.gnu.org/g:222f7f90191563a71dfbc710c8de950ace91c439

commit r17-3480-g222f7f90191563a71dfbc710c8de950ace91c439
Author: Patrick Palka <[email protected]>
Date:   Thu Aug 20 16:58:18 2026 -0400

    c++: add fixed test [PR126472]
    
    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.

Diff:
---
 gcc/testsuite/g++.dg/cpp0x/initlist135.C | 47 ++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)

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();
+}
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.