[Bug fortran/21931] problem with fugly-logint flag and evaluating if statements

2005-06-28 Thread mark_l_hansen at yahoo dot com

--- Additional Comments From mark_l_hansen at yahoo dot com  2005-06-29 
02:08 ---
I did some more research on the bug and found the following:

1) in fortran .TRUE. is 0x1 in hex
2) if(item) statements evaluate to true when the item value is non zero
3) .NOT., .AND., etc either perform bitwise or logical operations depending on
what they are operating on.

The problem occurs when doing bitwise operations and then doing a logical if
check with the -fugly-logint flag.  For example: 0xFF .AND. 0x02 = 0x02 i.e.
True, but  .NOT.(0xFF .AND. 0x02) = 0xFD i.e. also true when the desired result
is false.

I know the above might all be already understood, but I thought it might help if
others are looking into the problems.

-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21931


[Bug fortran/21931] New: problem with fugly-logint flag and evaluating if statements

2005-06-06 Thread mark_l_hansen at yahoo dot com
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


[Bug fortran/21931] problem with fugly-logint flag and evaluating if statements

2005-06-06 Thread mark_l_hansen at yahoo dot com

--- Additional Comments From mark_l_hansen at yahoo dot com  2005-06-06 
15:51 ---
Created an attachment (id=9038)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=9038&action=view)
Test program


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21931


[Bug fortran/21931] problem with fugly-logint flag and evaluating if statements

2005-06-19 Thread mark_l_hansen at yahoo dot com

--- Additional Comments From mark_l_hansen at yahoo dot com  2005-06-19 
18:39 ---
Correct I am using version 3.4.2

-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21931