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

            Bug ID: 86985
           Summary: https://gcc.gnu.org/bugzilla/enter_bug.cgi?product=gcc
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: debug
          Assignee: unassigned at gcc dot gnu.org
          Reporter: osandov at osandov dot com
  Target Milestone: ---

It is currently impossible for a debugger to distinguish between a zero-length
and a flexible array given the debug info generated by GCC:

$ cat zero_length.c
struct {
        int foo;
        int bar[0];
} baz;
$ cat flexible.c
struct {
        int foo;
        int bar[];
} baz;
$ gcc -g -c zero_length.c
$ gcc -g -c flexible.c
$ gdb -batch -ex 'ptype baz' zero_length.o
type = struct {
    int foo;
    int bar[];
}
$ gdb -batch -ex 'ptype baz' flexible.o
type = struct {
    int foo;
    int bar[];
}

However, when compiling with clang:

$ clang -g -c zero_length.c
$ clang -g -c flexible.c
$ gdb -batch -ex 'ptype baz' zero_length.o
type = struct {
    int foo;
    int bar[0];
}
$ gdb -batch -ex 'ptype baz' flexible.o
type = struct {
    int foo;
    int bar[];
}

This distinction would be useful for certain tools. For example, I have a tool
which feeds the structure definitions from debug info back into a C compiler,
but this fails in some cases where zero-length and flexible array types are not
interchangable.

Reply via email to