C++ PATCH for c++/89876 - ICE with deprecated conversion
Jason Merrill
jason@redhat.com
Fri Mar 29 18:44:00 GMT 2019
On Fri, Mar 29, 2019 at 11:31 AM Marek Polacek <polacek@redhat.com> wrote:
>
> Here a missing guard caused the usual "Error reporting routines re-entered."
>
> Bootstrapped/regtested on x86_64-linux, ok for trunk?
>
> 2019-03-29 Marek Polacek <polacek@redhat.com>
>
> PR c++/89876 - ICE with deprecated conversion.
> * call.c (convert_like_real): Only give warnings with tf_warning.
OK.
> * g++.dg/warn/conv5.C: New test.
>
> diff --git gcc/cp/call.c gcc/cp/call.c
> index bc5179416a5..519dad9bf2c 100644
> --- gcc/cp/call.c
> +++ gcc/cp/call.c
> @@ -7446,7 +7446,8 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
>
> case ck_qual:
> /* Warn about deprecated conversion if appropriate. */
> - string_conv_p (totype, expr, 1);
> + if (complain & tf_warning)
> + string_conv_p (totype, expr, 1);
> break;
>
> case ck_ptr:
> diff --git gcc/testsuite/g++.dg/warn/conv5.C gcc/testsuite/g++.dg/warn/conv5.C
> new file mode 100644
> index 00000000000..e238f9f30b7
> --- /dev/null
> +++ gcc/testsuite/g++.dg/warn/conv5.C
> @@ -0,0 +1,11 @@
> +// PR c++/89876
> +// { dg-do compile { target c++11 } }
> +// { dg-prune-output "sorry" }
> +
> +template <typename T>
> +T f (T, char*);
> +
> +template <typename T>
> +decltype (f (T (), "")) g (T) { return ""; } // { dg-error "invalid conversion" }
> +
> +void h () { g (0); }
More information about the Gcc-patches
mailing list