+1998-07-19 Jason Merrill <jason@yorick.cygnus.com>
+
+ * lex.c (do_identifier): Look for class value even if we don't
+ have a global value. Do implicit declaration if parsing is 2.
+ * semantics.c (finish_call_expr): Pass 2 if we're doing Koenig
+ lookup.
+
+1998-07-19 Mark Mitchell <mark@markmitchell.com>
+
+ * decl.c (pushtag): Revert previous change.
+ * pt.c (lookup_template_class): Don't put out debugging
+ information for types that use template parameters.
+
+ * decl.c (pushtag): Don't put out debugging information for
+ compiler-generated typedefs.
+
+ * error.c (dump_type_real): Don't crash when presented with
+ intQI_type_node or the like.
+
+ * semantics.c (finish_translation_unit): Fix spelling error in
+ comment.
+
1998-07-17 Jason Merrill <jason@yorick.cygnus.com>
* decl.c (lookup_name_real): Pull out single function here.
case REAL_TYPE:
case VOID_TYPE:
case BOOLEAN_TYPE:
- dump_readonly_or_volatile (t, after);
- OB_PUTID (TYPE_IDENTIFIER (canonical_name ? TYPE_MAIN_VARIANT (t) : t));
+ {
+ tree type;
+ dump_readonly_or_volatile (t, after);
+ type = canonical_name ? TYPE_MAIN_VARIANT (t) : t;
+ if (TYPE_NAME (type) && TYPE_IDENTIFIER (type))
+ OB_PUTID (TYPE_IDENTIFIER (type));
+ else
+ /* Types like intQI_type_node and friends have no names.
+ These don't come up in user error messages, but it's nice
+ to be able to print them from the debugger. */
+ OB_PUTS ("{anonymous}");
+ }
break;
case TEMPLATE_TEMPLATE_PARM:
tree args;
{
register tree id;
+ int lexing = (parsing == 1);
+ int in_call = (parsing == 2);
- if (! parsing || IDENTIFIER_OPNAME_P (token))
+ if (! lexing || IDENTIFIER_OPNAME_P (token))
id = lookup_name (token, 0);
else
id = lastiddecl;
- if (parsing && yychar == YYEMPTY)
- yychar = yylex ();
/* Scope class declarations before global
declarations. */
- if (id && is_global (id)
+ if ((!id || is_global (id))
&& current_class_type != 0
&& TYPE_SIZE (current_class_type) == 0)
{
cp_error ("`%D' not defined", token);
id = error_mark_node;
}
- else if (parsing && (yychar == '(' || yychar == LEFT_RIGHT))
+ else if (in_call)
{
id = implicitly_declare (token);
}
&& CLASSTYPE_INTERFACE_KNOWN (TREE_TYPE (template))
&& ! CLASSTYPE_INTERFACE_ONLY (TREE_TYPE (template)))
add_pending_template (t);
+
+ if (uses_template_parms (arglist))
+ /* If the type makes use of template parameters, the
+ code that generates debugging information will crash. */
+ DECL_IGNORED_P (TYPE_STUB_DECL (t)) = 1;
}
return t;
if (TREE_CODE (fn) == BIT_NOT_EXPR)
fn = build_x_unary_op (BIT_NOT_EXPR, TREE_OPERAND (fn, 0));
else if (TREE_CODE (fn) != TEMPLATE_ID_EXPR)
- fn = do_identifier (fn, 0, args);
+ fn = do_identifier (fn, 2, args);
}
result = build_x_function_call (fn, args, current_class_ref);
prefix_attributes);
}
-/* Finish a transltation unit. */
+/* Finish a translation unit. */
void
finish_translation_unit ()