The -fugly-logint flag allows FORTRAN to treat integers as logicals and vice
versa. The following example program shows some inconsistencies in how the if
statements evaluate. If you change VAR1 to 3,2,1,0,-1 and view the results you
will see some interesting things. The best way to see the problem is to view
the output. Thanks. I would appreciate an email if anyone has a solution/fix
for the problem. Thanks.
Below is the code
Makefile:
all:
g77 -c -g -ff90 -ff90-intrinsics-delete -fugly-logint -fno-automatic
function.for
g++ -c -g main.cpp
g++ -o program main.o function.o -lg2c
main.cpp:
#include
#include
using namespace std;
extern "C" {
void func_();
}
int main()
{
func_();
return 0;
}
function.for:
SUBROUTINE FUNC
IMPLICIT NONE
*
* LOCAL DECLARATIONS
*
INTEGER VAR1, VAR2
LOGICAL LVAR1, LVAR2, LOG1, LOG2
EQUIVALENCE
. (VAR1, LVAR1)
., (VAR2, LVAR2)
*C change VAR1 to 2,-1,0,3 and view results
VAR1 = 3;
VAR2 = -1;
LOG1 = .true.
LOG2 = .true.
WRITE (*,*) "LOG1 = ", LOG1
WRITE (*,*) "LOG2 = ", LOG2
WRITE (*,*) "VAR1 = ", VAR1
WRITE (*,*) "VAR2 = ", VAR2
WRITE (*,*) "LVAR1 = ", LVAR1
WRITE (*,*) "LVAR2 = ", LVAR2
IF(.NOT.((LVAR1 .AND. LVAR2) .AND. (LOG1 .AND. LOG2))) THEN
WRITE (*,*) "LOGICAL TRUE with LOG2"
ELSE
WRITE (*,*) "LOGICAL FALSE with LOG2"
ENDIF
IF(.NOT.(LVAR1 .AND. LVAR2 .AND. LOG1)) THEN
WRITE (*,*) "LOGICAL TRUE with LOG1"
ELSE
WRITE (*,*) "LOGICAL FALSE with LOG1"
ENDIF
IF(.NOT.(LVAR1 .AND. LVAR2)) THEN
WRITE (*,*) "LOGICAL TRUE"
ELSE
WRITE (*,*) "LOGICAL FALSE"
ENDIF
*--
IF(.NOT.(VAR1 .AND. VAR2 .AND. LOG1)) THEN
WRITE (*,*) "BYTE TRUE with LOG1"
ELSE
WRITE (*,*) "BYTE FALSE with LOG1"
ENDIF
IF(.NOT.(VAR1 .AND. VAR2)) THEN
WRITE (*,*) "BYTE TRUE"
ELSE
WRITE (*,*) "BYTE FALSE"
ENDIF
END
--
Summary: problem with fugly-logint flag and evaluating if
statements
Product: gcc
Version: 3.4.2
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: fortran
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: mark_l_hansen at yahoo dot com
CC: gcc-bugs at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21931