https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69846
Bug ID: 69846 Summary: empty struct value fails to pass properly Product: gcc Version: 6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: hjl.tools at gmail dot com Target Milestone: --- Target: x86-64 On Linux/x86-64: [hjl@gnu-6 empty-4]$ cat x.cc struct dummy0 { }; struct dummy1 { }; struct dummy : dummy0, dummy1 { }; extern void test (struct dummy a, int m, ...); struct dummy a0; int main () { test (a0, 0, 1, 2, 3, 4, 5, 6); return 0; } [hjl@gnu-6 empty-4]$ cat check.cc #include <stdarg.h> struct dummy0 { }; struct dummy1 { }; struct dummy : dummy0, dummy1 { }; void test (struct dummy a, int m, ...) { va_list va_arglist; int i; int count = 0; if (m == 0) count++; va_start (va_arglist, m); i = va_arg (va_arglist, int); if (i == 1) count++; i = va_arg (va_arglist, int); if (i == 2) i = va_arg (va_arglist, int); count++; if (i == 3) count++; i = va_arg (va_arglist, int); if (i == 4) count++; i = va_arg (va_arglist, int); if (i == 5) count++; i = va_arg (va_arglist, int); if (i == 6) count++; va_end (va_arglist); if (count != 7) __builtin_abort (); } [hjl@gnu-6 empty-4]$ g++ -O check.cc x.cc -m32 [hjl@gnu-6 empty-4]$ ./a.out [hjl@gnu-6 empty-4]$ g++ -O check.cc x.cc [hjl@gnu-6 empty-4]$ ./a.out Aborted [hjl@gnu-6 empty-4]$