[comp.sys.dec] Fortran bug?

te07@edrc.cmu.edu (Thomas Epperly) (11/29/89)

The following short fortran program gives a
Fatal error in: /usr/lib/fcom1.31 Segmentation fault
Nice error message!  I really don't know fortran, so I am not sure if this
is a bug in the compiler or not.  Line seven is the line which causes the
compiler to die(the one with the MOD).

	PROGRAM test
	IMPLICIT none
	INTEGER level, igr
	igr = 1
	level = 2
	igr = MOD(level,INT(10.0))
	END

Lastly, I am posting this for one of the users on our system; and I don't know
why he wrote the MOD that way.

Tom Epperly

khb@chiba.Sun.COM (Keith Bierman - SPD Advanced Languages) (12/01/89)

In article <7120@pt.cs.cmu.edu> epperly@osnome.che.wisc.edu (Tom Epperly) writes:
>The following short fortran program gives a
>Fatal error in: /usr/lib/fcom1.31 Segmentation fault
>Nice error message!  I really don't know fortran, so I am not sure if this
>is a bug in the compiler or not.  Line seven is the line which causes the
>compiler to die(the one with the MOD).
>
>	PROGRAM test
>	IMPLICIT none
>	INTEGER level, igr
>	igr = 1
>	level = 2
>	igr = MOD(level,INT(10.0))
>	END
>
>Lastly, I am posting this for one of the users on our system; and I don't know
>why he wrote the MOD that way.
>

Runs fine on a sun4 with f77v1.3. The code is legal.


I assume this is a contrived example (cut down from something large no
doubt), as there is no file written (screen output) or anything else
to get a handle on ... so the compiler may try to optimize the whole
program away (default on 1.31 is -O1, if memory serves ... so you
might try -O0 for grins).

On a MIPS box with the current MIPS compilers the correct result is
also provided. Either this was a bug in the MIPS 1.31 compiler (which
DEC is still selling) or it was introduced as part of the the "port".

I'm afraid I don't have a DS3100 handy, so I can't provide a better
explaination nor a tested workaround.


Cheers
Keith H. Bierman    |*My thoughts are my own. !! kbierman@sun.com
It's Not My Fault   |	MTS --Only my work belongs to Sun* 
I Voted for Bill &  | Advanced Languages/Floating Point Group            
Opus                | "When the going gets Weird .. the Weird turn PRO"

cdb@hpclcdb.HP.COM (Carl Burch) (12/05/89)

> The following short fortran program gives a
> Fatal error in: /usr/lib/fcom1.31 Segmentation fault
> Nice error message!  I really don't know fortran, so I am not sure if this
> is a bug in the compiler or not.  

     I don't know about any other company's compiler lab, but around here
we kind of take it for granted that any segmentation violation in system
software is a bug.
							- Carl Burch
							  HP Compiler Lab

carterm@bcrka80.bnr.ca (Michael Carter 1639503) (12/06/89)

In article <7120@pt.cs.cmu.edu> epperly@osnome.che.wisc.edu (Tom Epperly) writes:
>The following short fortran program gives a
>Fatal error in: /usr/lib/fcom1.31 Segmentation fault
>Nice error message!  I really don't know fortran, so I am not sure if this
>is a bug in the compiler or not.  Line seven is the line which causes the
>compiler to die(the one with the MOD).
>
>	PROGRAM test
>	IMPLICIT none
>	INTEGER level, igr
>	igr = 1
>	level = 2
>	igr = MOD(level,INT(10.0))
>	END
>

We ran into a similar situation on the 3100.  The problem is probably
caused by the use of INT inside the MOD function.  According to DEC, 
the MIPS Fortran compiler doesn't support (at least on the 3100) type
conversion of a CONSTANT (variables work okay) within a function call,
using the intrinsic conversion functions. 

You can use:  
   igr = MOD (level,10)

or you can use:
   itemp=INT(10.0)
   igr = MOD(level,itemp)

or you can use:
   igr = MOD(level,INTUSE(10.0))
   (where INTUSE is a user-defined conversion function (which could just 
   call the INT function))

or you can use:
   temp=10.0
   igr = MOD(level,INT(temp))

>Lastly, I am posting this for one of the users on our system; and I don't know
>why he wrote the MOD that way.

I'm not sure why anyone would want to do that either, but we tripped over the
same thing, so your user's programming style isn't entirely unique :-), even
though it may not be good programming practice.

lilian@mips.COM (Lilian Leung) (12/07/89)

In article <7120@pt.cs.cmu.edu> epperly@osnome.che.wisc.edu (Tom Epperly) writes:
>The following short fortran program gives a
>Fatal error in: /usr/lib/fcom1.31 Segmentation fault
>Nice error message!  I really don't know fortran, so I am not sure if this
>is a bug in the compiler or not.  Line seven is the line which causes the
>compiler to die(the one with the MOD).
>
>	PROGRAM test
>	IMPLICIT none
>	INTEGER level, igr
>	igr = 1
>	level = 2
>	igr = MOD(level,INT(10.0))
>	END
>
>Lastly, I am posting this for one of the users on our system; and I don't know
>why he wrote the MOD that way.
>
>Tom Epperly


The above was a bug in our 1.31 FORTRAN compiler, but has since been
fixed in our 2.0 release.
-- 
UUCP:	{ames,decwrl,prls,pyramid}!mips!lilian	(or lilian@mips.com)
DDD:	408-991-7848 Lilian Leung		(or 408-720-1700, Ext. 848)
USPS:	MIPS Computer Systems, 930 Arques, Sunnyvale, CA 94086-3650