Jason Merrill <[email protected]> writes:
> commit e52e82e56507d1de1932abcafd80683c4dc00d1e
> Author: Jason Merrill <[email protected]>
> Date: Sun Nov 16 17:14:12 2014 -0500
>
> * constexpr.c (use_new_call): Always use new call handling.
>
> diff --git a/gcc/cp/constexpr.c b/gcc/cp/constexpr.c
> index 57d0c46..8881271 100644
> --- a/gcc/cp/constexpr.c
> +++ b/gcc/cp/constexpr.c
> @@ -1021,8 +1021,8 @@ adjust_temp_type (tree type, tree temp)
> }
>
> /* True if we want to use the new handling of constexpr calls based on
> - DECL_SAVED_TREE. Currently only active for C++14 mode. */
> -#define use_new_call (cxx_dialect >= cxx14)
> + DECL_SAVED_TREE. */
> +#define use_new_call true
>
> /* Subroutine of cxx_eval_call_expression.
> We are processing a call expression (either CALL_EXPR or
FAIL: 18_support/numeric_limits/requirements/constexpr_functions.cc (test for
excess errors)
$ gcc/xg++ -shared-libgcc -Bgcc -nostdinc++ -Lm68k-linux/libstdc++-v3/src
-Lm68k-linux/libstdc++-v3/src/.libs -Lm68k-linux/libstdc++-v3/libsupc++/.libs
-B/daten/cross/m68k-linux/m68k-linux/bin/
-B/daten/cross/m68k-linux/m68k-linux/lib/ -isystem
/daten/cross/m68k-linux/m68k-linux/include -isystem
/daten/cross/m68k-linux/m68k-linux/sys-include
-Bm68k-linux/./libstdc++-v3/src/.libs -D_GLIBCXX_ASSERT -fmessage-length=0
-ffunction-sections -fdata-sections -O2 -g -D_GNU_SOURCE -DLOCALEDIR="."
-nostdinc++ -Im68k-linux/libstdc++-v3/include/m68k-linux
-Im68k-linux/libstdc++-v3/include -I../libstdc++-v3/libsupc++
-I../libstdc++-v3/include/backward -I../libstdc++-v3/testsuite/util
../libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc
-std=gnu++14 -S -o constexpr_functions.s
In file included from
../libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc:21:0:
../libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc:
In instantiation of ‘void
__gnu_test::constexpr_member_functions::operator()()::_Concept::__constraint()
[with _Ttesttype = std::numeric_limits<char>; _Tbasetype = char]’:
../libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc:55:2:
required from ‘void __gnu_test::constexpr_member_functions::operator()()
[with _Ttesttype = std::numeric_limits<char>; _Tbasetype = char]’
m68k-linux/libstdc++-v3/include/ext/typelist.h:197:2: required from ‘void
__gnu_cxx::typelist::detail::apply_generator2_<Gn,
__gnu_cxx::typelist::chain<Hd, Tl>, __gnu_cxx::typelist::chain<Hd2, TlV>
>::operator()(Gn&) [with Gn = __gnu_test::constexpr_member_functions; Hd1 =
std::numeric_limits<char>; TlT =
__gnu_cxx::typelist::chain<std::numeric_limits<signed char>,
__gnu_cxx::typelist::chain<std::numeric_limits<unsigned char>,
__gnu_cxx::typelist::chain<std::numeric_limits<short int>,
__gnu_cxx::typelist::chain<std::numeric_limits<short unsigned int>,
__gnu_cxx::typelist::chain<std::numeric_limits<int>,
__gnu_cxx::typelist::chain<std::numeric_limits<unsigned int>,
__gnu_cxx::typelist::chain<std::numeric_limits<long int>,
__gnu_cxx::typelist::chain<std::numeric_limits<long unsigned int>,
__gnu_cxx::typelist::chain<std::numeric_limits<long long int>,
__gnu_cxx::typelist::chain<std::numeric_limits<long long unsigned int>,
__gnu_cxx::typelist::chain<std::numeric_limits<wchar_t>,
__gnu_cxx::typelist::chain<std::numeric_limits<char16_t>,
__gnu_cxx::typelist::chain<std::numeric_limits<char32_t>,
__gnu_cxx::typelist::null_type> > > > > > > > > > > > >; Hd2 = char; TlV =
__gnu_cxx::typelist::chain<signed char, __gnu_cxx::typelist::chain<unsigned
char, __gnu_cxx::typelist::chain<short int, __gnu_cxx::typelist::chain<short
unsigned int, __gnu_cxx::typelist::chain<int,
__gnu_cxx::typelist::chain<unsigned int, __gnu_cxx::typelist::chain<long int,
__gnu_cxx::typelist::chain<long unsigned int, __gnu_cxx::typelist::chain<long
long int, __gnu_cxx::typelist::chain<long long unsigned int,
__gnu_cxx::typelist::chain<wchar_t, __gnu_cxx::typelist::chain<char16_t,
__gnu_cxx::typelist::chain<char32_t, __gnu_cxx::typelist::null_type> > > > > >
> > > > > > >]’
m68k-linux/libstdc++-v3/include/ext/typelist.h:199:6: required from ‘void
__gnu_cxx::typelist::detail::apply_generator2_<Gn,
__gnu_cxx::typelist::chain<Hd, Tl>, __gnu_cxx::typelist::chain<Hd2, TlV>
>::operator()(Gn&) [with Gn = __gnu_test::constexpr_member_functions; Hd1 =
std::numeric_limits<bool>; TlT =
__gnu_cxx::typelist::chain<std::numeric_limits<char>,
__gnu_cxx::typelist::chain<std::numeric_limits<signed char>,
__gnu_cxx::typelist::chain<std::numeric_limits<unsigned char>,
__gnu_cxx::typelist::chain<std::numeric_limits<short int>,
__gnu_cxx::typelist::chain<std::numeric_limits<short unsigned int>,
__gnu_cxx::typelist::chain<std::numeric_limits<int>,
__gnu_cxx::typelist::chain<std::numeric_limits<unsigned int>,
__gnu_cxx::typelist::chain<std::numeric_limits<long int>,
__gnu_cxx::typelist::chain<std::numeric_limits<long unsigned int>,
__gnu_cxx::typelist::chain<std::numeric_limits<long long int>,
__gnu_cxx::typelist::chain<std::numeric_limits<long long unsigned int>,
__gnu_cxx::typelist::chain<std::numeric_limits<wchar_t>,
__gnu_cxx::typelist::chain<std::numeric_limits<char16_t>,
__gnu_cxx::typelist::chain<std::numeric_limits<char32_t>,
__gnu_cxx::typelist::null_type> > > > > > > > > > > > > >; Hd2 = bool; TlV =
__gnu_cxx::typelist::chain<char, __gnu_cxx::typelist::chain<signed char,
__gnu_cxx::typelist::chain<unsigned char, __gnu_cxx::typelist::chain<short int,
__gnu_cxx::typelist::chain<short unsigned int, __gnu_cxx::typelist::chain<int,
__gnu_cxx::typelist::chain<unsigned int, __gnu_cxx::typelist::chain<long int,
__gnu_cxx::typelist::chain<long unsigned int, __gnu_cxx::typelist::chain<long
long int, __gnu_cxx::typelist::chain<long long unsigned int,
__gnu_cxx::typelist::chain<wchar_t, __gnu_cxx::typelist::chain<char16_t,
__gnu_cxx::typelist::chain<char32_t, __gnu_cxx::typelist::null_type> > > > > >
> > > > > > > >]’
m68k-linux/libstdc++-v3/include/ext/typelist.h:424:8: required from ‘void
__gnu_cxx::typelist::apply_generator(Gn&, TypelistT, TypelistV) [with Gn =
__gnu_test::constexpr_member_functions; TypelistT =
__gnu_cxx::typelist::node<__gnu_cxx::typelist::chain<std::numeric_limits<bool>,
__gnu_cxx::typelist::chain<std::numeric_limits<char>,
__gnu_cxx::typelist::chain<std::numeric_limits<signed char>,
__gnu_cxx::typelist::chain<std::numeric_limits<unsigned char>,
__gnu_cxx::typelist::chain<std::numeric_limits<short int>,
__gnu_cxx::typelist::chain<std::numeric_limits<short unsigned int>,
__gnu_cxx::typelist::chain<std::numeric_limits<int>,
__gnu_cxx::typelist::chain<std::numeric_limits<unsigned int>,
__gnu_cxx::typelist::chain<std::numeric_limits<long int>,
__gnu_cxx::typelist::chain<std::numeric_limits<long unsigned int>,
__gnu_cxx::typelist::chain<std::numeric_limits<long long int>,
__gnu_cxx::typelist::chain<std::numeric_limits<long long unsigned int>,
__gnu_cxx::typelist::chain<std::numeric_limits<wchar_t>,
__gnu_cxx::typelist::chain<std::numeric_limits<char16_t>,
__gnu_cxx::typelist::chain<std::numeric_limits<char32_t>,
__gnu_cxx::typelist::null_type> > > > > > > > > > > > > > > >; TypelistV =
__gnu_cxx::typelist::node<__gnu_cxx::typelist::chain<bool,
__gnu_cxx::typelist::chain<char, __gnu_cxx::typelist::chain<signed char,
__gnu_cxx::typelist::chain<unsigned char, __gnu_cxx::typelist::chain<short int,
__gnu_cxx::typelist::chain<short unsigned int, __gnu_cxx::typelist::chain<int,
__gnu_cxx::typelist::chain<unsigned int, __gnu_cxx::typelist::chain<long int,
__gnu_cxx::typelist::chain<long unsigned int, __gnu_cxx::typelist::chain<long
long int, __gnu_cxx::typelist::chain<long long unsigned int,
__gnu_cxx::typelist::chain<wchar_t, __gnu_cxx::typelist::chain<char16_t,
__gnu_cxx::typelist::chain<char32_t, __gnu_cxx::typelist::null_type> > > > > >
> > > > > > > > > >]’
../libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc:68:50:
required from here
../libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc:37:25:
in constexpr expansion of ‘std::numeric_limits<char>::min()’
m68k-linux/libstdc++-v3/include/limits:456:44: error: ‘(1u * 8u)’ is not a
constant expression
min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min(char); }
^
../libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc:39:25:
in constexpr expansion of ‘std::numeric_limits<char>::max()’
m68k-linux/libstdc++-v3/include/limits:459:44: error: ‘(1u * 8u)’ is not a
constant expression
max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max(char); }
^
../libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc:41:28:
in constexpr expansion of ‘std::numeric_limits<char>::lowest()’
m68k-linux/libstdc++-v3/include/limits:463:37: in constexpr expansion of
‘std::numeric_limits<char>::min()’
m68k-linux/libstdc++-v3/include/limits:456:44: error: ‘(1u * 8u)’ is not a
constant expression
min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min(char); }
^
../libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc:
In instantiation of ‘void
__gnu_test::constexpr_member_functions::operator()()::_Concept::__constraint()
[with _Ttesttype = std::numeric_limits<wchar_t>; _Tbasetype = wchar_t]’:
../libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc:55:2:
required from ‘void __gnu_test::constexpr_member_functions::operator()()
[with _Ttesttype = std::numeric_limits<wchar_t>; _Tbasetype = wchar_t]’
m68k-linux/libstdc++-v3/include/ext/typelist.h:199:6: recursively required
from ‘void __gnu_cxx::typelist::detail::apply_generator2_<Gn,
__gnu_cxx::typelist::chain<Hd, Tl>, __gnu_cxx::typelist::chain<Hd2, TlV>
>::operator()(Gn&) [with Gn = __gnu_test::constexpr_member_functions; Hd1 =
std::numeric_limits<char>; TlT =
__gnu_cxx::typelist::chain<std::numeric_limits<signed char>,
__gnu_cxx::typelist::chain<std::numeric_limits<unsigned char>,
__gnu_cxx::typelist::chain<std::numeric_limits<short int>,
__gnu_cxx::typelist::chain<std::numeric_limits<short unsigned int>,
__gnu_cxx::typelist::chain<std::numeric_limits<int>,
__gnu_cxx::typelist::chain<std::numeric_limits<unsigned int>,
__gnu_cxx::typelist::chain<std::numeric_limits<long int>,
__gnu_cxx::typelist::chain<std::numeric_limits<long unsigned int>,
__gnu_cxx::typelist::chain<std::numeric_limits<long long int>,
__gnu_cxx::typelist::chain<std::numeric_limits<long long unsigned int>,
__gnu_cxx::typelist::chain<std::numeric_limits<wchar_t>,
__gnu_cxx::typelist::chain<std::numeric_limits<char16_t>,
__gnu_cxx::typelist::chain<std::numeric_limits<char32_t>,
__gnu_cxx::typelist::null_type> > > > > > > > > > > > >; Hd2 = char; TlV =
__gnu_cxx::typelist::chain<signed char, __gnu_cxx::typelist::chain<unsigned
char, __gnu_cxx::typelist::chain<short int, __gnu_cxx::typelist::chain<short
unsigned int, __gnu_cxx::typelist::chain<int,
__gnu_cxx::typelist::chain<unsigned int, __gnu_cxx::typelist::chain<long int,
__gnu_cxx::typelist::chain<long unsigned int, __gnu_cxx::typelist::chain<long
long int, __gnu_cxx::typelist::chain<long long unsigned int,
__gnu_cxx::typelist::chain<wchar_t, __gnu_cxx::typelist::chain<char16_t,
__gnu_cxx::typelist::chain<char32_t, __gnu_cxx::typelist::null_type> > > > > >
> > > > > > >]’
m68k-linux/libstdc++-v3/include/ext/typelist.h:199:6: required from ‘void
__gnu_cxx::typelist::detail::apply_generator2_<Gn,
__gnu_cxx::typelist::chain<Hd, Tl>, __gnu_cxx::typelist::chain<Hd2, TlV>
>::operator()(Gn&) [with Gn = __gnu_test::constexpr_member_functions; Hd1 =
std::numeric_limits<bool>; TlT =
__gnu_cxx::typelist::chain<std::numeric_limits<char>,
__gnu_cxx::typelist::chain<std::numeric_limits<signed char>,
__gnu_cxx::typelist::chain<std::numeric_limits<unsigned char>,
__gnu_cxx::typelist::chain<std::numeric_limits<short int>,
__gnu_cxx::typelist::chain<std::numeric_limits<short unsigned int>,
__gnu_cxx::typelist::chain<std::numeric_limits<int>,
__gnu_cxx::typelist::chain<std::numeric_limits<unsigned int>,
__gnu_cxx::typelist::chain<std::numeric_limits<long int>,
__gnu_cxx::typelist::chain<std::numeric_limits<long unsigned int>,
__gnu_cxx::typelist::chain<std::numeric_limits<long long int>,
__gnu_cxx::typelist::chain<std::numeric_limits<long long unsigned int>,
__gnu_cxx::typelist::chain<std::numeric_limits<wchar_t>,
__gnu_cxx::typelist::chain<std::numeric_limits<char16_t>,
__gnu_cxx::typelist::chain<std::numeric_limits<char32_t>,
__gnu_cxx::typelist::null_type> > > > > > > > > > > > > >; Hd2 = bool; TlV =
__gnu_cxx::typelist::chain<char, __gnu_cxx::typelist::chain<signed char,
__gnu_cxx::typelist::chain<unsigned char, __gnu_cxx::typelist::chain<short int,
__gnu_cxx::typelist::chain<short unsigned int, __gnu_cxx::typelist::chain<int,
__gnu_cxx::typelist::chain<unsigned int, __gnu_cxx::typelist::chain<long int,
__gnu_cxx::typelist::chain<long unsigned int, __gnu_cxx::typelist::chain<long
long int, __gnu_cxx::typelist::chain<long long unsigned int,
__gnu_cxx::typelist::chain<wchar_t, __gnu_cxx::typelist::chain<char16_t,
__gnu_cxx::typelist::chain<char32_t, __gnu_cxx::typelist::null_type> > > > > >
> > > > > > > >]’
m68k-linux/libstdc++-v3/include/ext/typelist.h:424:8: required from ‘void
__gnu_cxx::typelist::apply_generator(Gn&, TypelistT, TypelistV) [with Gn =
__gnu_test::constexpr_member_functions; TypelistT =
__gnu_cxx::typelist::node<__gnu_cxx::typelist::chain<std::numeric_limits<bool>,
__gnu_cxx::typelist::chain<std::numeric_limits<char>,
__gnu_cxx::typelist::chain<std::numeric_limits<signed char>,
__gnu_cxx::typelist::chain<std::numeric_limits<unsigned char>,
__gnu_cxx::typelist::chain<std::numeric_limits<short int>,
__gnu_cxx::typelist::chain<std::numeric_limits<short unsigned int>,
__gnu_cxx::typelist::chain<std::numeric_limits<int>,
__gnu_cxx::typelist::chain<std::numeric_limits<unsigned int>,
__gnu_cxx::typelist::chain<std::numeric_limits<long int>,
__gnu_cxx::typelist::chain<std::numeric_limits<long unsigned int>,
__gnu_cxx::typelist::chain<std::numeric_limits<long long int>,
__gnu_cxx::typelist::chain<std::numeric_limits<long long unsigned int>,
__gnu_cxx::typelist::chain<std::numeric_limits<wchar_t>,
__gnu_cxx::typelist::chain<std::numeric_limits<char16_t>,
__gnu_cxx::typelist::chain<std::numeric_limits<char32_t>,
__gnu_cxx::typelist::null_type> > > > > > > > > > > > > > > >; TypelistV =
__gnu_cxx::typelist::node<__gnu_cxx::typelist::chain<bool,
__gnu_cxx::typelist::chain<char, __gnu_cxx::typelist::chain<signed char,
__gnu_cxx::typelist::chain<unsigned char, __gnu_cxx::typelist::chain<short int,
__gnu_cxx::typelist::chain<short unsigned int, __gnu_cxx::typelist::chain<int,
__gnu_cxx::typelist::chain<unsigned int, __gnu_cxx::typelist::chain<long int,
__gnu_cxx::typelist::chain<long unsigned int, __gnu_cxx::typelist::chain<long
long int, __gnu_cxx::typelist::chain<long long unsigned int,
__gnu_cxx::typelist::chain<wchar_t, __gnu_cxx::typelist::chain<char16_t,
__gnu_cxx::typelist::chain<char32_t, __gnu_cxx::typelist::null_type> > > > > >
> > > > > > > > > >]’
../libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc:68:50:
required from here
../libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc:37:25:
in constexpr expansion of ‘std::numeric_limits<wchar_t>::min()’
m68k-linux/libstdc++-v3/include/limits:666:44: error: ‘(4u * 8u)’ is not a
constant expression
min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (wchar_t); }
^
../libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc:39:25:
in constexpr expansion of ‘std::numeric_limits<wchar_t>::max()’
m68k-linux/libstdc++-v3/include/limits:669:44: error: ‘(4u * 8u)’ is not a
constant expression
max() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_max (wchar_t); }
^
../libstdc++-v3/testsuite/18_support/numeric_limits/requirements/constexpr_functions.cc:41:28:
in constexpr expansion of ‘std::numeric_limits<wchar_t>::lowest()’
m68k-linux/libstdc++-v3/include/limits:673:37: in constexpr expansion of
‘std::numeric_limits<wchar_t>::min()’
m68k-linux/libstdc++-v3/include/limits:666:44: error: ‘(4u * 8u)’ is not a
constant expression
min() _GLIBCXX_USE_NOEXCEPT { return __glibcxx_min (wchar_t); }
^
Andreas.
--
Andreas Schwab, SUSE Labs, [email protected]
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE 1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."