re PR c++/53816 (internal compiler error: tree check: expected field_decl, have identifier_node in fixed_type_or_null, at cp/class.c:6419, with -std=c++11 option)

PR c++/53816
	* class.c (resolves_to_fixed_type_p): Check uses_template_parms
	(current_function_decl) instead of processing_template_decl.

From-SVN: r189187
This commit is contained in:
Jason Merrill 2012-07-02 23:29:58 -04:00 committed by Jason Merrill
parent d695f91575
commit 65f0c5b308
4 changed files with 28 additions and 1 deletions

View File

@ -1,5 +1,9 @@
2012-07-02 Jason Merrill <jason@redhat.com>
PR c++/53816
* class.c (resolves_to_fixed_type_p): Check uses_template_parms
(current_function_decl) instead of processing_template_decl.
PR c++/53821
* semantics.c (maybe_add_lambda_conv_op): Don't set
DECL_INTERFACE_KNOWN.

View File

@ -6521,7 +6521,10 @@ resolves_to_fixed_type_p (tree instance, int* nonnull)
int cdtorp = 0;
tree fixed;
if (processing_template_decl)
/* processing_template_decl can be false in a template if we're in
fold_non_dependent_expr, but we still want to suppress this check. */
if (current_function_decl
&& uses_template_parms (current_function_decl))
{
/* In a template we only care about the type of the result. */
if (nonnull)

View File

@ -1,3 +1,8 @@
2012-07-02 Jason Merrill <jason@redhat.com>
PR c++/53816
* g++.dg/template/ref6.C: New.
2012-07-03 Oleg Endo <olegendo@gcc.gnu.org>
PR target/53568

View File

@ -0,0 +1,15 @@
// PR c++/53816
template <typename T>
struct S { int v () const; };
template <typename T>
struct V : public S<T> {};
struct U
{
V<int> v;
template<typename T>
struct W
{
W (U const &x) { V<int> const &v = x.v; v.v(); }
};
};