diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2015-11-07 10:01:52 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2015-11-07 10:01:52 +0000 |
commit | 5486d91300d0540215978ecde30870e1a337910c (patch) | |
tree | 0745360532b642227c4b092f57f659a9b65ff873 /gcc/fold-const.c | |
parent | eb0b164e5f7b8fff929e73fdd0a15a6d769ebc1c (diff) | |
download | gcc-5486d91300d0540215978ecde30870e1a337910c.zip gcc-5486d91300d0540215978ecde30870e1a337910c.tar.gz gcc-5486d91300d0540215978ecde30870e1a337910c.tar.bz2 |
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
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r-- | gcc/fold-const.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c index fb613da..ae28445 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); +} |