[Bug target/69846] New: empty struct value fails to pass properly

hjl.tools at gmail dot com gcc-bugzilla@gcc.gnu.org
Tue Feb 16 20:51:00 GMT 2016


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]$


More information about the Gcc-bugs mailing list