Is there something wrong with this code or have I found a dmc bug?

#include <stdarg.h>
#include <assert.h>

struct S16 {
   char val_0;
   unsigned char val_1;
   int val_2;
   unsigned val_3;
   long long val_4;
   unsigned val_5;
};

void checkValues(int arg0, unsigned long long arg1, long long arg2, int arg3, S16 arg4, unsigned arg5, double arg6);
void cppvararg(int arg0, unsigned long long arg1, ...)
{
   long long arg2;
   int arg3;
   S16 arg4;
   unsigned arg5;
   double arg6;
   va_list va;
   va_start(va, arg1);
   // __asm nop;
   arg2 = va_arg(va, long long);
   arg3 = va_arg(va, int);
   arg4 = va_arg(va, S16);
   arg5 = va_arg(va, unsigned);
   arg6 = va_arg(va, double);
   va_end(va);
   checkValues(arg0, arg1, arg2, arg3, arg4, arg5, arg6);
}


void checkValues(int arg0, unsigned long long arg1, long long arg2, int arg3, S16 arg4, unsigned arg5, double arg6)
{
   assert(arg0 == 99);
   assert(arg1 == 99);
   assert(arg2 == 99);
   assert(arg3 == 99);
   assert(arg4.val_0 == 99);
   assert(arg4.val_1 == 99);
   assert(arg4.val_2 == 99);
   assert(arg4.val_3 == 99);
   assert(arg4.val_4 == 99);
   assert(arg4.val_5 == 99);
   assert(arg5 == 99);
   assert(arg6 == 0);
}

void main()
{
   int arg0 = 99;
   unsigned long long arg1 = 99;
   long long arg2 = 99;
   int arg3 = 99;
   S16 arg4 = {99, 99, 99, 99, 99, 99};
   unsigned arg5 = 99;
   double arg6 = 0;
   // dvararg(arg0, arg1, arg2, arg3, arg4, arg5, arg6);
   cppvararg(arg0, arg1, arg2, arg3, arg4, arg5, arg6);
}

Reply via email to