From: aoliva Date: Mon, 26 Nov 2007 06:38:30 +0000 (+0000) Subject: * dwarf2asm.c (splay_tree_compare_strings): New function. X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=commitdiff_plain;h=d9ab39c7c4aa77720c709cf0d0e563e382723a64;hp=1abd28c166a11a00301a69be114996b6266cf096 * dwarf2asm.c (splay_tree_compare_strings): New function. (dw2_force_const_mem): Use it. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@130430 138bc75d-0d04-0410-961f-82ee72b054a4 --- 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 + * dwarf2asm.c (splay_tree_compare_strings): New function. + (dw2_force_const_mem): Use it. + +2007-11-26 Alexandre Oliva + * tree.c (type_hash_add): Don't violate strict aliasing rules. 2007-11-26 Alexandre Oliva 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);