if (flag_minimal_debug)
{
+ char marker;
+
/* We can't optimize a method which uses an anonymous
class, because the debugger will not be able to
associate the arbitrary class name with the actual
class. */
- if (strchr (debug_name,
#ifndef NO_DOLLAR_IN_LABEL
- '$'
+ marker = '$';
#else
- '.'
+ marker = '.';
#endif
- ) != NULL)
+ if (strchr (debug_name, marker))
show_arg_types = 1;
/* Detect ordinary methods because their mangled names
start with the operation name. */
dbxout_type (type, 0, 0); /* E.g. Pascal's ARRAY [BOOLEAN] of INTEGER */
else
{
- /* This used to say `r1' and we used to take care
- to make sure that `int' was type number 1. */
- dbxout_type_index (integer_type_node);
+ /* Traditionally, we made sure 'int' was type 1, and builtin types
+ were defined to be sub-ranges of int. Unfortunately, this
+ does not allow us to distinguish true sub-ranges from integer
+ types. So, instead we define integer (non-sub-range) types as
+ sub-ranges of themselves. */
+ dbxout_type_index (type);
}
if (TREE_CODE (TYPE_MIN_VALUE (type)) == INTEGER_CST)
fprintf (asmfile, ";%d",
by assuming `int'. */
if (type == error_mark_node)
type = integer_type_node;
- else
+ else if (!(TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
+ && DECL_ORIGINAL_TYPE (TYPE_NAME (type))))
{
type = TYPE_MAIN_VARIANT (type);
if (TYPE_NAME (type)
typevec[TYPE_SYMTAB_ADDRESS (type)].status = TYPE_DEFINED;
+ if (TYPE_NAME (type) && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
+ && DECL_ORIGINAL_TYPE (TYPE_NAME (type)))
+ {
+ dbxout_type (DECL_ORIGINAL_TYPE (TYPE_NAME (type)), 0, 0);
+ return;
+ }
+
switch (TREE_CODE (type))
{
case VOID_TYPE: