diff options
author | Dodji Seketeli <dodji@redhat.com> | 2009-08-11 18:39:54 +0000 |
---|---|---|
committer | Dodji Seketeli <dodji@gcc.gnu.org> | 2009-08-11 20:39:54 +0200 |
commit | df4aca797b6b56d1fa5c48fcb85d069982008fcd (patch) | |
tree | 8a76d563e304f510b61166331f53feef9fb101f9 /gcc/java/lang.c | |
parent | b2c9d70fd7eb8e39aefb7d6d2329ccbd5da15b36 (diff) | |
download | gcc-df4aca797b6b56d1fa5c48fcb85d069982008fcd.zip gcc-df4aca797b6b56d1fa5c48fcb85d069982008fcd.tar.gz gcc-df4aca797b6b56d1fa5c48fcb85d069982008fcd.tar.bz2 |
re PR debug/40990 (bad .debug_pubnames entry from gcj)
Fix PR debug/40990
PR debug/40990
* lang.c (put_decl_node): Outputs different level of information
depending on the verbosity level.
From-SVN: r150659
Diffstat (limited to 'gcc/java/lang.c')
-rw-r--r-- | gcc/java/lang.c | 50 |
1 files changed, 34 insertions, 16 deletions
diff --git a/gcc/java/lang.c b/gcc/java/lang.c index 61337cc..4b46270 100644 --- a/gcc/java/lang.c +++ b/gcc/java/lang.c @@ -53,7 +53,7 @@ static bool java_post_options (const char **); static int java_handle_option (size_t scode, const char *arg, int value); static void put_decl_string (const char *, int); -static void put_decl_node (tree); +static void put_decl_node (tree, int); static void java_print_error_function (diagnostic_context *, const char *, diagnostic_info *); static int merge_init_test_initialization (void * *, void *); @@ -354,10 +354,13 @@ put_decl_string (const char *str, int len) decl_bufpos += len; } -/* Append to decl_buf a printable name for NODE. */ +/* Append to decl_buf a printable name for NODE. + Depending on VERBOSITY, more information about NODE + is printed. Read the comments of decl_printable_name in + langhooks.h for more. */ static void -put_decl_node (tree node) +put_decl_node (tree node, int verbosity) { int was_pointer = 0; if (TREE_CODE (node) == POINTER_TYPE) @@ -369,17 +372,32 @@ put_decl_node (tree node) { if (TREE_CODE (node) == FUNCTION_DECL) { + if (verbosity == 0 && DECL_NAME (node)) + /* We have been instructed to just print the bare name + of the function. */ + { + put_decl_node (DECL_NAME (node), 0); + return; + } + /* We want to print the type the DECL belongs to. We don't do that when we handle constructors. */ if (! DECL_CONSTRUCTOR_P (node) - && ! DECL_ARTIFICIAL (node) && DECL_CONTEXT (node)) + && ! DECL_ARTIFICIAL (node) && DECL_CONTEXT (node) + /* We want to print qualified DECL names only + if verbosity is higher than 1. */ + && verbosity >= 1) { - put_decl_node (TYPE_NAME (DECL_CONTEXT (node))); + put_decl_node (TYPE_NAME (DECL_CONTEXT (node)), + verbosity); put_decl_string (".", 1); } if (! DECL_CONSTRUCTOR_P (node)) - put_decl_node (DECL_NAME (node)); - if (TREE_TYPE (node) != NULL_TREE) + put_decl_node (DECL_NAME (node), verbosity); + if (TREE_TYPE (node) != NULL_TREE + /* We want to print function parameters only if verbosity + is higher than 2. */ + && verbosity >= 2) { int i = 0; tree args = TYPE_ARG_TYPES (TREE_TYPE (node)); @@ -390,19 +408,22 @@ put_decl_node (tree node) { if (i > 0) put_decl_string (",", 1); - put_decl_node (TREE_VALUE (args)); + put_decl_node (TREE_VALUE (args), verbosity); } put_decl_string (")", 1); } } else - put_decl_node (DECL_NAME (node)); + put_decl_node (DECL_NAME (node), verbosity); } else if (TYPE_P (node) && TYPE_NAME (node) != NULL_TREE) { - if (TREE_CODE (node) == RECORD_TYPE && TYPE_ARRAY_P (node)) + if (TREE_CODE (node) == RECORD_TYPE && TYPE_ARRAY_P (node) + /* Print detailed array information only if verbosity is higher + than 2. */ + && verbosity >= 2) { - put_decl_node (TYPE_ARRAY_ELEMENT (node)); + put_decl_node (TYPE_ARRAY_ELEMENT (node), verbosity); put_decl_string("[]", 2); } else if (node == promoted_byte_type_node) @@ -416,7 +437,7 @@ put_decl_node (tree node) else if (node == void_type_node && was_pointer) put_decl_string ("null", 4); else - put_decl_node (TYPE_NAME (node)); + put_decl_node (TYPE_NAME (node), verbosity); } else if (TREE_CODE (node) == IDENTIFIER_NODE) put_decl_string (IDENTIFIER_POINTER (node), IDENTIFIER_LENGTH (node)); @@ -433,10 +454,7 @@ const char * lang_printable_name (tree decl, int v) { decl_bufpos = 0; - if (v == 0 && TREE_CODE (decl) == FUNCTION_DECL) - put_decl_node (DECL_NAME (decl)); - else - put_decl_node (decl); + put_decl_node (decl, v); put_decl_string ("", 1); return decl_buf; } |