Dear sirs I am writing regarding a question for the package dynamichazard which I am the author of and the -fbounds-check flag used in R develop in Win-Builder.
R develop version has following flags added to the Fortran rule compared with R release on Win-builder: -pedantic -fbounds-check Particularly, the line for dchur.o when building dynamichazard on the release version is: d:/Compiler/gcc-4.9.3/mingw_32/bin/gfortran -O3 -mtune=core2 -c dchur.f -o dchur.o and the line on the develop version is: d:/Compiler/gcc-4.9.3/mingw_32/bin/gfortran -pedantic -fbounds-check -O3 -mtune=core2 -c dchur.f -o dchur.o The latter causes the following error when the tests on the package is run: At line 1 of file dchur.f Fortran runtime error: Actual string length is shorter than the declared one for dummy argument 'uplo' (0/1) The version of dynamichazard I submitted to the Win-Builder is at: https://github.com/boennecd/dynamichazard/tree/d3a8b7d5f39fbfcc14df008f1fdd71f4f38ac25a The relevant code in dynamichazard/src/LAPACK_BLAS_wrapper.cpp is: #include <Rcpp.h> #include <R_ext/BLAS.h> #include <R_ext/Lapack.h> extern "C" { void F77_NAME(dchur)( const char *, // UPLO const char *, // TRANS int*, // N int*, // M double*, // R int*, // LDR double*, // X double*, // Z int*, // LDZ double*, // Y double*, // RHO double*, // C double*, // S int* // INFO ); } void ddhazard_dchur(double *R, double *x, int n, int ldr){ int info; double *c = new double[n]; double *s = new double[n]; int m = 0; int ldz = 1; double z, y, rho; F77_CALL(dchur)( "L", "N", &n, &m, R, &ldr, x, &z, &ldz, &y, &rho, c, s, &info); // code abbreviated }; // code abbreviated I have tried to re-produce the error with R release on my own laptop running Windows but failed to do so. Here is an example: $ ./tmp.sh + cat foo.cpp #include <iostream> extern "C" { void bar_(const char *in); } int main() { std::cout << "Running main" << std::endl; bar_("F"); return 0; } + cat bar.f subroutine bar(INPUT) CHARACTER INPUT print *, input end + c:/Rtools/mingw_32/bin/g++ -std=gnu++11 -O2 -Wall -mtune=core2 -c foo.cpp -o foo.o + c:/Rtools/mingw_32/bin/gfortran -pedantic -fbounds-check -O3 -c bar.f -o bar.o + c:/Rtools/mingw_32/bin/g++ -o foo foo.o bar.o -lgfortran -lm -lquadmath + ./foo.exe Running main F + Rscript.exe -e R.version _ platform x86_64-w64-mingw32 arch x86_64 os mingw32 system x86_64, mingw32 status major 3 minor 4.0 year 2017 month 04 day 21 svn rev 72570 language R version.string R version 3.4.0 (2017-04-21) nickname You Stupid Darkness + head -1 c:/Rtools/Rtools.txt Rtools Collection 3.4.0.1962 The example is not with a dynamic link library but comparable to the example here: https://code.launchpad.net/~fluidity-core/fluidity/gmsh-on-sphere/+merge/99395/comments/216834 I stupidly tried to solve the problem in the current version 0.3.1 of dynamichazard on CRAN by adding this rule in Makevars.win: dchur.o: $(F77) $(filter-out -fbounds-check,$(ALL_FFLAGS)) -c dchur.f -o dchur.o This makes all my tests pass including those that uses the ddhazard_dchur C++ function on the develop version of Win-builder. However, it violates the second paragraph of "1.2.1 Using Makevars" in "Writing R Extensions". Please, let me know if I have made an obvious mistake or if there is a straightforward solution. Sincerely yours Benjamin Christoffersen ______________________________________________ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel