summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandre Oliva <aoliva@redhat.com>2007-11-26 06:38:30 +0000
committerAlexandre Oliva <aoliva@gcc.gnu.org>2007-11-26 06:38:30 +0000
commitdc1327cda3ef343633313e19982dd5634dbc5028 (patch)
tree8603c261d78b0df67dcd921e5c5d0bcdd1c7cb45
parent0043f60679c6c6b8b76acb75cf8a7e363aca1d06 (diff)
downloadgcc-dc1327cda3ef343633313e19982dd5634dbc5028.tar.gz
dwarf2asm.c (splay_tree_compare_strings): New function.
* dwarf2asm.c (splay_tree_compare_strings): New function. (dw2_force_const_mem): Use it. From-SVN: r130430
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/dwarf2asm.c29
2 files changed, 33 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 83a3ee87289..36c1dd8f92a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,10 @@
2007-11-26 Alexandre Oliva <aoliva@redhat.com>
+ * dwarf2asm.c (splay_tree_compare_strings): New function.
+ (dw2_force_const_mem): Use it.
+
+2007-11-26 Alexandre Oliva <aoliva@redhat.com>
+
* tree.c (type_hash_add): Don't violate strict aliasing rules.
2007-11-26 Alexandre Oliva <aoliva@redhat.com>
diff --git a/gcc/dwarf2asm.c b/gcc/dwarf2asm.c
index ac789f97038..11903fe81a9 100644
--- a/gcc/dwarf2asm.c
+++ b/gcc/dwarf2asm.c
@@ -701,6 +701,31 @@ static GTY(()) int dw2_const_labelno;
# define USE_LINKONCE_INDIRECT 0
#endif
+/* Comparison function for a splay tree in which the keys are strings.
+ K1 and K2 have the dynamic type "const char *". Returns <0, 0, or
+ >0 to indicate whether K1 is less than, equal to, or greater than
+ K2, respectively. */
+
+static int
+splay_tree_compare_strings (splay_tree_key k1, splay_tree_key k2)
+{
+ const char *s1 = (const char *)k1;
+ const char *s2 = (const char *)k2;
+ int ret;
+
+ if (s1 == s2)
+ return 0;
+
+ ret = strcmp (s1, s2);
+
+ /* The strings are always those from IDENTIFIER_NODEs, and,
+ therefore, we should never have two copies of the same
+ string. */
+ gcc_assert (ret);
+
+ return ret;
+}
+
/* Put X, a SYMBOL_REF, in memory. Return a SYMBOL_REF to the allocated
memory. Differs from force_const_mem in that a single pool is used for
the entire unit of translation, and the memory is not guaranteed to be
@@ -715,7 +740,9 @@ dw2_force_const_mem (rtx x, bool public)
tree decl;
if (! indirect_pool)
- indirect_pool = splay_tree_new_ggc (splay_tree_compare_pointers);
+ /* We use strcmp, rather than just comparing pointers, so that the
+ sort order will not depend on the host system. */
+ indirect_pool = splay_tree_new_ggc (splay_tree_compare_strings);
gcc_assert (GET_CODE (x) == SYMBOL_REF);