Mercurial > projects > ldc
diff gen/tocall.cpp @ 1050:32ead42679d1
Fix a bug in the X86 ABI. The size of a struct is different from the size of a
pointer to that struct...
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Fri, 06 Mar 2009 21:15:13 +0100 |
parents | 6bb04dbee21f |
children | dc608dc33081 |
line wrap: on
line diff
--- a/gen/tocall.cpp Fri Mar 06 19:12:48 2009 +0100 +++ b/gen/tocall.cpp Fri Mar 06 21:15:13 2009 +0100 @@ -373,6 +373,16 @@ else { Logger::println("doing normal arguments"); + if (Logger::enabled()) { + Logger::println("Arguments so far: (%d)", (int)args.size()); + Logger::indent(); + for (size_t i = 0; i < args.size(); i++) { + Logger::cout() << *args[i] << '\n'; + } + Logger::undent(); + Logger::cout() << "Function type: " << tf->toChars() << '\n'; + Logger::cout() << "LLVM functype: " << *callable->getType() << '\n'; + } size_t n = Argument::dim(tf->parameters); @@ -386,9 +396,19 @@ assert(fnarg); DValue* argval = DtoArgument(fnarg, (Expression*)arguments->data[i]); + if (Logger::enabled()) { + Logger::cout() << "Argument before ABI: " << *argval->getRVal() << '\n'; + Logger::cout() << "Argument type before ABI: " << *DtoType(argval->getType()) << '\n'; + } + // give the ABI a say LLValue* arg = tf->fty->putParam(argval->getType(), i, argval); + if (Logger::enabled()) { + Logger::cout() << "Argument after ABI: " << *arg << '\n'; + Logger::cout() << "Argument type after ABI: " << *arg->getType() << '\n'; + } + int j = tf->fty->reverseParams ? beg + n - i - 1 : beg + i; // Hack around LDC assuming structs are in memory: