VAX PASCAL V3.7 Release Notes
VAX PASCAL V3.7 Release Notes
14 March 1988
14 March 1988
This document contains information about new features in VAX
PASCAL V3.7, differences between V3.7 and previous versions,
corrections included in VAX PASCAL V3.7, and other topics.
This file is of interest to both system management and
application programmers.
CONTENTS
CHAPTER 1 VAX PASCAL V3.7 RELEASE NOTES
1.1 OVERVIEW OF VAX PASCAL V3.7 . . . . . . . . . . . 1-1
1.2 COMPATIBILITY NOTES . . . . . . . . . . . . . . . 1-1
1.3 PASCAL RUN-TIME LIBRARY VERIFICATION OF KEY
ATTRIBUTES . . . . . . . . . . . . . . . . . . . . 1-1
1.4 STARLET.PAS INSTALLATION DEPENDENCY . . . . . . . 1-2
1.5 KNOWN RESTRICTIONS . . . . . . . . . . . . . . . . 1-2
1.5.1 Blank Padding Of PACKED ARRAY OF CHAR Value
Parameters . . . . . . . . . . . . . . . . . . . 1-2
1.5.2 String Expressions As Actual Value Parameters . 1-3
1.5.3 Passing File Buffer Variables . . . . . . . . . 1-3
1.5.4 Non-printable Characters In Compile-time
Expressions . . . . . . . . . . . . . . . . . . 1-3
1.5.5 Using The ARGUMENT Routine With VAR Parameters . 1-4
1.5.6 Maximum Number Of Environment Files Allowed . . 1-4
CHAPTER 2 VAX PASCAL V3.7 MAINTENANCE FIXES
CHAPTER 1
CHAPTER 1
VAX PASCAL V3.7 RELEASE NOTES
VAX PASCAL V3.7 RELEASE NOTES
1.1 OVERVIEW OF VAX PASCAL V3.7
VAX PASCAL V3.7 contains only maintenance corrections. No new
functionality is provided.
1.2 COMPATIBILITY NOTES
There have been no source incompatibilities added to VAX PASCAL V3.7.
All valid programs will continue to work as expected.
The "SYNPERIOD, Syntax: '.' expected" error message generated by the
VAX PASCAL compiler has been changed from a warning-level to an
error-level. There have been several reports of confusion resulting
from programs that had unbalanced END keywords and were compiled with
/NOWARNINGS. These programs didn't produce any visible diagnositics.
By changing the severity from warning to error, the /NOWARNINGS
qualifier will not prevent the diagnostic from being issued.
The VAX SCA source code analyzer files produced by VAX PASCAL V3.7
with the /ANALYSIS_DATA qualifier require VAX SCA V1.1 or greater.
The source code analyzer files will not work correctly with VAX SCA
V1.0.
1.3 PASCAL RUN-TIME LIBRARY VERIFICATION OF KEY ATTRIBUTES
When an existing indexed file is opened, the Run-Time Library compares
the keys in the file against the KEY attributes specified in the
program. If no KEY attribute was specified for the corresponding key
in the indexed file, then the comparison is bypassed and the open
continues. The Run-Time Library compares the position and the
datatype of the file's keys against the KEY attributes specified. If
the KEY attribute explicitly specifies a collating sequence (ASCENDING
or DESCENDING) then the specified sequence must match that of the key
1-1
VAX PASCAL V3.7 RELEASE NOTES
VAX PASCAL V3.7 RELEASE NOTES
in the file. If no sequence is specified then either sequence is
allowed. The CHANGES and DUPLICATES options are not checked.
1.4 STARLET.PAS INSTALLATION DEPENDENCY
The VAX PASCAL V3.7 kit does not contain a new STARLET.PAS kit. The
existing kit, PASSTR034, is only provided to new customers or on
magnetic tape media. While the STARLET.PAS kit was not updated, we
strongly suggest that you reinstall PASSTR after each VAX/VMS upgrade
or update. This is because the STARLET.PAS file that is built by the
PASSTR034 facility is built from a file of definitions shipped on the
VAX/VMS kit. This file is SYS$LIBRARY:STARLETSD.TLB. This file is
owned and maintained by the VAX/VMS group and may be updated by
VAX/VMS releases. After each VAX/VMS update or upgrade, reinstalling
STARLET.PAS allows you to get any corrections or enhancements made to
SYS$LIBRARY:STARLETSD.TLB.
1.5 KNOWN RESTRICTIONS
This section includes all known restrictions in the VAX PASCAL V3.7
compiler.
1.5.1 Blank Padding Of PACKED ARRAY OF CHAR Value Parameters
A string parameter must be structurally compatible with its
corresponding formal parameter. The VAX PASCAL compiler will not
blank pad a fixed length character string expression with blanks to
match the formal declaration. Also VAX PASCAL will not blank pad
default values for such string parameters. For example, the following
program segment will produce a compile-time error:
TYPE STR40 = PACKED ARRAY [1..40] OF CHAR;
PROCEDURE PASS_STR40( P : STR40 );
BEGIN
END;
BEGIN
PASS_STR40('Shorter than 40 chars');
END.
1-2
VAX PASCAL V3.7 RELEASE NOTES
VAX PASCAL V3.7 RELEASE NOTES
1.5.2 String Expressions As Actual Value Parameters
If several formal value parameters are declared in the same section
and have the same conformant packed array schema, all corresponding
actual parameters must have the same bounds at run-time. For example:
PROCEDURE P( A,B : PACKED ARRAY [L..U:INTEGER] OF CHAR );
In a call to P, the actual parameters passed to A and B must have
identical string bounds. However, due to an error in the VAX PASCAL
compiler, the bounds of these parameters are not checked. If a
program calls P with two character-string parameters of different
lengths, an error will not be signaled and the bound identifiers L and
U will not correctly describe the bounds of the formal parameter B.
This restriction applies only to string expressions passed to value
conformant PACKED ARRAY OF CHAR parameters. For all other types of
parameters, bounds checking is done during compile-time.
1.5.3 Passing File Buffer Variables
When the buffer variable of a file is passed as a VAR parameter, the
allocation size of the formal VAR parameter must match that of the
components of the file. Failure to do so will result in an Internal
Compiler Error. For example:
PROGRAM A;
VAR
F : PACKED FILE OF 0..65535;
G : FILE OF [WORD] 0..65535;
PROCEDURE P( VAR I : INTEGER ); EXTERNAL;
BEGIN
P(F^); { causes an Internal Compiler Error }
P(G^); { causes an Internal Compiler Error }
END.
1.5.4 Non-printable Characters In Compile-time Expressions
The extended syntax for imbedding non-printable characters in string
literals may yield incorrect results when used in compile-time
expressions. For example:
PROGRAM A(OUTPUT);
CONST BOOL = 'BELL'(7) = 'BELL'(7)'CHAR';
1-3
VAX PASCAL V3.7 RELEASE NOTES
VAX PASCAL V3.7 RELEASE NOTES
VAR STRING : PACKED ARRAY [1..32] OF CHAR :=
'STRING WITH A BELL'(7)' CHARACTER';
BEGIN
WRITELN(BOOL,' ',STRING);
END.
The above program will print "TRUE" for BOOL and garbage characters
for STRING. As a workaround, you can use run-time expressions. For
example:
PROGRAM A(OUTPUT);
VAR BOOL : BOOLEAN;
STRING : PACKED ARRAY [1..32] OF CHAR;
BEGIN
BOOL := 'BELL'(7) = 'BELL'(7)'CHAR';
STRING := 'STRING WITH A BELL'(7)' CHARACTER';
WRITELN(BOOL,' ',STRING);
END.
We expect to lift this restriction in a future release of VAX PASCAL.
1.5.5 Using The ARGUMENT Routine With VAR Parameters
The ARGUMENT builtin routine cannot be used on the left-hand side of
an assignment statement. However, you can still assign into VAR
parameters with the LIST attribute by using the IADDRESS builtin. For
example:
PROCEDURE A(VAR P : [LIST] INTEGER);
VAR I,PTR : ^INTEGER;
BEGIN
FOR I := 1 TO ARGUMENT_LIST_LENGTH(P) DO
BEGIN
PTR := IADDRESS(ARGUMENT(P,I));
PTR^ := 42;
END;
END;
We will consider further enhancements to the ARGUMENT routine in a
future release of VAX PASCAL.
1.5.6 Maximum Number Of Environment Files Allowed
The maximum number of environment files allowed in a single
compilation unit is 128. Using more than 128 environment files will
1-4
VAX PASCAL V3.7 RELEASE NOTES
VAX PASCAL V3.7 RELEASE NOTES
result in an Internal Compiler Error. We will consider increasing the
maximum number of environment allowed and adding an appropriate error
message in a future release of VAX PASCAL.
1-5
CHAPTER 2
CHAPTER 2
VAX PASCAL V3.7 MAINTENANCE FIXES
VAX PASCAL V3.7 MAINTENANCE FIXES
This chapter describes all the changes for the VAX PASCAL V3.7
release.
o The compiler would occasionally get an Internal Compiler
Error during Tree Construction when the procedure integration
optimization was enabled and a callable copy of a routine was
generated (because of GLOBAL attribute, ENVIRONMENT
attribute, or the compiler's expansion heuristic) and the
routine was later expanded into another routine. This
problem has been corrected.
o (SPR ICA-6429) The compiler would occasionally generate
incorrect code when optimizations were enabled for a source
module containing nested WHILE statements with identical
calls to EOF or EOLN. This problem has been corrected.
o The compiler would occasionally generate an Internal Compiler
Error during Profit Analysis when optimizations were enabled
for a source module containing common sub-expressions within
nested looping constructs.
o The compiler would generate an Internal Compiler Error during
Context Analysis when an external value variable reference
was typecast to a structured type. The correct code is now
generated.
o (SPR ICA-8691) When compiling with subrange checking
enabled, assignments to set variables sometimes generated
superfluous instructions. This problem has been fixed.
2-1
VAX PASCAL V3.7 MAINTENANCE FIXES
VAX PASCAL V3.7 MAINTENANCE FIXES
o External pointer variables occasionally caused large amounts
of stack space to be allocated. This problem has been fixed.
o (SPR ICA-9880) An Internal Compiler Error during Final
occasionally occurred when compiling routines containing very
large CASE statements and the machine code listing was
enabled with /LIST and /MACHINE. This would occur if any of
the case-element displacements was greater than 32 KBytes.
This problem has been fixed.
o (SPR ICA-10185) The compiler would go into an infinite loop
if a constant-expression contained a math function that
referenced a reserved floating operand. This problem has
been fixed.
o (SPR ICA-9835) An Internal Compiler Error during Flow
Analysis was generated when optimizations were enabled
compiling a program containing an IF-THEN-ELSE statement
similar to the following:
FOR i := 1 TO 10 DO
IF Bool1
THEN
BEGIN
IF Bool2
x := arr1[i];
WRITELN( arr1[i] );
WRITELN( arr2[i] );
END
ELSE
WRITELN( arr2[i] );
Where arr1 and arr2 were of the same type. This problem has
been corrected.
o (SPR ICA-10789) The compiler would generate a bad VAX SCA
source analysis file when the program contained a label and a
record field of the same name. The resulting file would not
load correctly into a VAX SCA library. This problem has been
corrected.
o (SPR ICA-9447) Incorrect code occasionally would be
generated for an IF-THEN-ELSE statment within a looping
construct which contained a common array index which was
modified within the loop. The compiler did not realize that
the value of the index had changed within the loop and
neglected to recalculate the array address for each iteration
2-2
VAX PASCAL V3.7 MAINTENANCE FIXES
VAX PASCAL V3.7 MAINTENANCE FIXES
of the loop. This problem has been corrected.
o When using the %IMMED foreign mechanism specifier on an
actual parameter of type REAL, the compiler would incorrectly
convert the value to INTEGER before passing it to the routine
being called. This problem has been corrected.
o In a CASE statement label, the lower bound of a range could
not be a compile-time-constant expression in parentheses.
This problem has been fixed.
o An Internal Compiler Error would occur during Source Analysis
or Flow Analysis if a CASE statement contained only empty
case-elements. This problem has been fixed. The correct
syntax error is now issued.
o The message "SYNPERIOD, Syntax: '.' expected" was issued as
either a warning message or an error message based on the
context. It is now always issued as an error message to
prevent syntax errors from being overlooked when compiling
with /NOWARNINGS.
o Incorrect code was occasionally generated when the INDEX
predeclared function was used as a CASE selector expression
and the pattern string used the concatenation operator. This
problem has been fixed and the correct code is now generated.
o An incorrect file variable was generated when inheriting a
record whose fields used the V3.4 key attribute enhancements
(CHANGES, DUPLICATES, ASCENDING, or DESCENDING). This
problem has been corrected.
o The changes made to VAX PASCAL V3.6 to improve the code
quality problem reported in SPR ICA-8693 have been backed
out. These changes caused incorrect behaviour in some cases.
SPR ICA-8693 will be re-addressed in a future release.
o (SPR ICA-11864) When the ZERO builtin function was used to
statically initialize a record variable with a variant-part,
the variant tag was incorrect initialized. This problem has
been fixed, the tag is now set to zero.
2-3
VAX PASCAL V3.7 MAINTENANCE FIXES
VAX PASCAL V3.7 MAINTENANCE FIXES
o (SPR ICA-11233) The compiler occasionally generated
incorrect code for string comparisions when one operand was
n
(4n)+3 bytes long and had to be blank padded to match the
size of the other operand. This problem has been fixed.
o (SPR ICA-11248) The compiler occasionally generated
incorrect code for modules containing backward GOTOs within a
conditional statement which was nested within a looping
construct. This problem has been fixed.
o The compiler occasionally generated incorrect code for
routines with value parameters having the TRUNCATE attribute
which are used within nested routines. This problem has been
fixed.
o The compiler did not perform the compile-time folding of the
set difference operator correctly. This problem has been
fixed.
o (SPR ICA-13372) The compiler occasionally generated
incorrect code when a common subexpression using a set
constructor was used in an IF_THEN_ELSE statement which was
nested within a looping construct. This problem has been
fixed and correct code is generated.
o (SPR ICA-7928)The compiler occasionally generated an Internal
Compiler Error during Name Packing when optimizations are
enabled for a module containing common array subscripts for
different array types within both the case selector and
subsequent case elements. This problem has been fixed.
o An Internal Compiler Error during Source Listing was
occasionally generated when compiling with /CROSS_REFERENCE
when the PSECT attribute was applied to a type definition.
This problem has been fixed.
o An Internal Compiler Error during Tree Construction occurred
if the ARGUMENT or ARGUMENT_LIST_LENGTH buildins were used
with a variable that was not a parameter. An error message
is now produced.
2-4