On January 25, 2016 10:47:10 PM GMT+01:00, Michael Karcher <deb...@mkarcher.dialup.fu-berlin.de> wrote: >Hello gcc developers, > >as discussed in https://ghc.haskell.org/trac/ghc/ticket/11395 (and >forwarded as PR c/69221), ghc generates non-compliant C code that is >not >compiled as intended on m68k. This is because its internal Cmm (a C-- >dialect) to C compiler needs to declare external functions (no varargs) >without fixing the type. It currently uses "unspecified-function-type* >function();" which is a quite good fit, because the argument list is >still left open, but it fixes the return type to some pointer type. >Before calling that function, the function address is put into a >function pointer of the correct type and invoked via that pointer. This >model currently works fine (possibly by accident) on all architectures >ghc supports except m68k. > >I developed a gcc patch that does not change the code generation for >conforming programs but fixes this non-conforming use-case by always >taking the actual return type in the call expression into account, even >if the function declaration to be called is known. Please comment >whether such a patch has any chance to be applied to either gcc >upstream >or gcc in Debian.
Without looking at the patch this is already how GCC should behave for all targets. Richard. >Regards, > Michael Karcher