Commit fc7612fd by Nathan Sidwell Committed by Nathan Sidwell

PR c++/71710 - template using directive of field

	PR c++/71710 - template using directive of field
	* pt.c (tsubst_copy_and_build [COMPONENT_REF]): Move FIELD_DECL
	check earlier.

	PR C++/71710
	* g++.dg/template/pr71710.C: New.

From-SVN: r244833
parent e6b8075c
2017-01-23 Nathan Sidwell <nathan@acm.org>
PR c++/71710 - template using directive of field
* pt.c (tsubst_copy_and_build [COMPONENT_REF]): Move FIELD_DECL
check earlier.
PR c++/71406 - ICE with scope-ref'd template id exprs
PR c++/77508
* typeck.c (finish_class_member_access_expr): Break up SCOPE_REF
......
......@@ -17470,7 +17470,14 @@ tsubst_copy_and_build (tree t,
if (member == error_mark_node)
RETURN (error_mark_node);
if (type_dependent_expression_p (object))
if (TREE_CODE (member) == FIELD_DECL)
{
r = finish_non_static_data_member (member, object, NULL_TREE);
if (TREE_CODE (r) == COMPONENT_REF)
REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
RETURN (r);
}
else if (type_dependent_expression_p (object))
/* We can't do much here. */;
else if (!CLASS_TYPE_P (object_type))
{
......@@ -17535,13 +17542,6 @@ tsubst_copy_and_build (tree t,
}
RETURN (error_mark_node);
}
else if (TREE_CODE (member) == FIELD_DECL)
{
r = finish_non_static_data_member (member, object, NULL_TREE);
if (TREE_CODE (r) == COMPONENT_REF)
REF_PARENTHESIZED_P (r) = REF_PARENTHESIZED_P (t);
RETURN (r);
}
r = finish_class_member_access_expr (object, member,
/*template_p=*/false,
......
2017-01-23 Nathan Sidwell <nathan@acm.org>
PR C++/71710
* g++.dg/template/pr71710.C: New.
PR c++/71406
PR c++/77508
* g++.dg/template/pr71406.C: New.
......
// { dg-do compile { target c++11 } }
// PR C++/71710 ICE with decltype & using
template < typename > struct A
{
A a;
template < int > using B = decltype (a);
B < 0 > b;
template < int C > B < C > foo ();
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment