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