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: r189189
This commit is contained in:
Jason Merrill 2012-07-02 23:30:27 -04:00 committed by Jason Merrill
parent 6bac8adeee
commit 7680850f90
4 changed files with 27 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

@ -6479,7 +6479,11 @@ 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 (processing_template_decl
|| (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,5 +1,8 @@
2012-07-02 Jason Merrill <jason@redhat.com>
PR c++/53816
* g++.dg/template/ref6.C: New.
PR c++/53821
* g++.dg/cpp0x/lambda/lambda-template6.C: New.

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(); }
};
};