If there is no Fortran LOGICAL representation that matches the corresponding c _Bool then the value of c_bool in the iso_c_binding module should be -1. If that is what you find, then the compiler is behaving correctly. Cheers, Bill On Mar 24, 2014, at 1:56 PM, Ondřej Čertík <[log in to unmask]> wrote: > Hi, > > The Fortran 2003 standard says that logical(c_bool) in Fortran and > "bool" in C should be interoperable. Unfortunately, this only works in > gfortran. Both Intel and PGI fail. Here is a minimal example: > > https://gist.github.com/certik/9744747 > > PGI and Intel behave the same, and both fail. The reason is that Intel > represents .true. as -1, but when you pass true from C, it is > represented as 1. In Fortran, .not. causes 1 (= .true. in Intel > Fortran) to become -2 (still .false. in Intel Fortran), but when you > return to C, -2 is interpreted as true. I was using ifort and icc for > this example. > > Here are some relevant links if you want to learn more about this: > > http://gcc.gnu.org/onlinedocs/gfortran/Intrinsic-Types.html > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40539 > http://software.intel.com/en-us/blogs/2012/05/11/doctor-fortran-in-i-can-c-clearly-now-part-i > > Intel has an option to fix this, it's enough to use -fpscomp logical, > though it might slow things down. > > Isn't this a bug in Intel? Because clearly, the logical(c_bool) and > bool are *not* interoperable in ifort (with default options), as my > example shows, using Intel's own Fortran and C compilers. I'll be > happy to report this as a bug, but I wanted to check with you first, > whether you agree that this is a bug. > > Ondrej Bill Long [log in to unmask] Fortran Technical Suport & voice: 651-605-9024 Bioinformatics Software Development fax: 651-605-9142 Cray Inc./ Cray Plaza, Suite 210/ 380 Jackson St./ St. Paul, MN 55101