On Sun, Mar 17, 2019 at 2:04 PM Thomas Koenig <tkoe...@netcologne.de> wrote:
>
> Hello world,
>
> this fixes a 7/8/9 regression. The problem is that front-end inlining
> of matmul could generate calls to _gfortran_runtime_error which were
> called as non-variadic.  This fixes the problem by setting the
> backend_decl on the resovled symbol, so it always uses the right one.
>
> Putting it into the resolution stage seems a bit strange, but I tried
> several other methods such as putting it into the global symbol table,
> and nothing else I tried worked.
>
> You can check on x86_64 if the patch works by doing
>
> $ cat nn.f90
> module x
> contains
>    subroutine mm(a,b,c)
>      real, dimension(:) :: a, c
>      real, dimension(:,:) :: b
>      c = matmul(a,b)
>    end subroutine mm
> end module x
>
> $ gfortran -S -O -fcheck=bounds nn.f90
>
> and then looking for code snippets like
>
>          movl    $89, %ecx
>          movq    %rdi, %rdx
>          movl    $.LC0, %edi
>          movl    $0, %eax
>          call    _gfortran_runtime_error
>
> where setting %eax to zero indicates that we are indeed using
> varargs, because %eax contains the number of float arguments,
> which is zero.
>
> No test case, because there is not really a good way to check for this.
>
> So, OK for trunk?
>
> Regards
>
>         Thomas
>
> 2019-03-17  Thomas Koenig  <tko...@gcc.gnu.org>
>
>         PR fortran/68009
>         * iresolve.c: Include trans.h.
>         (gfc_resolve_fe_runtine_error): Set backend_decl on
>         resolved_sym.

Ok for trunk/7/8. Thanks!


-- 
Janne Blomqvist

Reply via email to