[C++ PATCH] Fix ICE in C++14 with null RETURN_EXPR (PR c++/65202)
Kai Tietz
ktietz70@googlemail.com
Thu Feb 26 13:35:00 GMT 2015
Hi Marek,
I have similiar change on the c++-delayed-fold branch.
2015-02-26 13:22 GMT+01:00 Marek Polacek <polacek@redhat.com>:
> We ICE on this invalid testcase in C++14 because in C++14 a function returning
> void is a valid constexpr function, so adl_swap is registered as one, while in
> C++11 it is not registered. Then later on, we weren't able to properly handle
> a RETURN_EXPR with null operand when trying to evaluate the expression.
>
> Bootstrapped/regtested on x86_64-linux, ok for trunk?
>
> 2015-02-26 Marek Polacek <polacek@redhat.com>
>
> PR c++/65202
> * constexpr.c (cxx_eval_constant_expression): Handle null tree.
>
> * g++.dg/cpp1y/pr65202.C: New test.
>
> diff --git gcc/cp/constexpr.c gcc/cp/constexpr.c
> index 32a23ff7..1d2bb2f 100644
> --- gcc/cp/constexpr.c
> +++ gcc/cp/constexpr.c
> @@ -2935,7 +2935,7 @@ cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t,
> constexpr_ctx new_ctx;
> tree r = t;
>
> - if (t == error_mark_node)
> + if (t == NULL_TREE || t == error_mark_node)
> {
> *non_constant_p = true;
> return t;
Just one nit. Shouldn't we return here always error_mark_node instead?
---
Kai
More information about the Gcc-patches
mailing list