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!billwoods@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.