https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70649
Bug ID: 70649 Summary: [6 Regression] Incorrect C++ warning on zero-sized array passing Product: gcc Version: 6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: hjl.tools at gmail dot com CC: jason at redhat dot com Target Milestone: --- [hjl@gnu-6 pr60336d]$ cat x.i struct dummy0 { int i; }; struct dummy { struct dummy0 d[0]; }; extern void fun(struct dummy, int); void foo (void) { struct dummy d; fun(d, 1); } [hjl@gnu-6 pr60336d]$ g++ -S -Wabi=9 x.i [hjl@gnu-6 pr60336d]$ cat x.s .file "x.i" .text .globl _Z3foov .type _Z3foov, @function _Z3foov: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl $1, %edi call _Z3fun5dummyi nop popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE0: .size _Z3foov, .-_Z3foov .ident "GCC: (GNU) 5.3.1 20160406 (Red Hat 5.3.1-6)" .section .note.GNU-stack,"",@progbits [hjl@gnu-6 pr60336d]$ /export/build/gnu/gcc-x32/build-x86_64-linux/gcc/xg++ -B/export/build/gnu/gcc-x32/build-x86_64-linux/gcc/ -S -Wabi=9 x.i x.i: In function ‘void foo()’: x.i:8:12: warning: call to ‘fun’: empty class ‘dummy’ parameter passing ABI changes in -fabi-version=10 (GCC 6) [-Wabi] fun(d, 1); ^ [hjl@gnu-6 pr60336d]$ cat x.s .file "x.i" .text .globl _Z3foov .type _Z3foov, @function _Z3foov: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl $1, %edi call _Z3fun5dummyi nop popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE0: .size _Z3foov, .-_Z3foov .ident "GCC: (GNU) 6.0.0 20160413 (experimental)" .section .note.GNU-stack,"",@progbits [hjl@gnu-6 pr60336d]$ The warning is incorrect since there is no change in zero-sized array passing.