For the lulz: ddmd vs libdparse lexer timings

Daniel Murphy via Digitalmars-d digitalmars-d at puremagic.com
Tue Jan 6 21:27:18 PST 2015


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);
}



More information about the Digitalmars-d mailing list