diff --git a/src/backend/aa.c b/src/backend/aa.c index d079deb8a5ee..9231b8813ace 100644 --- a/src/backend/aa.c +++ b/src/backend/aa.c @@ -11,11 +11,13 @@ #include #include #include -#include #include "tinfo.h" #include "aa.h" +static char __file__[] = __FILE__; /* for tassert.h */ +#include "tassert.h" + // Implementation of associative array // Auto-rehash and pre-allocate - Dave Fladebo diff --git a/src/backend/divcoeff.c b/src/backend/divcoeff.c index 0371c3d035a2..1fc62a008e02 100644 --- a/src/backend/divcoeff.c +++ b/src/backend/divcoeff.c @@ -11,7 +11,9 @@ Source: https://github.com/dlang/dmd/blob/master/src/backend/divcoeff.c */ #include -#include + +static char __file__[] = __FILE__; /* for tassert.h */ +#include "tassert.h" typedef unsigned long long ullong; diff --git a/src/backend/util2.c b/src/backend/util2.c index ba00a00ddc65..43b0e4d95236 100644 --- a/src/backend/util2.c +++ b/src/backend/util2.c @@ -54,6 +54,8 @@ void util_assert(const char *file, int line) { fflush(stdout); printf("Internal error: %s %d\n",file,line); + printf("This is a compiler bug, please report it via " + "https://issues.dlang.org/enter_bug.cgi\n"); err_exit(); #if __clang__ __builtin_unreachable(); diff --git a/src/mars.d b/src/mars.d index 6a8b6e134354..f263b47e3c80 100644 --- a/src/mars.d +++ b/src/mars.d @@ -1574,6 +1574,7 @@ int main() { import core.memory; import core.runtime; + import core.exception; version (GC) { @@ -1604,6 +1605,24 @@ int main() dmd_coverSetMerge(true); } + assertHandler = (string file, size_t line, string msg) nothrow { + import ddmd.errors; + import core.stdc.stdio; + + fprintf(stderr, "Fatal failure on line %d in file '%s'", + line, file.ptr); + + if (msg.length) + fprintf(stderr, ": %s\n", msg.ptr); + else + fprintf(stderr, "\n"); + + fprintf(stderr, "This is a compiler bug, please report it via " ~ + "https://issues.dlang.org/enter_bug.cgi\n"); + + exit(EXIT_FAILURE); + }; + auto args = Runtime.cArgs(); return tryMain(args.argc, cast(const(char)**)args.argv); }