aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorGeoffrey Keating <geoffk@apple.com>2006-11-01 05:06:12 +0000
committerGeoffrey Keating <geoffk@gcc.gnu.org>2006-11-01 05:06:12 +0000
commit5880f14fe8b5809110d1c3858c9259641fd5b92d (patch)
tree8c979fbf4f8d2c543fdfc9e8d717c274dd8a9eb5 /gcc
parent4d04fa0539961487bc95baa222c100afbc6fdf30 (diff)
downloadgcc-5880f14fe8b5809110d1c3858c9259641fd5b92d.zip
gcc-5880f14fe8b5809110d1c3858c9259641fd5b92d.tar.gz
gcc-5880f14fe8b5809110d1c3858c9259641fd5b92d.tar.bz2
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. From-SVN: r118360
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog16
-rw-r--r--gcc/cgraphunit.c2
-rw-r--r--gcc/coverage.c2
-rw-r--r--gcc/cp/ChangeLog7
-rw-r--r--gcc/cp/decl2.c2
-rw-r--r--gcc/cp/name-lookup.c24
-rw-r--r--gcc/dwarf2out.c2
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/trans-decl.c2
-rw-r--r--gcc/tree.c65
-rw-r--r--gcc/tree.h6
11 files changed, 82 insertions, 51 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bae32ee..c5cf3b5 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,21 @@
2006-10-31 Geoffrey Keating <geoffk@apple.com>
+ * 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 <geoffk@apple.com>
+
* config/i386/darwin.h (PREFERRED_DEBUGGING_TYPE): Remove.
* config/darwin.h (PREFERRED_DEBUGGING_TYPE): Set to DWARF2_DEBUG.
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
index 309fb73..242738a 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 5eaf488..399eb6e 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 75c2fd4..27d86cd 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,10 @@
+2006-10-31 Geoffrey Keating <geoffk@apple.com>
+
+ * 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 <dmueller@suse.de>
PR c++/28704
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index 3b23638..e4b5c00 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 3016bb0..92d398a 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 13c0e2b..0aaf70e 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 e9ba75f..f07fcc9 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,8 @@
+2006-10-31 Geoffrey Keating <geoffk@apple.com>
+
+ * trans-decl.c (gfc_generate_constructors): Update for removal
+ of get_file_function_name.
+
2006-11-01 Bernhard Fischer <aldot@gcc.gnu.org>
PR fortran/29537
diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c
index 82315b7..d81b829 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 4ee65f0..d5e3f3f 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 6c8133f..013232b 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. */