re PR c++/9328 (ICE with templates and namespace std members)

PR c++/9328
	* g++.dg/ext/typeof3.C: New test.

	PR c++/9328
	* error.c (dump_decl): For an OVERLOAD, just print the name of the
	function; it doesn't make sense to try to print its type.
	* semantics.c (finish_typeof): Issue errors about invalid uses.

From-SVN: r61631
This commit is contained in:
Mark Mitchell 2003-01-23 00:17:32 +00:00 committed by Mark Mitchell
parent 68aab9ee3e
commit 65a5559bdf
5 changed files with 47 additions and 6 deletions

View File

@ -1,5 +1,10 @@
2003-01-22 Mark Mitchell <mark@codesourcery.com>
PR c++/9328
* error.c (dump_decl): For an OVERLOAD, just print the name of the
function; it doesn't make sense to try to print its type.
* semantics.c (finish_typeof): Issue errors about invalid uses.
PR c++/9298
* parser.c (cp_parser_consume_semicolon_at_end_of_statement): New
function.

View File

@ -929,6 +929,25 @@ dump_decl (t, flags)
break;
case OVERLOAD:
if (OVL_CHAIN (t))
{
t = OVL_CURRENT (t);
if (DECL_CLASS_SCOPE_P (t))
{
dump_type (DECL_CONTEXT (t), flags);
output_add_string (scratch_buffer, "::");
}
else if (DECL_CONTEXT (t))
{
dump_decl (DECL_CONTEXT (t), flags);
output_add_string (scratch_buffer, "::");
}
dump_decl (DECL_NAME (t), flags);
break;
}
/* If there's only one function, just treat it like an ordinary
FUNCTION_DECL. */
t = OVL_CURRENT (t);
/* Fall through. */

View File

@ -2136,20 +2136,28 @@ tree
finish_typeof (expr)
tree expr;
{
tree type;
if (processing_template_decl)
{
tree t;
type = make_aggr_type (TYPEOF_TYPE);
TYPE_FIELDS (type) = expr;
t = make_aggr_type (TYPEOF_TYPE);
TYPE_FIELDS (t) = expr;
return t;
return type;
}
if (TREE_CODE (expr) == OFFSET_REF)
expr = resolve_offset_ref (expr);
return TREE_TYPE (expr);
type = TREE_TYPE (expr);
if (!type || type == unknown_type_node)
{
error ("type of `%E' is unknown", expr);
return error_mark_node;
}
return type;
}
/* Compute the value of the `sizeof' operator. */

View File

@ -1,3 +1,8 @@
2003-01-22 Mark Mitchell <mark@codesourcery.com>
PR c++/9328
* g++.dg/ext/typeof3.C: New test.
2003-01-22 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
PR c++/2738

View File

@ -0,0 +1,4 @@
double f(double);
float f(float);
void h(typeof(f) g) {} // { dg-error "" }