view tests/mini/asm7.d @ 1512:09734fb929c0

Make == for associative arrays test for equality, not identity. _aaEq was added to runtime/internal/aaA.d which forwards to TypeInfo_AssociativeArray.equals in genobj.d. On the codegen side, DtoAAEquals was added to gen/aa.cpp and is called from EqualExp::toElem in gen/toir.cpp. I assume that the frontend will produce an error if == is used on associative arrays of different type. This fixes DMD bug 1429.
author Christian Kamm <kamm incasoftware de>
date Sun, 21 Jun 2009 19:05:24 +0200
parents 12b423e17860
children
line wrap: on
line source

module tangotests.asm7;

// test massive label collisions (runtime uses Loverflow too)
extern(C) int printf(char*, ...);

void main()
{
    int a = add(1,2);
    int s = sub(1,2);
    assert(a == 3);
    assert(s == -1);
}

int add(int a, int b)
{
    int res;
    version (D_InlineAsm_X86)
    {
	asm
    	{
		mov EAX, a;
        	add EAX, b;
        	jo Loverflow;
        	mov res, EAX;
    	}
    }
    else version (D_InlineAsm_X86_64)
    {
	asm
	{
		mov EAX, a;
        	add EAX, b;
        	jo Loverflow;
        	mov res, EAX;
	}		
    }
    printf("%d\n",res);
    return res;
Loverflow:
    assert(0, "add overflow");
}

int sub(int a, int b)
{
    int res;
    version (D_InlineAsm_X86)
    {
    	asm
    	{
		mov EAX, a;
        	sub EAX, b;
        	jo Loverflow;
        	mov res, EAX;
    	}
    }
    else version (D_InlineAsm_X86_64)
    {
	asm
	{
		mov EAX, a;
        	sub EAX, b;
        	jo Loverflow;
        	mov res, EAX;
	}		
    }
    printf("%d\n",res);
    return res;
Loverflow:
    assert(0, "sub overflow");
    int x;
}