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;