Hi,
As proposed in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63853
this patch replaces some function calls with pointer arithmetic.
I didn't mention PR in Changelog, as they are not actually related.
Ok for trunk?
gcc/
* gcc.c (handle_foffload_option): Remove unnecessary calls to strchr,
strlen, strncpy.
* lto-wrapper.c (append_offload_options): Likewise.
---
gcc/gcc.c | 24 +---
gcc/lto-wrapper.c | 2 +-
2 files changed, 14 insertions(+), 12 deletions(-)
diff --git a/gcc/gcc.c b/gcc/gcc.c
index 653ca8d..4731eec 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -3384,11 +3384,11 @@ handle_foffload_option (const char *arg)
{
next = strchr (cur, ',');
if (next == NULL)
- next = strchr (cur, '\0');
+ next = end;
next = (next end) ? end : next;
target = XNEWVEC (char, next - cur + 1);
- strncpy (target, cur, next - cur);
+ memcpy (target, cur, next - cur);
target[next - cur] = '\0';
/* If 'disable' is passed to the option, stop parsing the option and
clean
@@ -3408,8 +3408,7 @@ handle_foffload_option (const char *arg)
if (n == NULL)
n = strchr (c, '\0');
- if (strlen (target) == (size_t) (n - c)
- strncmp (target, c, n - c) == 0)
+ if (next - cur == n - c strncmp (target, c, n - c) == 0)
break;
c = *n ? n + 1 : NULL;
@@ -3420,7 +3419,10 @@ handle_foffload_option (const char *arg)
target);
if (!offload_targets)
- offload_targets = xstrdup (target);
+ {
+ offload_targets = target;
+ target = NULL;
+ }
else
{
/* Check that the target hasn't already presented in the list. */
@@ -3431,8 +3433,7 @@ handle_foffload_option (const char *arg)
if (n == NULL)
n = strchr (c, '\0');
- if (strlen (target) == (size_t) (n - c)
- strncmp (c, target, n - c) == 0)
+ if (next - cur == n - c strncmp (c, target, n - c) == 0)
break;