Mercurial > projects > ldc
changeset 996:6e7dc3caccdd
Don't crash if we don't know what ABI to use. Assume some defaults instead.
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Thu, 26 Feb 2009 15:23:52 +0100 |
parents | 125c09006ac6 |
children | 4f12ec3216cf |
files | gen/abi.cpp |
diffstat | 1 files changed, 30 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/gen/abi.cpp Thu Feb 26 14:51:05 2009 +0100 +++ b/gen/abi.cpp Thu Feb 26 15:23:52 2009 +0100 @@ -6,6 +6,7 @@ #include "gen/llvmhelpers.h" #include "gen/tollvm.h" #include "gen/abi.h" +#include "gen/logger.h" ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// @@ -207,6 +208,33 @@ ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// +/////////////////// Unknown targets ////////////////////////// +////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +// Some reasonable defaults for when we don't know what ABI to use. +struct UnknownTargetABI : TargetABI +{ + UnknownTargetABI() + { + // Don't push anything into retOps, assume defaults will be fine. + } + + bool returnInArg(Type* t) + { + Type* rt = t->toBasetype(); + return (rt->ty == Tstruct); + } + + bool passByRef(Type* t) + { + t = t->toBasetype(); + return (t->ty == Tstruct || t->ty == Tsarray); + } +}; + +////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// @@ -220,6 +248,7 @@ case ARCHx86_64: return new X86_64TargetABI; default: - return NULL; + Logger::cout() << "WARNING: Unknown ABI, guessing...\n"; + return new UnknownTargetABI; } }