[Bug libfortran/52087] New: program does not follow logical rules
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
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
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.