Commit 3897c0aa by Mark Mitchell Committed by Mark Mitchell

re PR c++/25337 (ICE with template processing)

	PR c++/25337 
	* pt.c (tsubst_copy_and_build): Permit dependent types for the
	object in a class member access expression.
	PR c++/25337
	* g++.dg/template/defarg7.C: New test.

From-SVN: r108394
parent 392cc400
2005-12-10 Mark Mitchell <mark@codesourcery.com>
PR c++/25337
* pt.c (tsubst_copy_and_build): Permit dependent types for the
object in a class member access expression.
2005-12-10 Terry Laurenzo <tlaurenzo@gmail.com>
PR java/9861
......
......@@ -8857,6 +8857,7 @@ tsubst_copy_and_build (tree t,
case COMPONENT_REF:
{
tree object;
tree object_type;
tree member;
object = tsubst_non_call_postfix_expression (TREE_OPERAND (t, 0),
......@@ -8864,6 +8865,7 @@ tsubst_copy_and_build (tree t,
/* Remember that there was a reference to this entity. */
if (DECL_P (object))
mark_used (object);
object_type = TREE_TYPE (object);
member = TREE_OPERAND (t, 1);
if (BASELINK_P (member))
......@@ -8872,20 +8874,20 @@ tsubst_copy_and_build (tree t,
args, complain, in_decl);
else
member = tsubst_copy (member, args, complain, in_decl);
if (member == error_mark_node)
return error_mark_node;
else if (!CLASS_TYPE_P (TREE_TYPE (object)))
if (object_type && !CLASS_TYPE_P (object_type))
{
if (TREE_CODE (member) == BIT_NOT_EXPR)
return finish_pseudo_destructor_expr (object,
NULL_TREE,
TREE_TYPE (object));
object_type);
else if (TREE_CODE (member) == SCOPE_REF
&& (TREE_CODE (TREE_OPERAND (member, 1)) == BIT_NOT_EXPR))
return finish_pseudo_destructor_expr (object,
object,
TREE_TYPE (object));
object_type);
}
else if (TREE_CODE (member) == SCOPE_REF
&& TREE_CODE (TREE_OPERAND (member, 1)) == TEMPLATE_ID_EXPR)
......@@ -8907,12 +8909,11 @@ tsubst_copy_and_build (tree t,
args);
member = (adjust_result_of_qualified_name_lookup
(member, BINFO_TYPE (BASELINK_BINFO (member)),
TREE_TYPE (object)));
object_type));
}
else
{
qualified_name_lookup_error (TREE_TYPE (object), tmpl,
member);
qualified_name_lookup_error (object_type, tmpl, member);
return error_mark_node;
}
}
......
2005-12-11 Mark Mitchell <mark@codesourcery.com>
PR c++/25337
* g++.dg/template/defarg7.C: New test.
2005-12-11 Andrew Pinski <pinskia@physics.uc.edu>
PR libobjc/25347
// PR c++/25337
template <typename T> T& MakeT();
template <typename U, int N = sizeof (MakeT<U>().operator[](0))>
struct helper{};
template <typename U>
static char is_here(helper<U>*);
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