diff --git a/dmd2/mars.c b/dmd2/mars.c index f809295e..c4150149 100644 --- a/dmd2/mars.c +++ b/dmd2/mars.c @@ -37,13 +37,14 @@ #if !IN_LLVM #include "lib.h" #include "json.h" +#endif #if WINDOWS_SEH #include long __cdecl __ehfilter(LPEXCEPTION_POINTERS ep); #endif - +#if !IN_LLVM int response_expand(int *pargc, char ***pargv); void browse(const char *url); void getenv_setargv(const char *envvar, int *pargc, char** *pargv); @@ -1617,3 +1618,19 @@ Ldone: *pargc = argc; *pargv = argv->tdata(); } + +#if WINDOWS_SEH + +long __cdecl __ehfilter(LPEXCEPTION_POINTERS ep) +{ + //printf("%x\n", ep->ExceptionRecord->ExceptionCode); + if (ep->ExceptionRecord->ExceptionCode == STATUS_STACK_OVERFLOW) + { +#if 1 //ndef DEBUG + return EXCEPTION_EXECUTE_HANDLER; +#endif + } + return EXCEPTION_CONTINUE_SEARCH; +} + +#endif diff --git a/gen/complex.cpp b/gen/complex.cpp index bffc4965..948b617b 100644 --- a/gen/complex.cpp +++ b/gen/complex.cpp @@ -44,7 +44,7 @@ LLType* DtoComplexBaseType(Type* t) ////////////////////////////////////////////////////////////////////////////////////////// -LLConstant* DtoConstComplex(Type* _ty, long double re, long double im) +LLConstant* DtoConstComplex(Type* _ty, longdouble re, longdouble im) { TY ty = _ty->toBasetype()->ty; diff --git a/gen/complex.h b/gen/complex.h index fd3079d1..a7533e35 100644 --- a/gen/complex.h +++ b/gen/complex.h @@ -4,7 +4,7 @@ llvm::StructType* DtoComplexType(Type* t); LLType* DtoComplexBaseType(Type* t); -LLConstant* DtoConstComplex(Type* t, long double re, long double im); +LLConstant* DtoConstComplex(Type* t, longdouble re, longdouble im); LLConstant* DtoComplexShuffleMask(unsigned a, unsigned b); diff --git a/gen/toir.cpp b/gen/toir.cpp index 49fa7eb1..e9c92d92 100644 --- a/gen/toir.cpp +++ b/gen/toir.cpp @@ -412,11 +412,11 @@ DValue* ComplexExp::toElem(IRState* p) if (c->isNullValue()) { Type* t = type->toBasetype(); if (t->ty == Tcomplex32) - c = DtoConstFP(Type::tfloat32, 0); + c = DtoConstFP(Type::tfloat32, ldouble(0)); else if (t->ty == Tcomplex64) - c = DtoConstFP(Type::tfloat64, 0); + c = DtoConstFP(Type::tfloat64, ldouble(0)); else if (t->ty == Tcomplex80) - c = DtoConstFP(Type::tfloat80, 0); + c = DtoConstFP(Type::tfloat80, ldouble(0)); else assert(0); res = DtoAggrPair(DtoType(type), c, c); @@ -1879,7 +1879,7 @@ DValue* PostExp::toElem(IRState* p) else if (e1type->isfloating()) { assert(e2type->isfloating()); - LLValue* one = DtoConstFP(e1type, 1.0); + LLValue* one = DtoConstFP(e1type, ldouble(1.0)); if (op == TOKplusplus) { post = llvm::BinaryOperator::CreateFAdd(val,one,"tmp",p->scopebb()); } diff --git a/gen/tollvm.cpp b/gen/tollvm.cpp index 25e316e5..2eadbc1c 100644 --- a/gen/tollvm.cpp +++ b/gen/tollvm.cpp @@ -578,7 +578,7 @@ llvm::ConstantInt* DtoConstUbyte(unsigned char i) return LLConstantInt::get(LLType::getInt8Ty(gIR->context()), i, false); } -LLConstant* DtoConstFP(Type* t, long double value) +LLConstant* DtoConstFP(Type* t, longdouble value) { LLType* llty = DtoType(t); assert(llty->isFloatingPointTy()); diff --git a/gen/tollvm.h b/gen/tollvm.h index c6972008..bfa237f1 100644 --- a/gen/tollvm.h +++ b/gen/tollvm.h @@ -55,7 +55,7 @@ LLConstantInt* DtoConstSize_t(uint64_t); LLConstantInt* DtoConstUint(unsigned i); LLConstantInt* DtoConstInt(int i); LLConstantInt* DtoConstUbyte(unsigned char i); -LLConstant* DtoConstFP(Type* t, long double value); +LLConstant* DtoConstFP(Type* t, longdouble value); LLConstant* DtoConstString(const char*); LLConstant* DtoConstStringPtr(const char* str, const char* section = 0);