[R-pkg-devel] Troubleshooting Fortran type mismatch and --enable-lto

Shawn Way @w@y @end|ng |rom empowerph@rm@cy@com
Wed Jun 22 14:34:26 CEST 2022


I had to make the modifications you suggested to the .C file and it worked like a charm.  I also had to make the following changes to my ~/.R/Makevar file:

LTO_OPT=-flto -ffat-lto-objects

Doing this seems to have worked well!  Thank you very much!  I would not have been able to do this without your help.

Shawn Way

-----Original Message-----
From: Tomas Kalibera <tomas.kalibera using gmail.com> 
Sent: Tuesday, June 21, 2022 3:48 PM
To: Shawn Way <sway using empowerpharmacy.com>; r-package-devel using r-project.org
Subject: Re: [R-pkg-devel] Troubleshooting Fortran type mismatch and --enable-lto


On 6/21/22 22:12, Shawn Way wrote:
> Thanks!  The package I'm trying to get working is IAPWS95.  It can compile and work just fine, however, CRAN moderators are reporting the following:
>
> Thanks, with  LTO checks enabled we still see
>
>
>
> IAPWS95_init.c:37:13: warning: type of ‘dth_’ does not match original 
> declaration [-Wlto-type-mismatch]
>      37 | extern void F77_NAME(dth)(double *T, double *h, double *D, 
> int *icode);
>        |            ^
> IAPWS9521D.f90:2344:31: note: return value type mismatch
>    2344 |      REAL(KIND=8) function DTh( T, h, D, Dupp, icode)
>        |                              ^
> IAPWS9521D.f90:2344:31: note: type ‘double’ should match type ‘void’
> IAPWS9521D.f90:2344:31: note: ‘dth’ was previously declared here
> IAPWS9521D.f90:2344:31: note: code may be misoptimized unless 
> ‘-fno-strict-aliasing’ is used
> IAPWS95_init.c:58:13: warning: type of ‘phi0dt_’ does not match 
> original declaration [-Wlto-type-mismatch]
>      58 | extern void F77_NAME(phi0dt)(double *D, double *fhizdT, int 
> *icode);
>        |            ^
> IAPWS9521D.f90:1250:34: note: return value type mismatch
>    1250 |      REAL(KIND=8) function PHI0DT(fhizdt, icode)
>        |                                  ^
> IAPWS9521D.f90:1250:34: note: type ‘double’ should match type ‘void’
> IAPWS9521D.f90:1250:34: note: ‘phi0dt’ was previously declared here
> IAPWS9521D.f90:1250:34: note: code may be misoptimized unless 
> ‘-fno-strict-aliasing’ is used
>
>
> Please fix and resubmit.
> Best,
> Uwe Ligges
>
>
> I'm trying to enable the LTO checks on windows and then reproduce the errors.  Once I have that, then I can try to figure out the code errors. Not that I know exactly know how to do that right now, but I need to try to fix it.

I can reproduce as described in WRE. I've modified my etc/x64/Makeconf to have LTO_OPT=-flto and then ran

R CMD INSTALL --use-LTO IAPWS95_1.1.0.tar.gz

and I got the errors as reported. Editing the C file as shown below, to match the Fortran definitions, makes the compiler happy.

Best
Tomas

diff -Nru orig/IAPWS95/src/IAPWS95_init.c patched/IAPWS95/src/IAPWS95_init.c
--- orig/IAPWS95/src/IAPWS95_init.c     2018-06-18 13:38:21.000000000 +0200
+++ patched/IAPWS95/src/IAPWS95_init.c  2022-06-21 22:41:52.628001900 
+++ +0200
@@ -34,7 +34,7 @@
  extern void F77_NAME(dph)(double *p, double *h, double *D, int *icode);
  extern void F77_NAME(dps)(double *p, double *s, double *D, int *icode);
  extern void F77_NAME(dptctetab)(int *np, double *T, double *p, double *y); -extern void F77_NAME(dth)(double *T, double *h, double *D, int *icode);
+extern double F77_NAME(dth)(double *T, double *h, double *D, double
*Dupp, int *icode);
  extern void F77_NAME(dtp)(double *T, double *p, double *D, int *icode);
  extern void F77_NAME(dtpctetab)(int *nT, double *p, double *T, double *y);
  extern void F77_NAME(dts)(double *T, double *s, double *D, int *icode); @@ -55,7 +55,7 @@
  extern void F77_NAME(kvisctd)(double *T, double *D, double *KVscty, int *icode);
  extern void F77_NAME(phi0dd)(double *D, double *fhizd, int *icode);
  extern void F77_NAME(phi0ddd)(double *D, double *fhizd, int *icode); -extern void F77_NAME(phi0dt)(double *D, double *fhizdT, int *icode);
+extern double F77_NAME(phi0dt)(double *fhizdT, int *icode);
  extern void F77_NAME(phi0td)(double *T, double *D, double *fhiztd, int *icode);
  extern void F77_NAME(phi0ttd)(double *T, double *D, double *fhizttd, int *icode);
  extern void F77_NAME(phi0tttd)(double *T, double *D, double *fhiztttd, int *icode);


>
> Thank you kindly!
>
> Shawn Way
>
> -----Original Message-----
> From: Tomas Kalibera <tomas.kalibera using gmail.com>
> Sent: Tuesday, June 21, 2022 2:54 PM
> To: Shawn Way <sway using empowerpharmacy.com>; 
> r-package-devel using r-project.org
> Subject: Re: [R-pkg-devel] Troubleshooting Fortran type mismatch and 
> --enable-lto
>
>
> On 6/21/22 20:38, Shawn Way wrote:
>> I've gotten a response from the build team that I have a type mis-match between my fortran code and it was discovered using the -enable-lto option for compilation.  I'm trying to even be able to reproduce the error so that I can fix the error.  I've read the R Admin and the Writing R extensions and it has muddied the waters for building using a Windows machine.
>>
>> Can someone please give me a hint how to "enable-lto" for building R packages using R 4.2.0?  I would really love understand how to troubleshoot combined R and fortran code.
> Please try following 4.5 of Writing R Extensions and if you run into problems, ask specifically, providing an exact description what you did and key parts of outputs, so that others can help.
>> Just FYI, I'm taking over the package as a maintainer as the original package creator died a couple of years ago.  It's a new experience for me.
> Please also give the name of the package - it may be possible to tell from the outputs what is the problem.
>
> Best
> Tomas
>
>> Thank you kindly,
>>
>> Shawn Way
>>
>>
>>
>>
>> 	[[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-package-devel using r-project.org mailing list 
>> https://stat.ethz.ch/mailman/listinfo/r-package-devel


More information about the R-package-devel mailing list