[Bug libfortran/52087] New: program does not follow logical rules

2012-02-01 Thread ryan.maclellan at ua dot edu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52087

 Bug #: 52087
   Summary: program does not follow logical rules
Classification: Unclassified
   Product: gcc
   Version: 4.4.3
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: libfortran
AssignedTo: unassig...@gcc.gnu.org
ReportedBy: ryan.maclel...@ua.edu


Created attachment 26549
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=26549
minimal source code to reproduce bug (5 lines)

The following program tests if the input logical variable is a valid logical
variable.  It only behaves as expected if the two logical tests are separately
in () although from the order of operations I would expect it to work as is. 
Incidentally, if I make nt_save .false. or interchange the true and false in
the if statement it does work without the ().

does not write:
  program main

  logical*4 nt_save/.true./

  if ( nt_save.eqv..true. .or. nt_save.eqv..false. ) then
 write(*,*) nt_save
  endif
  end


does write with
  if ( (nt_save.eqv..true.) .or. (nt_save.eqv..false.) ) then


[Bug libfortran/52087] program does not follow logical rules

2012-02-01 Thread ryan.maclellan at ua dot edu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52087

--- Comment #2 from Ryan MacLellan  2012-02-02 
00:57:29 UTC ---
I believe precedence is as follows:
arithmetic expressions evaluated first
followed by relational operators
followed by logical operators

In this case I believe .eqv. are relational operators (equivalent to .eq.) and
.or. is the logical operator.  So the .or. should be evaluated last but it
doesn't seem to be.  If this is not the design precedence or .eqv. is not
considered a relational operators then I may simply be in error.  Otherwise I
think this is a bug.


[Bug libfortran/52087] program does not follow logical rules

2012-02-01 Thread ryan.maclellan at ua dot edu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52087

Ryan MacLellan  changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution||INVALID

--- Comment #4 from Ryan MacLellan  2012-02-02 
02:32:08 UTC ---
Apparently .eqv. is a logical expression and not a relational one.  Further, it
is lower precedence than .or. so this is not a bug at all and the code behaves
as it should.