On Saturday, 1 March 2014 at 10:49:57 UTC, Johannes Pfau wrote:
On Saturday, 1 March 2014 at 09:24:40 UTC, Mike wrote:
On Saturday, 1 March 2014 at 08:56:26 UTC, Timo Sintonen wrote:
There is nothing interesting in the assembly, only this wrong
call.
This form of instruction is just missing in M4 and it gives an
invalid instruction fault. So what are we arguing about?

If this is so hard for us to find, no wonder the compiler writers
have not noticed this.

Well, I yield then to the compiler folks.  Hopefully Iain or
Johannes can provide some insight.

AFAIK the call to _Unwind_RaiseException [1] is just a normal function call [2] to a extern(C) function in a different compilation unit. It's not even a builtin so it doesn't look like a gdc bug. GCC bug is more likely but I wonder what exactly makes this case special? Why does this not happen for every function call to a extern(C) function?

Please try the following:
* Verify your --with-cpu, --with-arch, --with-tune flags for gcc configure. Also make sure that binutils is configured with the correct flags. * Have a look at the build log how gcc/deh.d is compiled. Use the same compile command, but generate assembly via -S. Then look at the asm code to check whether the compiler or the assembler/linker is to blame. * Try to reduce the example / understand why exactly this happens only in this case. * When you have a reduced example, try to port it to C and see if GCC handles it correctly.


[1] https://github.com/D-Programming-GDC/GDC/blob/master/libphobos/libdruntime/gcc/deh.d#L151 [2] https://github.com/D-Programming-GDC/GDC/blob/master/libphobos/libdruntime/gcc/unwind/arm.d#L191

I checked my code and the library code and there is no other call like this. I think there is one thing that makes this function special: if I understand correct, this function will not return. If there is some noreturn attribute somewhere this function might be handled in a different way.

Is it so that gdc does not generate any assembly directly? So this would be a bug in gcc side and I may report it there.

Reply via email to