[Rd] Intel Fortran compiler returns a -1 TRUE value

Barry Rowlingson b.rowlingson at lancaster.ac.uk
Tue Sep 30 13:41:26 CEST 2014


I have access to a cluster on which I have been supplied with R 3.1.0 which
appears to have been built using the intel compiler tools.

The following minimal Fortran file:

      subroutine truth(lind)
      logical lind
      lind = .TRUE.
      end

Compiles thusly:

arcadia> R CMD SHLIB truth.f
ifort   -fpic  -O3 -xHOST -axCORE-AVX-I -fp-model precise  -c truth.f -o
truth.o
ifort: command line warning #10212: -fp-model precise evaluates in source
precision with Fortran.
icc -std=gnu99 -shared -L/usr/local/lib64 -o truth.so truth.o -lifport
-lifcore -limf -lsvml -lm -lipgo -lirc -lpthread -lirc_s -ldl


And runs so:

 > dyn.load("truth.so")
 > z = .Fortran("truth",as.logical(TRUE))
 > z[[1]]
 [1] TRUE
 > as.numeric(z[[1]])
 [1] -1
 > z[[1]] == TRUE
 [1] FALSE
 > all(z[[1]])
 [1] TRUE
 > identical(z[[1]],TRUE)
 [1] FALSE

The value generated by Fortran's .TRUE. evaluates as "truthy" -- as in
all(z[[1]]) -- but is neither equal to nor identical to TRUE. Its numeric
conversion to -1 is most unusual, every other system I've tried converts to
+1.

So.... wrong compiler flag on build? User error - never try comparing
truthy values, as with the various flavours of NA? Or something else?

If its a compiler/config problem I'll pass it on to the cluster admin -
I've had a good look for stuff on building R on Intel compilers, nothing
stood out. I might try building R myself this afternoon but as I implied I
don't have admin on this cluster so I might have to track down a bunch of
library sources to build R from source.

If its a user error then I'll track down every instance of "if(foo==TRUE)"
and shoot it, and it would be nice to have a note in ?TRUE

Some useful info:

> sessionInfo()
R version 3.1.0 (2014-04-10)
Platform: x86_64-unknown-linux-gnu (64-bit)

arcadia> ifort -v
ifort version 13.0.0


Thanks

Barry

	[[alternative HTML version deleted]]



More information about the R-devel mailing list