2017-06-30 Nathan Sidwell * ggc.h (empty_string): Delete. * cfgexpand.c (expand_asm_stmt): Use plain "". * optabs.c (expand_asm_memory_barrier): Likewise. * stringpool.c (empty_string): Delete. (digit_vector, digit_string): Delete. (ggc_alloc_string): Use plain "", don't optimize single digit strings. Use ggc_alloc_atomic. Index: cfgexpand.c =================================================================== --- cfgexpand.c (revision 249835) +++ cfgexpand.c (working copy) @@ -3165,7 +3165,7 @@ expand_asm_stmt (gasm *stmt) rtx body = gen_rtx_ASM_OPERANDS ((noutputs == 0 ? VOIDmode : GET_MODE (output_rvec[0])), ggc_strdup (gimple_asm_string (stmt)), - empty_string, 0, argvec, constraintvec, + "", 0, argvec, constraintvec, labelvec, locus); MEM_VOLATILE_P (body) = gimple_asm_volatile_p (stmt); Index: ggc.h =================================================================== --- ggc.h (revision 249848) +++ ggc.h (working copy) @@ -24,9 +24,6 @@ along with GCC; see the file COPYING3. /* Symbols are marked with `ggc' for `gcc gc' so as not to interfere with an external gc library that might be linked in. */ -/* Constants for general use. */ -extern const char empty_string[]; /* empty string */ - /* Internal functions and data structures used by the GTY machinery, including the generated gt*.[hc] files. */ Index: optabs.c =================================================================== --- optabs.c (revision 249835) +++ optabs.c (working copy) @@ -6278,7 +6278,7 @@ expand_asm_memory_barrier (void) { rtx asm_op, clob; - asm_op = gen_rtx_ASM_OPERANDS (VOIDmode, empty_string, empty_string, 0, + asm_op = gen_rtx_ASM_OPERANDS (VOIDmode, "", "", 0, rtvec_alloc (0), rtvec_alloc (0), rtvec_alloc (0), UNKNOWN_LOCATION); MEM_VOLATILE_P (asm_op) = 1; Index: stringpool.c =================================================================== --- stringpool.c (revision 249835) +++ stringpool.c (working copy) @@ -30,18 +30,6 @@ along with GCC; see the file COPYING3. #include "coretypes.h" #include "tree.h" -/* The "" allocated string. */ -const char empty_string[] = ""; - -/* Character strings, each containing a single decimal digit. - Written this way to save space. */ -static const char digit_vector[] = { - '0', 0, '1', 0, '2', 0, '3', 0, '4', 0, - '5', 0, '6', 0, '7', 0, '8', 0, '9', 0 -}; - -#define digit_string(d) (digit_vector + ((d) * 2)) - struct ht *ident_hash; static hashnode alloc_node (cpp_hash_table *); @@ -82,19 +70,16 @@ alloc_node (cpp_hash_table *table ATTRIB const char * ggc_alloc_string (const char *contents, int length MEM_STAT_DECL) { - char *result; - if (length == -1) length = strlen (contents); - if (length == 0) - return empty_string; - if (length == 1 && ISDIGIT (contents[0])) - return digit_string (contents[0] - '0'); + if (!length) + return ""; - result = (char *) ggc_internal_cleared_alloc (length + 1 PASS_MEM_STAT); + char *result = (char *) ggc_alloc_atomic (length + 1); memcpy (result, contents, length); result[length] = '\0'; + return (const char *) result; }