[net.lang.f77] assign bug in f77

bill@ur-cvsvax.UUCP (Bill Vaughn) (07/21/85)

I haven't seen any bug fixes to f77 since we've installed Don Seeley's version
late last year.  Pardon me if I've missed this one.

Description:
	The f77 VAX code generator creates illegal instructions ("cvtll")
	whenever the target of an 'assign' statement is an integer*2
	variable.

Repeat-by:
	Run the following program through the f77 compiler:

	integer*2 i
	assign 10 to i
	goto i
10	continue
	end

	The assembler reports an error of this form: 
Assembler:
"/tmp/fortxxxxx.s", line 21: "cvtll" is not followed by a ':' for a label definition

Fix:
	1. Don't use integer*2 variables as targets of 'assign' statements.
	2. Wait for someone to post a fix to the f77 VAX code generator.

Bill Vaughn
Univ. of Rochester
{allegra,seismo,decvax}!rochester!ur-cvsvax!bill

woods@hao.UUCP (Greg Woods) (07/21/85)

> I haven't seen any bug fixes to f77 since we've installed Don Seeley's version
> late last year.  Pardon me if I've missed this one.
> 
> Description:
> 	The f77 VAX code generator creates illegal instructions ("cvtll")
> 	whenever the target of an 'assign' statement is an integer*2
> 	variable.

  Well, you must have missed one of the bug fixes, because your test
program compiles, assembles and links just fine on our 11/750. I even tried
a more complicated program to verify correct operation of the assign statement.

--Greg
-- 
{ucbvax!hplabs | allegra!nbires | decvax!noao | harpo!seismo | ihnp4!noao}
       		        !hao!woods

CSNET: woods@NCAR  ARPA: woods%ncar@CSNET-RELAY

gwyn@brl-smoke.ARPA (Doug Gwyn ) (05/15/86)

Posted back in mid-1985:
> Description:
> 	The f77 VAX code generator creates illegal instructions ("cvtll")
> 	whenever the target of an 'assign' statement is an integer*2
> 	variable.
> 
> Repeat-by:
> 	Run the following program through the f77 compiler:
> 
> 	integer*2 i
> 	assign 10 to i
> 	goto i
> 10	continue
> 	end

I just got around to looking at this problem,
originally reported for VAX 4.2BSD f77, using
the VAX SVR2 f77.  It has a similar problem,
not in the code generator, but in the optimizer
(/lib/c2).  The optimizer removes the labeled
"ret" that is the target of the goto, because
it doesn't realize that the CVTLW (of the label
into a variable which is then indirectly jumped
through for the goto) is a label reference.
The CVTLL seems to be a Berkeley special..

ASSIGN moves a label, NOT an integer, into the
assign variable, which for that reason must
not be an INTEGER*2.  The compiler should,
however, have warned about this user error.