From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2181) id A18773AA9831; Fri, 18 Jun 2021 14:43:29 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A18773AA9831 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 r9-9590] libstdc++: Simplify constexpr checks in std::char_traits [PR 91488] X-Act-Checkin: gcc X-Git-Author: Jonathan Wakely X-Git-Refname: refs/heads/releases/gcc-9 X-Git-Oldrev: 3f023bc5bb3d260ffe7d6e1f333fb41bbbbae444 X-Git-Newrev: cc44169fc7bc7552eb85f143f4fee9c8bcdd5e49 Message-Id: <20210618144329.A18773AA9831@sourceware.org> Date: Fri, 18 Jun 2021 14:43:29 +0000 (GMT) X-BeenThere: libstdc++-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libstdc++-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 18 Jun 2021 14:43:29 -0000 https://gcc.gnu.org/g:cc44169fc7bc7552eb85f143f4fee9c8bcdd5e49 commit r9-9590-gcc44169fc7bc7552eb85f143f4fee9c8bcdd5e49 Author: Jonathan Wakely Date: Thu Jun 17 14:11:22 2021 +0100 libstdc++: Simplify constexpr checks in std::char_traits [PR 91488] This removes the 'static' keyword from the helper functions added by r8-1294 to detect whether the char_traits member functions can be evaluated at compile time. This prevents the "inlining failed" error reported in the PR. The new testcase from the PR is added to the libitm testsuite, because that's where we can be sure it's OK to use the -fgnu-tm option. Signed-off-by: Jonathan Wakely PR libstdc++/91488 libstdc++-v3/ChangeLog: * include/bits/char_traits.h (__constant_string_p) (__constant_array_p): Give external linkage. libitm/ChangeLog: * testsuite/libitm.c++/libstdc++-pr91488.C: New test. (cherry picked from commit b376b1ef38971b84975ad1540bf5d2ae0b924e76) Diff: --- libitm/testsuite/libitm.c++/libstdc++-pr91488.C | 9 +++++++++ libstdc++-v3/include/bits/char_traits.h | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/libitm/testsuite/libitm.c++/libstdc++-pr91488.C b/libitm/testsuite/libitm.c++/libstdc++-pr91488.C new file mode 100644 index 00000000000..e9e82bd1ce2 --- /dev/null +++ b/libitm/testsuite/libitm.c++/libstdc++-pr91488.C @@ -0,0 +1,9 @@ +// PR libstdc++/91488 "inlining failed in call to always_inline" +// { dg-do run } +// { dg-additional-options "-O1" } + +#include + +int main() { + return std::char_traits::length(""); +} diff --git a/libstdc++-v3/include/bits/char_traits.h b/libstdc++-v3/include/bits/char_traits.h index 50bd25eb2df..4c7b84e357f 100644 --- a/libstdc++-v3/include/bits/char_traits.h +++ b/libstdc++-v3/include/bits/char_traits.h @@ -227,7 +227,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * Assumes that _CharT is a built-in character type. */ template - static _GLIBCXX_ALWAYS_INLINE constexpr bool + _GLIBCXX_ALWAYS_INLINE constexpr bool __constant_string_p(const _CharT* __s) { #ifdef _GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED @@ -250,7 +250,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION * Assumes that _CharT is a built-in character type. */ template - static _GLIBCXX_ALWAYS_INLINE constexpr bool + _GLIBCXX_ALWAYS_INLINE constexpr bool __constant_char_array_p(const _CharT* __a, size_t __n) { #ifdef _GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED