https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91457
Martin Sebor <msebor at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2019-08-15 CC| |msebor at gcc dot gnu.org Assignee|unassigned at gcc dot gnu.org |msebor at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #2 from Martin Sebor <msebor at gcc dot gnu.org> --- Confirmed. Here's a slightly simplified/modified test case showing the difference in output between an x86_64 native GCC and an hppa2.0w-hp-hpux11.11 cross. Here too compute_objsize fails because it doesn't handle the ARRAY_REF argument in the assignment a.a[0] = 0. $ (set -x && cat t.C && gcc -O2 -S -Wall -fdump-tree-dom3=/dev/stdout t.C && /build/hppa2.0w-hp-hpux11.11/gcc-svn/gcc/xgcc -B /build/hppa2.0w-hp-hpux11.11/gcc-svn/gcc -O2 -S -Wall -fdump-tree-dom3=/dev/stdout t.C) + cat t.C struct A { char n, a[0]; A () { a[0] = 0; } }; void f (struct A*); void g (void) { struct A a; f (&a); } + /build/gcc-svn/gcc/xgcc -B /build/gcc-svn/gcc -O2 -S -Wall -fdump-tree-dom3=/dev/stdout t.C t.C: In function ‘void g()’: t.C:5:13: warning: array subscript 0 is above array bounds of ‘char [0]’ [-Warray-bounds] 5 | A () { a[0] = 0; } | ~~~^ ;; Function g (_Z1gv, funcdef_no=3, decl_uid=2317, cgraph_uid=4, symbol_order=3) ;; 1 loops found ;; ;; Loop 0 ;; header 0, latch 1 ;; depth 0, outer -1 ;; nodes: 0 1 2 ;; 2 succs { 1 } g () { struct A a; <bb 2> [local count: 1073741824]: a ={v} {CLOBBER}; a.a[0] = 0; f (&a); a ={v} {CLOBBER}; return; } + /build/hppa2.0w-hp-hpux11.11/gcc-svn/gcc/xgcc -B /build/hppa2.0w-hp-hpux11.11/gcc-svn/gcc -O2 -S -Wall -fdump-tree-dom3=/dev/stdout t.C ;; Function g (_Z1gv, funcdef_no=3, decl_uid=1911, cgraph_uid=4, symbol_order=3) ;; 1 loops found ;; ;; Loop 0 ;; header 0, latch 1 ;; depth 0, outer -1 ;; nodes: 0 1 2 ;; 2 succs { 1 } g () { struct A a; <bb 2> [local count: 1073741824]: MEM[(char *)&a + 1B] = 0; f (&a); a ={v} {CLOBBER}; return; } In constructor ‘A::A()’, inlined from ‘void g()’ at t.C:12:12: t.C:5:15: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=] 5 | A () { a[0] = 0; } | ~~~~~^~~