Mercurial > projects > ldc
comparison gen/abi.cpp @ 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 | 223a679053dd |
children | c749648ed2b8 |
comparison
equal
deleted
inserted
replaced
995:125c09006ac6 | 996:6e7dc3caccdd |
---|---|
4 | 4 |
5 #include "gen/irstate.h" | 5 #include "gen/irstate.h" |
6 #include "gen/llvmhelpers.h" | 6 #include "gen/llvmhelpers.h" |
7 #include "gen/tollvm.h" | 7 #include "gen/tollvm.h" |
8 #include "gen/abi.h" | 8 #include "gen/abi.h" |
9 #include "gen/logger.h" | |
9 | 10 |
10 ////////////////////////////////////////////////////////////////////////////// | 11 ////////////////////////////////////////////////////////////////////////////// |
11 ////////////////////////////////////////////////////////////////////////////// | 12 ////////////////////////////////////////////////////////////////////////////// |
12 ///////////////////// baseclass //////////////////////////// | 13 ///////////////////// baseclass //////////////////////////// |
13 ////////////////////////////////////////////////////////////////////////////// | 14 ////////////////////////////////////////////////////////////////////////////// |
205 } | 206 } |
206 }; | 207 }; |
207 | 208 |
208 ////////////////////////////////////////////////////////////////////////////// | 209 ////////////////////////////////////////////////////////////////////////////// |
209 ////////////////////////////////////////////////////////////////////////////// | 210 ////////////////////////////////////////////////////////////////////////////// |
211 /////////////////// Unknown targets ////////////////////////// | |
212 ////////////////////////////////////////////////////////////////////////////// | |
213 ////////////////////////////////////////////////////////////////////////////// | |
214 | |
215 // Some reasonable defaults for when we don't know what ABI to use. | |
216 struct UnknownTargetABI : TargetABI | |
217 { | |
218 UnknownTargetABI() | |
219 { | |
220 // Don't push anything into retOps, assume defaults will be fine. | |
221 } | |
222 | |
223 bool returnInArg(Type* t) | |
224 { | |
225 Type* rt = t->toBasetype(); | |
226 return (rt->ty == Tstruct); | |
227 } | |
228 | |
229 bool passByRef(Type* t) | |
230 { | |
231 t = t->toBasetype(); | |
232 return (t->ty == Tstruct || t->ty == Tsarray); | |
233 } | |
234 }; | |
235 | |
236 ////////////////////////////////////////////////////////////////////////////// | |
237 ////////////////////////////////////////////////////////////////////////////// | |
210 ////////////////////////////////////////////////////////////////////////////// | 238 ////////////////////////////////////////////////////////////////////////////// |
211 ////////////////////////////////////////////////////////////////////////////// | 239 ////////////////////////////////////////////////////////////////////////////// |
212 ////////////////////////////////////////////////////////////////////////////// | 240 ////////////////////////////////////////////////////////////////////////////// |
213 | 241 |
214 TargetABI * TargetABI::getTarget() | 242 TargetABI * TargetABI::getTarget() |
218 case ARCHx86: | 246 case ARCHx86: |
219 return new X86TargetABI; | 247 return new X86TargetABI; |
220 case ARCHx86_64: | 248 case ARCHx86_64: |
221 return new X86_64TargetABI; | 249 return new X86_64TargetABI; |
222 default: | 250 default: |
223 return NULL; | 251 Logger::cout() << "WARNING: Unknown ABI, guessing...\n"; |
224 } | 252 return new UnknownTargetABI; |
225 } | 253 } |
254 } |