view lphobos/internal/contract.d @ 1491:360a8e8eea51

Teach stack promotion to walk the CFG when a potential reuse of an allocation is found to see if it can actually happen instead of just assuming it will. This allows it to catch cases like {{{ int i; Foo f; while (cond(i)) f = new Foo(i++); return f.value; }}} where it previously wouldn't because a phi using the allocation would appear in the condition block to propagate it to the use after the loop.
author Frits van Bommel <fvbommel wxs.nl>
date Thu, 11 Jun 2009 02:04:44 +0200
parents 373489eeaf90
children
line wrap: on
line source

module internal.contract;

import std.string: toString;
extern(C):

void exit(int);

/*void _d_assert(bool cond, uint line, char[] msg)
{
    if (!cond) {
        printf("Aborted(%u): %.*s\n", line, msg.length, msg.ptr);
        exit(1);
    }
}*/
void _d_assert(string file, uint line) {
  throw new Exception(file~":"~.toString(line)~": Assertion failed!");
}

void _d_assert_msg(string msg, string file, uint line) {
  throw new Exception(file~": "~.toString(line)~": Assertion failed: \""~msg~"\"");
}