+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.
+
2003-01-21 Jeffrey D. Oldham <oldham@codesourcery.com>
PR c++/47
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. */
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. */
+2003-01-22 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/9328
+ * g++.dg/ext/typeof3.C: New test.
+
2003-01-10 Josef Zlomek <zlomekj@suse.cz>
* gcc.c-torture/compile/20030110-1.c: New test.