Don't crash if we don't know what ABI to use. Assume some defaults instead.

This commit is contained in:
Frits van Bommel
2009-02-26 15:23:52 +01:00
parent 695fc3f5c3
commit 001f83a296

View File

@@ -6,6 +6,7 @@
#include "gen/llvmhelpers.h"
#include "gen/tollvm.h"
#include "gen/abi.h"
#include "gen/logger.h"
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
@@ -205,6 +206,33 @@ struct X86_64TargetABI : TargetABI
}
};
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
/////////////////// 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 @@ TargetABI * TargetABI::getTarget()
case ARCHx86_64:
return new X86_64TargetABI;
default:
return NULL;
Logger::cout() << "WARNING: Unknown ABI, guessing...\n";
return new UnknownTargetABI;
}
}