From: geoffk Date: Wed, 1 Nov 2006 05:06:12 +0000 (+0000) Subject: In gcc/: X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=db85cc4fe2fd064f4ccf38b0f29e1c49993119d0;p=thirdparty%2Fgcc.git In gcc/: * coverage.c (coverage_checksum_string): Update comment. * dwarf2out.c (switch_to_eh_frame_section): Update for removal of get_file_function_name. * cgraphunit.c (cgraph_build_static_cdtor): Update for rename of get_file_function_name_long. * tree.c (get_file_function_name): Rename from get_file_function_name_long; improve comment; handle 'I' and 'D' specially when the target has ctor/dtor support; remove special handling for 'F'. (get_file_function_name): Remove. * tree.h (get_file_function_name): Rename from get_file_function_name_long. (get_file_function_name): Remove prototype. In gcc/cp/: * name-lookup.c (get_anonymous_namespace_name): New. (push_namespace_with_attribs): Use get_anonymous_namespace_name. * decl2.c (start_objects): Update for rename of get_file_function_name_long. In gcc/fortran/: * trans-decl.c (gfc_generate_constructors): Update for removal of get_file_function_name. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@118360 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bae32ee33051..c5cf3b556d98 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,19 @@ +2006-10-31 Geoffrey Keating + + * coverage.c (coverage_checksum_string): Update comment. + * dwarf2out.c (switch_to_eh_frame_section): Update for removal + of get_file_function_name. + * cgraphunit.c (cgraph_build_static_cdtor): Update for rename + of get_file_function_name_long. + * tree.c (get_file_function_name): Rename from + get_file_function_name_long; improve comment; handle 'I' and 'D' + specially when the target has ctor/dtor support; remove special + handling for 'F'. + (get_file_function_name): Remove. + * tree.h (get_file_function_name): Rename from + get_file_function_name_long. + (get_file_function_name): Remove prototype. + 2006-10-31 Geoffrey Keating * config/i386/darwin.h (PREFERRED_DEBUGGING_TYPE): Remove. diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c index 309fb73f0123..242738a44697 100644 --- a/gcc/cgraphunit.c +++ b/gcc/cgraphunit.c @@ -1675,7 +1675,7 @@ cgraph_build_static_cdtor (char which, tree body, int priority) tree decl, name, resdecl; sprintf (which_buf, "%c_%d", which, counter++); - name = get_file_function_name_long (which_buf); + name = get_file_function_name (which_buf); decl = build_decl (FUNCTION_DECL, name, build_function_type (void_type_node, void_list_node)); diff --git a/gcc/coverage.c b/gcc/coverage.c index 5eaf4888fe3e..399eb6ea6c6a 100644 --- a/gcc/coverage.c +++ b/gcc/coverage.c @@ -433,7 +433,7 @@ coverage_checksum_string (unsigned chksum, const char *string) char *dup = NULL; /* Look for everything that looks if it were produced by - get_file_function_name_long and zero out the second part + get_file_function_name and zero out the second part that may result from flag_random_seed. This is not critical as the checksums are used only for sanity checking. */ for (i = 0; string[i]; i++) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 75c2fd4314cd..27d86cd49bac 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2006-10-31 Geoffrey Keating + + * name-lookup.c (get_anonymous_namespace_name): New. + (push_namespace_with_attribs): Use get_anonymous_namespace_name. + * decl2.c (start_objects): Update for rename of + get_file_function_name_long. + 2006-10-30 Dirk Mueller PR c++/28704 diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 3b23638e71ad..e4b5c00a31e5 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -2324,7 +2324,7 @@ start_objects (int method_type, int initp) sprintf (type, "%c", method_type); fndecl = build_lang_decl (FUNCTION_DECL, - get_file_function_name_long (type), + get_file_function_name (type), build_function_type (void_type_node, void_list_node)); start_preparsed_function (fndecl, /*attrs=*/NULL_TREE, SF_PRE_PARSED); diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index 3016bb0ad560..92d398ae5cc9 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -61,6 +61,24 @@ tree global_namespace; unit. */ static GTY(()) tree anonymous_namespace_name; +/* Initialise anonymous_namespace_name if necessary, and return it. */ + +static tree +get_anonymous_namespace_name(void) +{ + if (!anonymous_namespace_name) + { + /* The anonymous namespace has to have a unique name + if typeinfo objects are being compared by name. */ + if (! flag_weak || ! SUPPORTS_ONE_ONLY) + anonymous_namespace_name = get_file_function_name ("N"); + else + /* The demangler expects anonymous namespaces to be called + something starting with '_GLOBAL__N_'. */ + anonymous_namespace_name = get_identifier ("_GLOBAL__N_1"); + } + return anonymous_namespace_name; +} /* Compute the chain index of a binding_entry given the HASH value of its name and the total COUNT of chains. COUNT is assumed to be a power @@ -3011,11 +3029,7 @@ push_namespace_with_attribs (tree name, tree attributes) if (anon) { - /* The name of anonymous namespace is unique for the translation - unit. */ - if (!anonymous_namespace_name) - anonymous_namespace_name = get_file_function_name ('N'); - name = anonymous_namespace_name; + name = get_anonymous_namespace_name(); d = IDENTIFIER_NAMESPACE_VALUE (name); if (d) /* Reopening anonymous namespace. */ diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 13c0e2b2794c..0aaf70e7431a 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -2030,7 +2030,7 @@ switch_to_eh_frame_section (void) /* We have no special eh_frame section. Put the information in the data section and emit special labels to guide collect2. */ switch_to_section (data_section); - label = get_file_function_name ('F'); + label = get_file_function_name ("F"); ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE)); targetm.asm_out.globalize_label (asm_out_file, IDENTIFIER_POINTER (label)); diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index e9ba75fe3b4b..f07fcc941605 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2006-10-31 Geoffrey Keating + + * trans-decl.c (gfc_generate_constructors): Update for removal + of get_file_function_name. + 2006-11-01 Bernhard Fischer PR fortran/29537 diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index 82315b708fcd..d81b829e5fa2 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -3299,7 +3299,7 @@ gfc_generate_constructors (void) if (gfc_static_ctors == NULL_TREE) return; - fnname = get_file_function_name ('I'); + fnname = get_file_function_name ("I"); type = build_function_type (void_type_node, gfc_chainon_list (NULL_TREE, void_type_node)); diff --git a/gcc/tree.c b/gcc/tree.c index 4ee65f0e1b2e..d5e3f3f9eeca 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -6042,41 +6042,48 @@ clean_symbol_name (char *p) *p = '_'; } -/* Generate a name for a function unique to this translation unit. +/* Generate a name for a special-purpose function function. + The generated name may need to be unique across the whole link. TYPE is some string to identify the purpose of this function to the - linker or collect2. */ + linker or collect2; it must start with an uppercase letter, + one of: + I - for constructors + D - for destructors + N - for C++ anonymous namespaces + F - for DWARF unwind frame information. */ tree -get_file_function_name_long (const char *type) +get_file_function_name (const char *type) { char *buf; const char *p; char *q; + /* If we already have a name we know to be unique, just use that. */ if (first_global_object_name) + p = first_global_object_name; + /* If the target is handling the constructors/destructors, they + will be local to this file and the name is only necessary for + debugging purposes. */ + else if ((type[0] == 'I' || type[0] == 'D') && targetm.have_ctors_dtors) { - p = first_global_object_name; - - /* For type 'F', the generated name must be unique not only to this - translation unit but also to any given link. Since global names - can be overloaded, we concatenate the first global object name - with a string derived from the file name of this object. */ - if (!strcmp (type, "F")) - { - const char *file = main_input_filename; - - if (! file) - file = input_filename; - - q = alloca (strlen (p) + 10); - sprintf (q, "%s_%08X", p, crc32_string (0, file)); - - p = q; - } + const char *file = main_input_filename; + if (! file) + file = input_filename; + /* Just use the file's basename, because the full pathname + might be quite long. */ + p = strrchr (file, '/'); + if (p) + p++; + else + p = file; + p = q = ASTRDUP (p); + clean_symbol_name (q); } else { - /* We don't have anything that we know to be unique to this translation + /* Otherwise, the name must be unique across the entire link. + We don't have anything that we know to be unique to this translation unit, so use what we do have and throw in some randomness. */ unsigned len; const char *name = weak_global_object_name; @@ -6108,20 +6115,6 @@ get_file_function_name_long (const char *type) return get_identifier (buf); } - -/* If KIND=='I', return a suitable global initializer (constructor) name. - If KIND=='D', return a suitable global clean-up (destructor) name. */ - -tree -get_file_function_name (int kind) -{ - char p[2]; - - p[0] = kind; - p[1] = 0; - - return get_file_function_name_long (p); -} #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007) diff --git a/gcc/tree.h b/gcc/tree.h index 6c8133f61862..013232bc1b7b 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -4150,7 +4150,7 @@ extern GTY(()) const char * current_function_func_begin_label; /* In tree.c */ extern unsigned crc32_string (unsigned, const char *); extern void clean_symbol_name (char *); -extern tree get_file_function_name_long (const char *); +extern tree get_file_function_name (const char *); extern tree get_callee_fndecl (tree); extern void change_decl_assembler_name (tree, tree); extern int type_num_arguments (tree); @@ -4488,10 +4488,6 @@ extern void gimplify_function_tree (tree); extern const char *get_name (tree); extern tree unshare_expr (tree); extern void sort_case_labels (tree); - -/* If KIND=='I', return a suitable global initializer (constructor) name. - If KIND=='D', return a suitable global clean-up (destructor) name. */ -extern tree get_file_function_name (int); /* Interface of the DWARF2 unwind info support. */