From 5486d91300d0540215978ecde30870e1a337910c Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Sat, 7 Nov 2015 10:01:52 +0000 Subject: [PATCH] Move c_getstr to fold-const.c Upcoming patches to fold-const-call.c want to use c_getstr, which is currently defined in builtins.c. The function doesn't really do anything related to built-ins, and I'd rather not make fold-const-call.c depend on builtins.c and builtins.c depend on fold-const-call.c, so this patch moves the function to fold-const.c instead. Tested on x86_64-linux-gnu, aarch64-linux-gnu and arm-linux-gnueabi. gcc/ * builtins.h (c_getstr): Move to... * fold-const.h (c_getstr): ...here. * builtins.c (c_getstr): Move to... * fold-const.c (c_getstr): ...here. From-SVN: r229919 --- gcc/ChangeLog | 7 +++++++ gcc/builtins.c | 21 --------------------- gcc/builtins.h | 1 - gcc/fold-const.c | 21 +++++++++++++++++++++ gcc/fold-const.h | 1 + 5 files changed, 29 insertions(+), 22 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 41ed6307a37..ab06aab2204 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2015-11-07 Richard Sandiford + + * builtins.h (c_getstr): Move to... + * fold-const.h (c_getstr): ...here. + * builtins.c (c_getstr): Move to... + * fold-const.c (c_getstr): ...here. + 2015-11-07 Richard Sandiford * builtins.def (BUILTIN_RINT, BUILTIN_RINTF, BUILTIN_RINTL): Use diff --git a/gcc/builtins.c b/gcc/builtins.c index 8f0717c7e1b..69c56e75cd5 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -616,27 +616,6 @@ c_strlen (tree src, int only_value) return ssize_int (strlen (ptr + offset)); } -/* Return a char pointer for a C string if it is a string constant - or sum of string constant and integer constant. */ - -const char * -c_getstr (tree src) -{ - tree offset_node; - - src = string_constant (src, &offset_node); - if (src == 0) - return 0; - - if (offset_node == 0) - return TREE_STRING_POINTER (src); - else if (!tree_fits_uhwi_p (offset_node) - || compare_tree_int (offset_node, TREE_STRING_LENGTH (src) - 1) > 0) - return 0; - - return TREE_STRING_POINTER (src) + tree_to_uhwi (offset_node); -} - /* Return a constant integer corresponding to target reading GET_MODE_BITSIZE (MODE) bits from string constant STR. */ diff --git a/gcc/builtins.h b/gcc/builtins.h index cce9e7507a2..b0396322fa0 100644 --- a/gcc/builtins.h +++ b/gcc/builtins.h @@ -87,7 +87,6 @@ extern bool is_simple_builtin (tree); extern bool is_inexpensive_builtin (tree); extern bool readonly_data_expr (tree exp); -extern const char *c_getstr (tree); extern bool init_target_chars (void); extern unsigned HOST_WIDE_INT target_newline; extern unsigned HOST_WIDE_INT target_percent; diff --git a/gcc/fold-const.c b/gcc/fold-const.c index fb613daca9a..ae284452920 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -14398,3 +14398,24 @@ fold_build_pointer_plus_hwi_loc (location_t loc, tree ptr, HOST_WIDE_INT off) return fold_build2_loc (loc, POINTER_PLUS_EXPR, TREE_TYPE (ptr), ptr, size_int (off)); } + +/* Return a char pointer for a C string if it is a string constant + or sum of string constant and integer constant. */ + +const char * +c_getstr (tree src) +{ + tree offset_node; + + src = string_constant (src, &offset_node); + if (src == 0) + return 0; + + if (offset_node == 0) + return TREE_STRING_POINTER (src); + else if (!tree_fits_uhwi_p (offset_node) + || compare_tree_int (offset_node, TREE_STRING_LENGTH (src) - 1) > 0) + return 0; + + return TREE_STRING_POINTER (src) + tree_to_uhwi (offset_node); +} diff --git a/gcc/fold-const.h b/gcc/fold-const.h index 97d18cf0e22..94a21b7652a 100644 --- a/gcc/fold-const.h +++ b/gcc/fold-const.h @@ -180,6 +180,7 @@ extern tree exact_inverse (tree, tree); extern tree const_unop (enum tree_code, tree, tree); extern tree const_binop (enum tree_code, tree, tree, tree); extern bool negate_mathfn_p (enum built_in_function); +extern const char *c_getstr (tree); /* Return OFF converted to a pointer offset type suitable as offset for POINTER_PLUS_EXPR. Use location LOC for this conversion. */ -- 2.30.2