On Fri, Mar 29, 2019 at 11:31 AM Marek Polacek <pola...@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 <pola...@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); }