PR c++/83714 - ICE checking return in template.

* typeck.c (check_return_expr): Call build_non_dependent_expr.

From-SVN: r256765
This commit is contained in:
Jason Merrill 2018-01-16 18:05:39 -05:00 committed by Jason Merrill
parent a9db08a673
commit 035181c312
3 changed files with 24 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2018-01-16 Jason Merrill <jason@redhat.com>
PR c++/83714 - ICE checking return in template.
* typeck.c (check_return_expr): Call build_non_dependent_expr.
2018-01-16 Jakub Jelinek <jakub@redhat.com>
PR c++/83817

View File

@ -9333,6 +9333,9 @@ check_return_expr (tree retval, bool *no_warning)
to undo it so we can try to treat it as an rvalue below. */
retval = maybe_undo_parenthesized_ref (retval);
if (processing_template_decl)
retval = build_non_dependent_expr (retval);
/* Under C++11 [12.8/32 class.copy], a returned lvalue is sometimes
treated as an rvalue for the purposes of overload resolution to
favor move constructors over copy constructors.

View File

@ -0,0 +1,16 @@
// PR c++/83714
// { dg-do compile { target c++11 } }
class a {
typedef int b;
operator b();
};
struct c {
using d = a;
};
using e = c;
template <class T>
e f(T) {
return e::d {}; // { dg-error "could not convert" }
}