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;
     }
 }