re PR c++/61433 (ICE: SIGSEGV in friend_accessible_p (search.c:778) with -std=gnu++11 -O -fcompare-debug -fno-inline -fno-ipa-pure-const -fipa-sra)

PR c++/61433
	* error.c (dump_template_bindings): Don't tsubst in a clone.

From-SVN: r212091
This commit is contained in:
Jason Merrill 2014-06-27 17:38:24 -04:00 committed by Jason Merrill
parent 8274b28187
commit 1ed5f1d3f1
3 changed files with 33 additions and 0 deletions

View file

@ -1,3 +1,8 @@
2014-06-27 Jason Merrill <jason@redhat.com>
PR c++/61433
* error.c (dump_template_bindings): Don't tsubst in a clone.
2014-06-27 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/61614

View file

@ -318,6 +318,11 @@ dump_template_bindings (cxx_pretty_printer *pp, tree parms, tree args,
if (vec_safe_is_empty (typenames) || uses_template_parms (args))
return;
/* Don't try to print typenames when we're processing a clone. */
if (current_function_decl
&& !DECL_LANG_SPECIFIC (current_function_decl))
return;
FOR_EACH_VEC_SAFE_ELT (typenames, i, t)
{
if (need_semicolon)

View file

@ -0,0 +1,23 @@
// PR c++/61433
// { dg-do compile { target c++11 } }
// { dg-options "-O -fcompare-debug -fno-inline -fno-ipa-pure-const -fipa-sra" }
template <class T>
struct A
{
template <class V>
struct B
{
int MEM;
};
};
struct D {};
struct C: public A<int>::B<D>
{};
template <class T, class U, class V>
auto k(T t, U u, V v) -> decltype (t.U::template B<V>::MEM)
{}
int main()
{
k( C(), A<int>(), D() );
}