From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2181) id 2E72E3858CDA; Thu, 14 Sep 2023 13:39:29 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2E72E3858CDA DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1694698769; bh=H8hk6zCgHcu3M349BpKBg4yiugX7P34MHmfBW5W7Kr4=; h=From:To:Subject:Date:From; b=nzdW59u6Ho+MGWV0ONmqd1vQuQd1cl9tZnvbX7KJXOJPdSf2Hyp+3WEA1p5bqyFn9 2sVUiTJy5K82DexoMzgiH4poLNyDHtEJQjVnoEmQ9YOiQKs+RMddqGAA6KEu8n4CzT kjhmEMvDTTAIUyhleNlCTPHH+pQgWCu4BJuzp7no= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Jonathan Wakely To: gcc-cvs@gcc.gnu.org, libstdc++-cvs@gcc.gnu.org Subject: [gcc r13-7817] libstdc++: Add workaround for std::make_integer_sequence bug [PR111357] X-Act-Checkin: gcc X-Git-Author: Jonathan Wakely X-Git-Refname: refs/heads/releases/gcc-13 X-Git-Oldrev: 9cddebd822aeff9b7c0e9951909d5ec96c959e4f X-Git-Newrev: 7b0abd4a8ee9d2057febe443de67009dcdfe7574 Message-Id: <20230914133929.2E72E3858CDA@sourceware.org> Date: Thu, 14 Sep 2023 13:39:29 +0000 (GMT) List-Id: https://gcc.gnu.org/g:7b0abd4a8ee9d2057febe443de67009dcdfe7574 commit r13-7817-g7b0abd4a8ee9d2057febe443de67009dcdfe7574 Author: Jonathan Wakely Date: Thu Sep 14 09:18:34 2023 +0100 libstdc++: Add workaround for std::make_integer_sequence bug [PR111357] The compiler bug has been fixed on trunk, but we need this workaround on the branches. libstdc++-v3/ChangeLog: PR c++/111357 * include/bits/utility.h (make_integer_sequence): Add cast. * testsuite/20_util/integer_sequence/pr111357.cc: New test. Diff: --- libstdc++-v3/include/bits/utility.h | 2 +- .../testsuite/20_util/integer_sequence/pr111357.cc | 34 ++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/libstdc++-v3/include/bits/utility.h b/libstdc++-v3/include/bits/utility.h index abaaae2dd33..714e2c02680 100644 --- a/libstdc++-v3/include/bits/utility.h +++ b/libstdc++-v3/include/bits/utility.h @@ -173,7 +173,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #if __has_builtin(__make_integer_seq) = __make_integer_seq; #else - = integer_sequence<_Tp, __integer_pack(_Num)...>; + = integer_sequence<_Tp, __integer_pack(_Tp(_Num))...>; #endif /// Alias template index_sequence 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 index 00000000000..1ad06b732af --- /dev/null +++ b/libstdc++-v3/testsuite/20_util/integer_sequence/pr111357.cc @@ -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 + +using std::integer_sequence; +using std::make_integer_sequence; + +template +void g(integer_sequence) +{} + +template +struct c1 +{ + static constexpr int value = 1; + constexpr operator int() { return value; } +}; + +template +struct R +{ + using S = make_integer_sequence{}>; + + R() noexcept(noexcept(g(S()))) // { dg-bogus "argument to .__integer_pack." } + {} +}; + +int main() +{ + R(); +}