------- Comment #6 from tobi at gcc dot gnu dot org 2005-11-05 23:06 ------- I did some further research, and while g77 didn't seem to have documented any of the details of how LOGICALs are implemented, we have the following in gfortran.texi:755: ---- @node Implicitly interconvert LOGICAL and INTEGER @section Implicitly interconvert LOGICAL and INTEGER @cindex Implicitly interconvert LOGICAL and INTEGER
As a GNU extension for backwards compatibility with other compilers, @command{gfortran} allows the implicit conversion of LOGICALs to INTEGERs and vice versa. When converting from a LOGICAL to an INTEGER, the numeric value of @code{.FALSE.} is zero, and that of @code{.TRUE.} is one. When converting from INTEGER to LOGICAL, the value zero is interpreted as @code{.FALSE.} and any nonzero value is interpreted as @code{.TRUE.}. ---- And this is indeed true and consistent with what g77 does: [EMAIL PROTECTED]:~/src/tests> cat ugly.f LOGICAL L DO i=0,5 L = i PRINT *, l END DO END [EMAIL PROTECTED]:~/src/tests> gfortran ugly.f In file ugly.f:3 L = i 1 Warning: Extension: Conversion from INTEGER(4) to LOGICAL(4) at (1) [EMAIL PROTECTED]:~/src/tests> LD_LIBRARY_PATH=~/usr/lib ./a.out F T T T T T [EMAIL PROTECTED]:~/src/tests> g77 ugly.f -fugly-logint [EMAIL PROTECTED]:~/src/tests> ./a.out F T T T T T [EMAIL PROTECTED]:~/src/tests> (The INTEGER -> LOGICAL conversion is implemented as "i = l != 0" as verified by looking in the tree dumps.) I think we should be consistent. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22495