aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree.c
diff options
context:
space:
mode:
authorJohn David Anglin <dave.anglin@nrc-cnrc.gc.ca>2006-01-16 02:26:42 +0000
committerJohn David Anglin <danglin@gcc.gnu.org>2006-01-16 02:26:42 +0000
commite21d6c600c0e4c27d89e59bed687fa5e0861f4ca (patch)
tree44be17e1f07ee6b6b75d920f34f20d927d8a0ac8 /gcc/tree.c
parentebda5160a89634f8244a26f7ad0011382fe51c17 (diff)
downloadgcc-e21d6c600c0e4c27d89e59bed687fa5e0861f4ca.zip
gcc-e21d6c600c0e4c27d89e59bed687fa5e0861f4ca.tar.gz
gcc-e21d6c600c0e4c27d89e59bed687fa5e0861f4ca.tar.bz2
re PR target/25168 (FAIL: g++.old-deja/g++.abi/cxa_vec.C execution test)
PR target/25168 * tree.c (get_file_function_name_long): Concatenate the first global object name with a string derived from the input filename of the object for type "F". From-SVN: r109740
Diffstat (limited to 'gcc/tree.c')
-rw-r--r--gcc/tree.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/gcc/tree.c b/gcc/tree.c
index 0cca757..9aaba7e 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -5867,7 +5867,26 @@ get_file_function_name_long (const char *type)
char *q;
if (first_global_object_name)
- p = first_global_object_name;
+ {
+ 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;
+ }
+ }
else
{
/* We don't have anything that we know to be unique to this translation