[Bug middle-end/94580] missing warning accessing an interior flexible array member
msebor at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Apr 13 17:48:10 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94580
Martin Sebor <msebor at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |diagnostic
Blocks| |56456
--- Comment #1 from Martin Sebor <msebor at gcc dot gnu.org> ---
GCC does a little better with zero-length arrays:
$ cat t.c && gcc -O2 -S -Wall -Wextra -o/dev/stdout t.c
struct A { int n, a[0]; };
struct B { struct A a; int x; };
struct B b;
int f0 (void)
{
b.a.a[1] = 1;
int t = b.x;
b.a.a[1] = 0;
return b.x - t;
}
int f1 (struct B *p)
{
p->a.a[1] = 1;
int t = p->x;
p->a.a[1] = 0;
return p->x - t;
}
.file "t.c"
.text
t.c: In function ‘f0’:
t.c:10:8: warning: array subscript 1 is above array bounds of ‘int[0]’
[-Warray-bounds]
10 | b.a.a[1] = 0;
| ~~~~~^~~
t.c:1:19: note: while referencing ‘a’
1 | struct A { int n, a[0]; };
| ^
.p2align 4
.globl f0
.type f0, @function
f0:
.LFB0:
.cfi_startproc
movl $0, b+8(%rip)
xorl %eax, %eax
ret
.cfi_endproc
.LFE0:
.size f0, .-f0
t.c: In function ‘f1’:
t.c:18:9: warning: array subscript 1 is outside the bounds of an interior
zero-length array ‘int[0]’ [-Wzero-length-bounds]
18 | p->a.a[1] = 0;
| ~~~~~~^~~
t.c:1:19: note: while referencing ‘a’
1 | struct A { int n, a[0]; };
| ^
.p2align 4
.globl f1
.type f1, @function
f1:
.LFB1:
.cfi_startproc
movl $0, 8(%rdi)
xorl %eax, %eax
ret
.cfi_endproc
.LFE1:
.size f1, .-f1
.globl b
.bss
.align 8
.type b, @object
.size b, 8
b:
.zero 8
.ident "GCC: (GNU) 10.0.1 20200413 (experimental)"
.section .note.GNU-stack,"",@progbits
Referenced Bugs:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56456
[Bug 56456] [meta-bug] bogus/missing -Warray-bounds
More information about the Gcc-bugs
mailing list