]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
libstdc++: Add testcase for std::make_integer_sequence bug [PR111357]
authorJonathan Wakely <jwakely@redhat.com>
Thu, 14 Sep 2023 08:18:34 +0000 (09:18 +0100)
committerJonathan Wakely <jwakely@redhat.com>
Thu, 14 Sep 2023 13:26:03 +0000 (14:26 +0100)
The compiler bug has been fixed on trunk, but this adds a regression test
for the library component.

libstdc++-v3/ChangeLog:

PR c++/111357
* testsuite/20_util/integer_sequence/pr111357.cc: New test.

libstdc++-v3/testsuite/20_util/integer_sequence/pr111357.cc [new file with mode: 0644]

diff --git a/libstdc++-v3/testsuite/20_util/integer_sequence/pr111357.cc b/libstdc++-v3/testsuite/20_util/integer_sequence/pr111357.cc
new file mode 100644 (file)
index 0000000..1ad06b7
--- /dev/null
@@ -0,0 +1,34 @@
+// { dg-do compile { target c++14 } }
+
+// PR c++/111357 - __integer_pack fails to work with values of dependent type
+// convertible to integers in noexcept context
+
+#include <utility>
+
+using std::integer_sequence;
+using std::make_integer_sequence;
+
+template<int... V>
+void g(integer_sequence<int,V...>)
+{}
+
+template<typename ...T>
+struct c1
+{
+  static constexpr int value = 1;
+  constexpr operator int() { return value; }
+};
+
+template<typename T>
+struct R
+{
+  using S = make_integer_sequence<int,c1<T>{}>;
+
+  R() noexcept(noexcept(g(S()))) // { dg-bogus "argument to .__integer_pack." }
+  {}
+};
+
+int main()
+{
+  R<int>();
+}