https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83007

            Bug ID: 83007
           Summary: [8 Regression] -Wstringop-overflow false positive
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: marxin at gcc dot gnu.org
                CC: msebor at gcc dot gnu.org
  Target Milestone: ---

Isolated from ./libgomp/target.c:

$ cat target.c
#include <string.h>
#include <stdlib.h>

  char *prefix;
  char *suffix;
void a ()
{
  char *next = 0;
  char *cur;
  char *plugin_name;
  cur = "nvptx";
  plugin_name = (char *) malloc (1 + (next ? next - cur : strlen (cur))
                                 + strlen (prefix) + strlen (suffix));
  strcpy (plugin_name, prefix);
  strncat (plugin_name, cur, next ? next - cur : strlen (cur));
  strcat (plugin_name, suffix);
}

$ ./xgcc -B. target.c -O2 -Wall
target.c: In function ‘a’:
target.c:15:3: warning: ‘strncat’ specified bound 5 equals source length
[-Wstringop-overflow=]
   strncat (plugin_name, cur, next ? next - cur : strlen (cur));
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

I think it's false positive as plugin_name is long enough.
Can you Martin please take a look?

Reply via email to