From: Mark Mitchell Date: Wed, 17 Sep 2003 20:52:41 +0000 (+0000) Subject: re PR debug/12066 (g++ generates stabs for "char *" that gdb cannot read) X-Git-Tag: releases/gcc-3.4.0~3689 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=47aa0df47504bd7a24c0e5e3110e927233e4a96d;p=thirdparty%2Fgcc.git re PR debug/12066 (g++ generates stabs for "char *" that gdb cannot read) PR debug/12066 * dbxout.c (dbxout_init): Use a langhook to find builtin types. * langhooks-def.h (lhd_return_null_tree_v): New function. (LANG_HOOKS_BUILTIN_TYPE_DECLS): New macro. (LANG_HOOKS_DECLS): Add it to the intializer. * langhooks.c (lhd_return_null_tree_v): New function. * langhooks.h (lang_hooks_for_decls): Add builtin_type_decls. PR debug/12066 * cp-lang.c (LANG_HOOKS_BUILTIN_TYPE_DECLS): Define. * cp-tree.h (cxx_builtin_type_decls): Declare. * decl.c (builtin_type_decls): New variables. (cxx_builtin_type_decls): New function. (record_builtin_type): Add to builtin_type_decls. From-SVN: r71478 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8f1d4785f16e..fe68b0a9d16b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2003-09-17 Mark Mitchell + + PR debug/12066 + * dbxout.c (dbxout_init): Use a langhook to find builtin types. + * langhooks-def.h (lhd_return_null_tree_v): New function. + (LANG_HOOKS_BUILTIN_TYPE_DECLS): New macro. + (LANG_HOOKS_DECLS): Add it to the intializer. + * langhooks.c (lhd_return_null_tree_v): New function. + * langhooks.h (lang_hooks_for_decls): Add builtin_type_decls. + 2003-09-17 Daniel Jacobowitz * configure.in: Quote gcc_config_arguments for configargs.h. diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f650e3cda250..24f82d76f348 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,12 @@ +2003-09-17 Mark Mitchell + + PR debug/12066 + * cp-lang.c (LANG_HOOKS_BUILTIN_TYPE_DECLS): Define. + * cp-tree.h (cxx_builtin_type_decls): Declare. + * decl.c (builtin_type_decls): New variables. + (cxx_builtin_type_decls): New function. + (record_builtin_type): Add to builtin_type_decls. + 2003-09-17 Richard Henderson * semantics.c (expand_or_defer_fn): Inc/dec function_depth. diff --git a/gcc/cp/cp-lang.c b/gcc/cp/cp-lang.c index 3e229a01004c..92e6b914b3eb 100644 --- a/gcc/cp/cp-lang.c +++ b/gcc/cp/cp-lang.c @@ -102,6 +102,8 @@ static void cxx_initialize_diagnostics (diagnostic_context *); #define LANG_HOOKS_DECL_PRINTABLE_NAME cxx_printable_name #undef LANG_HOOKS_PRINT_ERROR_FUNCTION #define LANG_HOOKS_PRINT_ERROR_FUNCTION cxx_print_error_function +#undef LANG_HOOKS_BUILTIN_TYPE_DECLS +#define LANG_HOOKS_BUILTIN_TYPE_DECLS cxx_builtin_type_decls #undef LANG_HOOKS_PUSHLEVEL #define LANG_HOOKS_PUSHLEVEL lhd_do_nothing_i #undef LANG_HOOKS_POPLEVEL diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 1d126e85618b..dfa298f5379d 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -3752,6 +3752,8 @@ extern void register_dtor_fn (tree); extern tmpl_spec_kind current_tmpl_spec_kind (int); extern tree cp_fname_init (const char *); extern tree check_elaborated_type_specifier (enum tag_types, tree, bool); +extern tree cxx_builtin_type_decls (void); + extern bool have_extern_spec; /* in decl2.c */ diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 92e8597efd51..8676698b2eb4 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -5911,6 +5911,19 @@ lookup_type_current_level (tree name) } + +/* A chain of TYPE_DECLs for the builtin types. */ + +static GTY(()) tree builtin_type_decls; + +/* Return a chain of TYPE_DECLs for the builtin types. */ + +tree +cxx_builtin_type_decls () +{ + return builtin_type_decls; +} + /* Push the declarations of builtin types into the namespace. RID_INDEX is the index of the builtin type in the array RID_POINTERS. NAME is the name used when looking up the builtin @@ -5952,6 +5965,12 @@ record_builtin_type (enum rid rid_index, if (!TYPE_NAME (type)) TYPE_NAME (type) = tdecl; + + if (tdecl) + { + TREE_CHAIN (tdecl) = builtin_type_decls; + builtin_type_decls = tdecl; + } } /* Record one of the standard Java types. diff --git a/gcc/dbxout.c b/gcc/dbxout.c index d257729d8f8e..e4c797894c04 100644 --- a/gcc/dbxout.c +++ b/gcc/dbxout.c @@ -535,9 +535,10 @@ dbxout_init (const char *input_file_name) DBX_OUTPUT_STANDARD_TYPES (syms); #endif - /* Get all permanent types that have typedef names, - and output them all, except for those already output. */ - + /* Get all permanent types that have typedef names, and output them + all, except for those already output. Some language front ends + put these declarations in the top-level scope; some do not. */ + dbxout_typedefs ((*lang_hooks.decls.builtin_type_decls) ()); dbxout_typedefs (syms); } diff --git a/gcc/langhooks-def.h b/gcc/langhooks-def.h index 2f34664185db..f8ecc8bdcb76 100644 --- a/gcc/langhooks-def.h +++ b/gcc/langhooks-def.h @@ -46,6 +46,7 @@ extern void lhd_do_nothing_f (struct function *); extern bool lhd_post_options (const char **); extern HOST_WIDE_INT lhd_get_alias_set (tree); extern tree lhd_return_tree (tree); +extern tree lhd_return_null_tree_v (void); extern tree lhd_return_null_tree (tree); extern tree lhd_do_nothing_iii_return_null_tree (int, int, int); extern int lhd_safe_from_p (rtx, tree); @@ -239,6 +240,7 @@ extern int lhd_tree_dump_type_quals (tree); #define LANG_HOOKS_SET_BLOCK set_block #define LANG_HOOKS_PUSHDECL pushdecl #define LANG_HOOKS_GETDECLS getdecls +#define LANG_HOOKS_BUILTIN_TYPE_DECLS lhd_return_null_tree_v #define LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL lhd_warn_unused_global_decl #define LANG_HOOKS_WRITE_GLOBALS write_global_declarations #define LANG_HOOKS_PREPARE_ASSEMBLE_VARIABLE NULL @@ -252,6 +254,7 @@ extern int lhd_tree_dump_type_quals (tree); LANG_HOOKS_SET_BLOCK, \ LANG_HOOKS_PUSHDECL, \ LANG_HOOKS_GETDECLS, \ + LANG_HOOKS_BUILTIN_TYPE_DECLS, \ LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL, \ LANG_HOOKS_WRITE_GLOBALS, \ LANG_HOOKS_PREPARE_ASSEMBLE_VARIABLE, \ diff --git a/gcc/langhooks.c b/gcc/langhooks.c index 6c74ed2044f8..a1d60f9ff5eb 100644 --- a/gcc/langhooks.c +++ b/gcc/langhooks.c @@ -83,6 +83,14 @@ lhd_return_tree (tree t) /* Do nothing (return NULL_TREE). */ +tree +lhd_return_null_tree_v (void) +{ + return NULL_TREE; +} + +/* Do nothing (return NULL_TREE). */ + tree lhd_return_null_tree (tree t ATTRIBUTE_UNUSED) { diff --git a/gcc/langhooks.h b/gcc/langhooks.h index 195446c702c9..4887f6dcd444 100644 --- a/gcc/langhooks.h +++ b/gcc/langhooks.h @@ -189,6 +189,9 @@ struct lang_hooks_for_decls /* Returns the chain of decls so far in the current scope level. */ tree (*getdecls) (void); + /* Returns a chain of TYPE_DECLs for built-in types. */ + tree (*builtin_type_decls) (void); + /* Returns true when we should warn for an unused global DECL. We will already have checked that it has static binding. */ bool (*warn_unused_global) (tree);