From: jakub Date: Mon, 11 Feb 2019 20:00:16 +0000 (+0000) Subject: PR c++/88977 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=61b9455331cc965cb985093f846cb1cd478df43d;p=thirdparty%2Fgcc.git PR c++/88977 * pt.c (convert_nontype_argument): Pass true as manifestly_const_eval to maybe_constant_value calls. * g++.dg/cpp2a/is-constant-evaluated7.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@268780 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 885cd5056534..3bfd06fab299 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2019-02-11 Jakub Jelinek + + PR c++/88977 + * pt.c (convert_nontype_argument): Pass true as manifestly_const_eval + to maybe_constant_value calls. + 2019-02-11 Marek Polacek * typeck2.c (digest_init_r): Remove commented code. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index b8fbf4046f07..eb1797658c5f 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -6821,12 +6821,14 @@ convert_nontype_argument (tree type, tree expr, tsubst_flags_t complain) /* Make sure we return NULL_TREE only if we have really issued an error, as described above. */ return (complain & tf_error) ? NULL_TREE : error_mark_node; - expr = maybe_constant_value (expr); + expr = maybe_constant_value (expr, NULL_TREE, + /*manifestly_const_eval=*/true); expr = convert_from_reference (expr); } else if (TYPE_PTR_OR_PTRMEM_P (type)) { - tree folded = maybe_constant_value (expr); + tree folded = maybe_constant_value (expr, NULL_TREE, + /*manifestly_const_eval=*/true); if (TYPE_PTR_P (type) ? integer_zerop (folded) : null_member_pointer_value_p (folded)) expr = folded; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 032d078933d1..afcf630d6de5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-02-11 Jakub Jelinek + + PR c++/88977 + * g++.dg/cpp2a/is-constant-evaluated7.C: New test. + 2019-02-12 Wilco Dijkstra PR tree-optimization/86637 diff --git a/gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated7.C b/gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated7.C new file mode 100644 index 000000000000..72082f8d9494 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/is-constant-evaluated7.C @@ -0,0 +1,18 @@ +// P0595R2 +// PR c++/88977 +// { dg-do compile { target c++11 } } + +namespace std { + constexpr inline bool + is_constant_evaluated () noexcept + { + return __builtin_is_constant_evaluated (); + } +} + +template constexpr bool foo () { return B; } + +constexpr bool x = foo (); +constexpr bool y = foo<__builtin_is_constant_evaluated ()> (); +static_assert (x, ""); +static_assert (y, "");