Commit 9687f8f4 by Nathan Sidwell Committed by Nathan Sidwell

parse.y (named_class_head): Check for TYPENAME_TYPE.

	* parse.y (named_class_head): Check for TYPENAME_TYPE. Simplify
	union tag mismatch error reporting.

From-SVN: r36096
parent 291c9aa2
2000-09-01 Nathan Sidwell <nathan@codesourcery.com> 2000-09-01 Nathan Sidwell <nathan@codesourcery.com>
* parse.y (named_class_head): Check for TYPENAME_TYPE. Simplify
union tag mismatch error reporting.
2000-09-01 Nathan Sidwell <nathan@codesourcery.com>
* call.c (build_scoped_method_call): Check it is not a namespace. * call.c (build_scoped_method_call): Check it is not a namespace.
2000-08-30 Jason Merrill <jason@redhat.com> 2000-08-30 Jason Merrill <jason@redhat.com>
......
...@@ -2393,24 +2393,30 @@ named_class_head: ...@@ -2393,24 +2393,30 @@ named_class_head:
{ {
if ($1.t != error_mark_node) if ($1.t != error_mark_node)
{ {
$$.t = TREE_TYPE ($1.t); tree type = TREE_TYPE ($1.t);
$$.t = type;
$$.new_type_flag = $1.new_type_flag; $$.new_type_flag = $1.new_type_flag;
if (current_aggr == union_type_node if ((current_aggr == union_type_node)
&& TREE_CODE ($$.t) != UNION_TYPE) != (TREE_CODE (type) == UNION_TYPE))
cp_pedwarn ("`union' tag used in declaring `%#T'", cp_pedwarn (current_aggr == union_type_node
$$.t); ? "`union' tag used in declaring `%#T'"
else if (TREE_CODE ($$.t) == UNION_TYPE : "non-`union' tag used in declaring `%#T'",
&& current_aggr != union_type_node) type);
cp_pedwarn ("non-`union' tag used in declaring `%#T'", $$); else if (TREE_CODE (type) == RECORD_TYPE)
else if (TREE_CODE ($$.t) == RECORD_TYPE)
/* We might be specializing a template with a different /* We might be specializing a template with a different
class-key; deal. */ class-key; deal. */
CLASSTYPE_DECLARED_CLASS ($$.t) CLASSTYPE_DECLARED_CLASS (type)
= (current_aggr == class_type_node); = (current_aggr == class_type_node);
if ($2) if ($2)
{ {
maybe_process_partial_specialization ($$.t); if (TREE_CODE (type) == TYPENAME_TYPE)
xref_basetypes (current_aggr, $1.t, $$.t, $2); /* In a definition of a member class template, we
will get here with an implicit typename, a
TYPENAME_TYPE with a type. */
type = TREE_TYPE (type);
maybe_process_partial_specialization (type);
xref_basetypes (current_aggr, $1.t, type, $2);
} }
} }
} }
......
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