https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89093

--- Comment #58 from Bernd Edlinger <bernd.edlinger at hotmail dot de> ---
No, sorry, the attribute on the prototype gets ignored, as the following
is compiled without generating an error:


private int test(double x)
{
  return x > 1.0;
}

static if (GNU_ARM_EABI_Unwinder)
{
    @attribute("target", ("general-regs-only"))
    private _Unwind_Reason_Code __gdc_personality(_Unwind_Action actions,
                                                  _Unwind_Exception_Class
exceptionClass,
                                                  _Unwind_Exception*
unwindHeader,
                                                  _Unwind_Context* context);
}

private _Unwind_Reason_Code __gdc_personality(_Unwind_Action actions,
                                              _Unwind_Exception_Class
exceptionClass,
                                              _Unwind_Exception* unwindHeader,
                                              _Unwind_Context* context)
{
    const(ubyte)* lsda;
    _Unwind_Ptr landingPad;
    _Unwind_Word cfa;
    int handler;

test(3.14);
    // Shortcut for phase 2 found handler for domestic exception.
    if (actions == (_UA_CLEANUP_PHASE | _UA_HANDLER_FRAME)
        && isGdcExceptionClass(exceptionClass))
    {
        ExceptionHeader.restore(unwindHeader, handler, lsda, landingPad, cfa);

but with the previous patch calling test(3.14) gives this:
../../../../gcc-trunk/libphobos/libdruntime/gcc/deh.d: In function
'__gdc_personality':
../../../../gcc-trunk/libphobos/libdruntime/gcc/deh.d:906:1: error: argument of
type 'double' not permitted with -mgeneral-regs-only
  906 | test(3.14);
      | ^

Reply via email to