Jason Merrill <ja...@redhat.com> writes: > commit e52e82e56507d1de1932abcafd80683c4dc00d1e > Author: Jason Merrill <ja...@redhat.com> > 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, sch...@suse.de GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE 1748 E4D4 88E3 0EEA B9D7 "And now for something completely different."