mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-01-11 18:33:14 +01:00
Don't crash if we don't know what ABI to use. Assume some defaults instead.
This commit is contained in:
31
gen/abi.cpp
31
gen/abi.cpp
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user