[petsc-dev] GCC8 Fortran length changes from int to size_t

Jed Brown jed at jedbrown.org
Fri May 4 22:18:58 CDT 2018


Jed Brown <jed at jedbrown.org> writes:

> Huh?  Or a test that uses enough arguments to not pass in registers if
> you insist on creating a test failure.  Alternatively, do what the
> documentation says.  If you doubt the documentation, we can check the
> assembly.
>
> $ cat stringarg.f                                                                                                                                     
>       subroutine stringarg(s)                                                                                                                                                                 
>       character(*) s
>       end
>
> With gfortran-7.3.1:
>
> 0000000000000000 <stringarg_> push   rbp                                                                                                                                                      
> 0000000000000001 <stringarg_+0x1> mov    rbp,rsp
> 0000000000000004 <stringarg_+0x4> mov    QWORD PTR [rbp-0x8],rdi
> 0000000000000008 <stringarg_+0x8> mov    DWORD PTR [rbp-0xc],esi
> 000000000000000b <stringarg_+0xb> mov    eax,DWORD PTR [rbp-0xc]
> 000000000000000e <stringarg_+0xe> cdqe   
> 0000000000000010 <stringarg_+0x10> mov    rdx,rax
> 0000000000000013 <stringarg_+0x13> mov    ecx,0x0
> 0000000000000018 <stringarg_+0x18> pop    rbp
> 0000000000000019 <stringarg_+0x19> ret    
>
>
> Note the use of esi instead of rsi for the integer argument:
>
> 0000000000000008 <stringarg_+0x8> mov    DWORD PTR [rbp-0xc],esi
>
> Presumably if you build with gfortran-8.1, the analogous line will use
> rsi.

Confirmed with gfortran-8.1:

0000000000000000 <stringarg_> push   rbp
0000000000000001 <stringarg_+0x1> mov    rbp,rsp
0000000000000004 <stringarg_+0x4> mov    QWORD PTR [rbp-0x8],rdi
0000000000000008 <stringarg_+0x8> mov    QWORD PTR [rbp-0x10],rsi
000000000000000c <stringarg_+0xc> mov    rax,QWORD PTR [rbp-0x10]
0000000000000010 <stringarg_+0x10> mov    rdx,rax
0000000000000013 <stringarg_+0x13> mov    ecx,0x0
0000000000000018 <stringarg_+0x18> pop    rbp
0000000000000019 <stringarg_+0x19> ret    


More information about the petsc-dev mailing list