# HG changeset patch # User Frits van Bommel # Date 1235658232 -3600 # Node ID 6e7dc3caccdd1f429d2734c635afa32286fa8ad0 # Parent 125c09006ac668491f3bcf70f58112fe1819a384 Don't crash if we don't know what ABI to use. Assume some defaults instead. diff -r 125c09006ac6 -r 6e7dc3caccdd gen/abi.cpp --- 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; } }