From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6908 invoked by alias); 6 Jun 2005 15:48:18 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Received: (qmail 6888 invoked by uid 48); 6 Jun 2005 15:48:14 -0000 Date: Mon, 06 Jun 2005 15:48:00 -0000 From: "mark_l_hansen at yahoo dot com" To: gcc-bugs@gcc.gnu.org Message-ID: <20050606154812.21931.mark_l_hansen@yahoo.com> Reply-To: gcc-bugzilla@gcc.gnu.org Subject: [Bug fortran/21931] New: problem with fugly-logint flag and evaluating if statements X-Bugzilla-Reason: CC X-SW-Source: 2005-06/txt/msg01012.txt.bz2 List-Id: 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