See the trivial test-case below.

gcc version 16.2.1 20260819 (Red Hat 16.2.1-2) (GCC)

$ g++ -c -Wall -O2 /tmp/T.cpp -o /dev/null
In member function ‘virtual bool O_GP::cli(char*)’,
    inlined from ‘void parse_o(char*)’ at /tmp/T.cpp:31:8,
    inlined from ‘int main(int, char**)’ at /tmp/T.cpp:37:10:
/tmp/T.cpp:12:24: warning: ‘char* strncpy(char*, const char*, size_t)’ offset 8 
is out of the bounds [0, 8] [-Warray-bounds=]
   12 |                 strncpy(ylims, arg, 1);
      |                 ~~~~~~~^~~~~~~~~~~~~~~


#include <string.h>

static struct O_N {
        virtual bool cli(char*)         { return false; }
} __o_n;

static struct O_GP : public O_N {
        char ylims[32] = {0};

        bool cli(char *arg)
        {
                strncpy(ylims, arg, 1);
                return true;
        }
} __o_gp;

static struct O_N *O = &__o_gp;

#define IF(a)   if (!strcmp(n, #a))

static void parse_o(char *n)
{
        IF (n)
                O = &__o_n;
        else IF (gp)
                O = &__o_gp;
        else
                return;

        extern char *arg;
        O->cli(arg);
}

int main(int argc, char* argv[])
{
        while (*argv)
                parse_o(*argv++);
        return 0;
}

Reply via email to