RELEASE NOTES FOR VAX C V3.2
These notes contain information on the following aspects of VAX C
V3.2:
o Installation
o Functional Enhancements
o Bug Fixes
o Documentation Errata
o Additions and Changes to Compiler Messages
o Restrictions and Known Bugs
1 INSTALLATION
This version of the compiler contains License Management Facility
support. The compiler cannot be run unless a license has been
installed on the machine.
As of VMS V5.2, it is not necessary for the VAX C installation
procedure to install versions of the PPLRTL.EXE, VAXCPAR.OLB or the
VMS Debugger for multiprocess debugging (DEBUG MP). You should not
attempt to install VAX C V3.2 on a version of VMS prior to V5.2, due
to certain dependencies upon VMS 5.2.
This release of VAX C has an installation option for installing the
DECwindows Compiler Interface for C. Answer "Y" to this question if
you desire to be able to compile C programs using the DECwindows
FileView "Compile" verb.
For more information, see the VAX C Installation Guide.
2 FUNCTIONAL ENHANCEMENTS
The following is a list of new features implemented in VAX C V3.2:
o There is a new command line qualifier, /NAME which allows the
user to control the case sensitivity of external names.
Specifying /NAME=UPPERCASE will force all external names to
be converted to uppercase. /NAME=ASIS will retain the case
sensitivity of all external names. /NAME=LOWERCASE will
force all external names to be converted to lowercase. The
Page 2
default is /NAME=UPPERCASE.
The format is as follows:
CC/NAME={UPPERCASE,LOWERCASE,AS_IS}
The following is a list of new features implemented in VAX C V3.1:
o The DECwindows Compiler Interface (DWCI) is now supported by
VAX C. See the next section for details.
o VAX C now supports the VAXset Program Design Facility (PDF).
See below for details.
o VAX C now supports SCA V2.0. Old .ANA files will still load
into SCA V2.0, however .ANA files generated with VAX C V3.1
or VAX C V3.2 will not load into SCA V1.0 libraries.
Therefore, SCA V2.0 is required in order to utilize the
output of the /ANALYSIS_DATA qualifier.
o The compiler will check that pointer arguments have the
correct type if a function prototype is in scope for the
function called and the /STANDARD=PORTABLE qualifier is used.
This feature was added to VAX C V3.0, but inadvertently left
out of the release notes.
o To facilitate nesting of include files, a #ifndef
__{h-filename}loaded directive has been added to the include
files shipped with VAX C. This directive will prevent
re-inclusion of any .h file that has already been included,
and will prevent a cascade of error messages resulting from
redefinitions. In some cases, the .h file already contained
such a directive, but the directive was changed very slightly
so that all .h files uses a similar #ifndef statement.
STDIO.H is one example of a file which changed.
o The RMS .h files have been updated. See the following
section.
2.1 DECwindows FileView Compile Verb Support
Beginning with version 3.1 VAX C provides an enhancement to the
DECwindows FileView "Compile" verb support in which compile command
options can be selected using a window interface instead of the usual
DCL qualifiers. The compiler defaults are used as the initial
configuration; new configurations with different settings of options
can be given names, saved, and used for later compilations.
Page 3
The new interface is used automatically when you use the FileView
"Compile" verb to compile a source file that has a file type of ".C".
More information is available by using the Help menu in the "Compile a
C Program" dialog box.
The DECwindows Compiler Interface (DWCI) for VAX C is entirely
separate from the compiler image and is contained in the following
files:
SYS$COMMON:[VUE$LIBRARY.USER]CC$DWCI.EXE
SYS$COMMON:[VUE$LIBRARY.USER]CC$DWCI.UID
SYS$COMMON:[SYSHLP]CC$DWCI.HLB
2.2 Support for the VAXset Program Design Facility
Beginning with verision 3.1 VAX C contains support for the VAXset
Program Design Facility (PDF). In order to use PDF, you must have SCA
V2.0 and LSE V3.0 installed on your system. PDF allows you to create
detailed designs using the C programming language by embedding design
information in comments, and by writing algorithms with pseudocode
placeholders. Once written, designs can be processed and analyzed,
producing design reports. These designs can evolve into the actual
implementation, while preserving design information within comments.
In order to use the PDF features of SCA and LSE, you must use the
/DESIGN qualifier when you compile your source code.
2.2.1 The /DESIGN qualifier -
You can now specify the /DESIGN qualifier on the CC command line to
determine whether the compiler processes the input file as a detailed
design. If you specify the /DESIGN qualifier, the compiler modifies
its parsing and semantics according to keywords you supply. /NODESIGN
is the default.
The format is as follows:
CC/[NO]DESIGN[=(keyword[,...])]
Valid keywords for the /DESIGN qualifier are:
COMMENTS (D)
NOCOMMENTS
Determines whether the compiler searches inside comments for program
design information, according to rules for associating comments with
declarations, described in the Guide to VAX Language-Sensitive Editor
and VAX Source Code Analyzer. The compiler reports any errors
detected at compile time.
Specifying NOCOMMENTS instructs the compiler to ignore comments
Page 4
completely.
PLACEHOLDERS (D)
NOPLACEHOLDERS
Determines whether the compiler treats LSE placeholders (in
well-defined contexts - see below) as valid program syntax. If you
specify NOPLACEHOLDERS, the compiler treats placeholders as invalid
syntax and reports an error if it finds any placeholders.
Specifying the /DESIGN qualifier without supplying any keywords is the
same as specifying the following:
/DESIGN=(COMMENTS,PLACEHOLDERS)
If you specify the /NODESIGN qualifier, or accept it as the default,
the compiler processes the input file using normal syntax and semantic
rules for the language.
2.2.1.1 Examples -
$ CC/DESIGN=NOCOMMENTS
Instructs the compiler to treat LSE placeholders as valid program
syntax but to ignore program design information inside of program
comments.
$ CC/DESIGN=(NOPLACEHOLDERS)
Instructs the compiler to report as illegal syntax any placeholders
found. The compiler looks for design information inside of comments.
$ CC/ANALYSIS_DATA/DESIGN
Instructs the compiler to report design information in the .ANA file.
For more information see the Guide to VAX Language-Sensitive Editor
and VAX Source Code Analyzer.
2.2.2 VAX C Support for PDF pseudocode placeholders -
VAX C now contains support for recognizing occurrences of pseudocode.
Pseudocode is descriptive text enclosed within special delimiters.
Its purpose is to express algorithms at a level above the actual
implementation code. In effect, it is a placeholder for code that has
not yet been written.
VAX C recognizes such placeholders in any of the following forms:
Placeholder type Format
LSE Optional [@text@]
Page 5
LSE Optional list [@text@]...
LSE Required {@text@}
LSE Required list {@text@}...
PDF pseudocode <@text@>
PDF pseudocode «text»
The second form of the PDF pseudocode placeholder uses angle quotation
marks as its delimiters. These are 8-bit characters whose ASCII codes
are decimal 171 (left) and 187 (right).
2.2.2.1 Contexts in which placeholders may appear -
The VAX C compiler will accept a placeholder in almost any context
where an identifier may appear, and thus, wherever an expression may
be used. Furthermore, since a C statement can consist solely of an
expression, the compiler will also accept a placeholder wherever a
statement may appear. Note, however, that the semicolon that
terminates such statements must still be present following the
placeholder.
Within declarations, the compiler will accept placeholders as
declarators, tags, enumerators, and initializers. A placeholder will
also be accepted in the context of a complete external declaration
(i.e. a declaration occurring outside of any function definition), or
a complete structure or union member declaration. Again, note that
the terminating semicolon must still be specified following such a
placeholder. A placeholder can NOT appear in place of the function
name in a function definition; this will result in the INVFUNCDECL
error message.
Finally, the compiler will accept placeholders anywhere within
preprocessor directives. In general, placeholders appearing as
optional parameters in preprocessor directives will simply be ignored;
placeholders appearing as required parameters will cause the entire
directive to be ignored. If a placeholder appears in the context of
the expression in a #if or #elif directive, the placeholder will be
treated as if it were the constant zero. Similarly, if it appears as
the operand of the `defined' operator, or as the parameter in a #ifdef
or #ifndef directive, the placeholder will be treated as undefined.
Placeholders will NOT be recognized within the text of a macro
definition in a #define directive; these will only materialize if the
macro is later expanded.
The presence of placeholders in any of the allowed contexts usually
will not elicit any diagnostics. This is accomplished at the expense
of somewhat reduced semantics checking, and may mask the presence of
diagnostics that would otherwise be issued. Placeholders appearing in
contexts in which they are not allowed will elicit appropriate syntax
errors.
Page 6
VAX C will recognize but ignore nested placeholders, and will treat
consecutive placeholders (without intervening punctuation) as if they
were a single placeholder. The compiler will NOT recognize
placeholders within comments, character constants, or string
constants. Note, however, that a placeholder appearing between quote
marks in a #include directive WILL be recognized, since this use of
quote marks does not denote a string constant.
Note also that placeholders will be recognized as such regardless of
whether /DESIGN=PLACEHOLDERS or /DESIGN=NOPLACEHOLDERS has been
specified. In the latter case, however, an Error-level diagnostic
message will be issued against any placeholder encountered.
2.2.2.2 Contexts in which placeholders may not appear -
Some users may want to use placeholders in the context of a complete
declaration inside a block. In C, if declarations are present in a
block, they must precede any executable statements in the block. In
this context, declarations are recognized as such only by virtue of
starting with a reserved word that indicates a storage class or data
type, or with a typedef-name. Anything else (including a placeholder)
is interpreted as the beginning of an executable statement.
Thus, any placeholders that are intended to stand for declarations in
this context must follow all other real declarations that may be
present in the same context, or the compiler will issue a syntax
error. Of course, such placeholders will be interpreted by the
compiler as virtual statements (and will actually be ignored) so this
should not constitute a significant restriction.
There may also be situations where a user might want to use a
placeholder in the context of one or more of the storage class or data
type specifiers in a declaration. These specifiers are all reserved
words in C, however, and allowing placeholders in these contexts would
render the VAX C grammar ambiguous. Thus, any use of a placeholder in
such contexts will elicit a syntax error.
2.2.2.3 Examples -
The following examples show some valid contexts for placeholders in
VAX C.
#module {@identifier@} "{@31_char_string@}"
# <@some preprocessor directive@>
#include <{@file_spec_file@}>
#include "{@file_spec_string@}"
#include {@include_module_name@}
Page 7
#define {@identifier@}[@(parameter list)@] {@token_string@}
#define {@identifier@}([@parameter@]...) {@token_string@}
if {@constant_expression@}
#elif defined {@identifier@}
#else
#endif
extern int {@declarator@}...;
[@external_definition@]...;
main ([@parameters@]...)
{
static int x = {@init_constant_expression@},
y [[@constant_expression@]],
[@init_declarator@]...;
int f ([@parameters@]...),
g (int, <@parameter2@>, float);
[@block_decl@]...;
<@statement@>;
f ([@parameters@]...);
g (0, [@parameter2@], 7.4);
if ({@expression@})
{@statement@};
[@else if (expression) statement@];
[@else statement@];
while ({@expression@})
{@statement@};
do
<@statement@>;
while ({@expression@});
for ([@expression@]; [@expression@]; [@expression@])
<@statement@>;
switch ({@expression@})
{
{@case constant_expression: statement@}...;
case {@constant_expression@}:
[@case constant_expression:@]...;
{@statement@}...;
[@default: statement@];
}
return [@expression@];
}
Page 8
2.2.3 VAX C Support for PDF Comment Processing -
VAX C now contains support for PDF comment processing. The comments
in your source code are analyzed for the presence of comment tags,
such as FACILITY, ABSTRACT, and AUTHORS in the example below.
Information about the presence of these tags and the descriptions that
follow them is output to the .ANA file if the /ANALYSIS_DATA qualifier
is used. Refer to the documentation for LSE V3.0 and SCA V2.0 for
information on how to perform queries on the comments in your source
code.
/*
**++
** FACILITY:
**
** Test System
**
** ABSTRACT:
**
** This module belongs to the test system for XYZ.
**
** AUTHORS:
**
** John Q. Smith
**
**--
*/
PDF comment processing in VAX C is performed only for comments within
declaration sections of your program. Any comments which occur within
an executable portion of your program will not be processed.
2.3 RMS Header Files
The RMS header files have been updated to the latest version of VMS.
The files that have been updated are:
FAB.H NAM.H RAB.H
XAB.H
Each different type of XAB is now defined in its own header file.
However, XAB.H #includes all of the separate XAB definition files.
The new header files are:
XABALLDEF.H XABCXFDEF.H XABCXRDEF.H
XABDATDEF.H XABDEF.H XABFHCDEF.H
XABITMDEF.H XABJNLDEF.H XABKEYDEF.H
XABPRODEF.H XABRDTDEF.H XABRUDEF.H
XABSUMDEF.H XABTRMDEF.H
Page 9
2.4 Support for mixing /GFLOAT and /NOGFLOAT modules
Since you should now be using V5.2 or later of VMS, you can now mix
DFLOAT and GFLOAT modules in a single program. In particular, it is
possible to link modules using GFLOAT with the DECWINDOWS utilities.
In order to mix DFLOAT and GFLOAT modules, all modules which are to be
compiled with /GFLOAT should include the header files STDIO.H,
STDLIB.H, MATH.H, and UNIXLIB.H. Also, you should compile all such
modules with the additional qualifier /DEFINE="CC$mixedfloat". Note
that the quotation marks and alphabetic case are significant in
"CC$mixedfloat".
Modules compiled in this way may then be linked against VAXCRTL alone,
and should not be linked against VAXCRTLG. If you link against
VAXCRTLG.EXE, you cannot safely link against VAXCRTL.EXE. In the
past, that has meant that GFLOAT and DFLOAT could not be mixed in a
single program. The method described here allows the mixing of GFLOAT
and DFLOAT only if you link all modules against VAXCRTL.EXE or
VAXCRTL.OLB and not against VAXCRTLG.EXE or VAXCRTLG.OLB.
If you are linking against VAXCRTL.OLB, you will find a reduction in
executable size and a slight performance improvement if you also
compile all of your DFLOAT modules according to the guidelines
described above for GFLOAT modules.
Note also that there is still no way to mix DFLOAT and GFLOAT
operations within a single module. This change only allows modules
compiled with /DFLOAT to be mixed with modules compiled with /GFLOAT.
3 BUG FIXES
VAX C V3.1 and V3.2 contain several bug fixes and SPR fixes. Details
of changes made as a result of SPRs since V3.0 of VAX C can be found
in the file SYS$LIBRARY:VAXCSPR.DAT.
Several inlining bugs present in VAX C V3.0 are fixed.
VAX C V3.0 used large amounts of memory when the source program
contained many macro expansions. This problem has been fixed in V3.1.
However you may continue to notice that the version 3 compilers use
more memory than the version 2.4 compiler for certain programs. This
increased memory usage is a side effect of a performance optimization
called inlining which was added at V3.0. The inline optimization may
be turned off with the command qualifier /OPTIMIZE=NOINLINE.
The unmoved_src argument to the _MOVC5 builtin is now optional. A
last minute bug in VAX C V3.0 caused the compiler previously to
require that argument. This problem is fixed in V3.1.
Page 10
The value of RANDMAX in the header file STDLIB.H was incorrect due to
a typographical error. The corrected value is 2147483647, or 2**31 -
1. This problem is fixed in V3.1
The haddr field of the hostent structure in the header file netdb.h
has been changed to be char **haddrlist to conform to the actual use
of the field. You can still use haddr, though, since netdb.h now
defines haddr as a macro for haddrlist[0]. This problem is fixed in
V3.1.
The include file tcp.h was omitted from the release 3.0 of VAX C.
This header file is needed for use with the VMS/Ultrix Connection
product. It is included in version 3.1.
In version 3.1 header files now contain a macro which will prevent
reloading of an include file which has already been included.
The compiler was sometimes bugchecking while processing large macros.
This problem has been fixed in V3.2.
The compiler would sometimes go into an infinite loop when processing
old-style parameters declared to be an array. This problem has been
fixed in V3.2.
The following code would incorrectly result in the error that "bar" is
undeclared at the line where "bar" is assigned to "bar2".
typedef int (*template)( int bar );
int foo( int bar )
{
int bar2;
template t;
bar2 = bar;
} This problem is fixed in V3.2.
If the command line qualifier /OPTIMIZE=NOI was specified, inlining
was not disabled. This problem is fixed in v3.2.
In cases where the branch displacement for the _BBCCI and _BBSSI
builtins was greater than a byte, the builtin instruction was
incorrectly replaced by a bogus bsbb instruction. This is fixed in
v3.2.
Too much stack space was allocated by the compiler when calls were
made to functions that return a value, but the return value was never
referenced. This is fixed in v3.2.
When the _FFS or _FFS builtin was used in a conditional statement, the
the builtin status value was not correctly assigned to the status
Page 11
variable. This is fixed in v3.2.
The following problems related to the /ANALYSIS_DATA qualifier are
fixed in V3.2:
The reference class (store, fetch, call, address-of) of members
referenced was incorrectly propagated to the the structure or union
that the member belonged to. For instance, for the code sample:
(*(x.y))()
both x and y were given the reference class of "call". This problem
may result in errors during the SCA INSPECT command.
Casts to pointers to functions resulted in invalid ANA files.
When a prototype was in scope that declared a parameter to be of type
char, and the actual argument was a char, the argument was instead
described to be of type int. The same problem was existed for floats
and doubles.
When a header file was included multiple times, the inclusions
subsequent to the first were not reported in the ANA file.
When a include construct was the last construct of an include file,
the resulting ANA file was characterized as having the "Old ANA File
Format".
A cast to a pointer to an undeclared struct or union would result in a
compiler bugcheck.
If the return value of a function is a pointer to an undeclared struct
or union, the compiler would bugcheck.
The function prototype and function definition for a static function
were not reported as two declarations of the same symbol, resulting in
two symbols found for queries such as "FIND <staticfunction>".
The following problems related to the /DESIGN qualifier have been
fixed in V3.2:
When /DESIGN=COMMENTS was specified on sources where a comment was the
last construct of an include file, the resulting ANA file was
characterized as having the "Old ANA File Format".
For a declaration of the form "<storageclass> <typedefname>
<declarator>;" the lexical range for the declaration would begin at
<typedefname> instead of at <storageclass>, providing potentially
erroneous comment association when /DESIGN=COMMENTS was used.
The source location marked as the beginning of the executable portion
of a function body was the semicolon at the end of the last
declaration. This resulted in the body portion of PDF INTERNALS
REPORTS beginning with the last declaration, instead of the first
Page 12
executable statement.
When /DESIGN=COMMENTS was specified on sources that contained a
comment between a reference to a macro and its arguments, the
DESCOMSPR error message would be generated.
When /DESIGN=COMMENTS was specified on sources that contained a
comment within the test expression of a if directive, the DESCOMSPR
error message would be generated.
4 Documentation Errata
This section contains information on errors and missing information
from the manuals.
4.1 Guide to VAX C
Chapter 3 specifies that when you are compiling a VAX C compilation
unit containing the main function, you must link the program against
the VAXCPAR.OLB object module library. As of VMS V5.2, it is no
longer necessary to link against VAXCPAR.OLB.
In section 9.8.3, the description of the the _align storage class
modifier does not document the restrictions on its use. The _align
storage-class modifier may not be used in conjunction with the
storage-classes register and globalref, or in a parameter declaration.
It also may not be used with the const data-type modifier or the
noshare storage-class modifier. If _align is used with the auto
storage class, then the alignment boundary cannot be greater than
longword.
In section 11.2.14, the description of the "unmoved_src" operand of
the _MOVC5 builtin says that it "Is a pointer to a short integer..."
The description should say that it "Is a pointer to an unsigned short
integer..." The function prototypes at the start of the _MOVC5
section do show the correct type for this argument.
In Appendix B, the text of the UNSUPPORTOP informational message is
wrong. The correct text is:
Variable "****" has post/pre increment/decrement operator, which
inhibited decomposition at loop control variable "****".
In Appendix B, the MISWIDETYPE message is missing. The following
description should be included:
MISWIDETYPE, The prototype for this function does not specify
the default widened type for the parameter "****".
Page 13
Error. You have coded an "old-style" function definition for
which an earlier prototype declaration is in scope, and the data
type specified in the prototype corresponding to the indicated
parameter does not match the widened type of the parameter.
For example:
int f(float);
:
int f(x)
float x;
{
:
}
The prototype should specify the data type "double", even though
the declaration of "x" specifies "float". The "old-style" function
definition still expects its argument to have been promoted to
"double", and will convert it back to "float" upon accessing the
parameter "x".
User Action. Either specify the correct widened data type in the
prototype declaration, or use a prototype form of the definition.
4.2 VAX C Run-time Library Reference manual.
The index shipped with Version 3.1 and Version 3.2 of VAX C contains
errors. The page numbers listed for certain functions may be
incorrect. Since the functions are listed in alphabetical order you
may find it more helpful to search for things alphabetically, than to
use the page numbers listed in the index.
On the reference page for VAXC$ESTABLISH, the format should read:
void VAXC$ESTABLISH (int (*exception_handler)( void *sigarr,
void *mecharr));
On the reference pages for brk, chdir, chmod, chown, ctermid, cuserid,
mkdir, nice, sbrk, and umask, under format, the line
#include stdlib
should be removed.
On the reference pages for fstat and stat, under format, the lines
#include stat
#include statbuf
should be changed to:
Page 14
#include unixio
#include stat
On the reference pages for rand and srand, under format, the line
#include math
should be changed to:
#include stdlib
5 Additions and Changes to Compiler Diagnostic Messages
The severity of the UNRECCHAR diagnostic has been changed from Warning
to Error.
The following messages are new in V3.1:
DEFAULTLONG, Alignment boundary for an auto variable cannot be
greater than longword; boundary defaulted to longword.
Warning. You have specified an alignment greater than longword
for an automatic variable.
User Action. Choose an alignment boundary less than or equal to
longword for the automatic variable.
DESCOMABORT, /DESIGN=COMMENTS processing has been aborted.
Warning. An error has occurred during /DESIGN=COMMENTS
processing. /DESIGN=COMMENTS processing cannot continue.
User Action. Correct the problem described in the error message
that follows the DESCOMABORT message.
DESCOMERR, Error in processing design information.
Warning. An error has been found while processing the contents of
a comment.
User Action. Correct the problem described in the error message
that follows the DESCOMERR message.
DESCOMSEVERR, A serious error has occurred processing /DESIGN=COMMENTS.
Please submit an SPR.
Warning. A serious but recoverable error has occurred during
/DESIGN=COMMENTS processing. Comment processing will continue.
Page 15
User Action. Submit an SPR which includes the source code that
produces this error, and the version of LSE and SCA being used.
DESCOMSPR, /DESIGN=COMMENTS processing has been aborted due to
an internal error. Please submit an SPR.
Warning. An internal error has occurred during /DESIGN=COMMENTS
processing. Comment processing cannot continue.
User Action. Submit an SPR which includes the source code that
produces this error, and the version of LSE and SCA being used.
DESIGNTOOOLD, /DESIGN=COMMENTS processing routines are too old for
the compiler. Please install a new version of LSE.
Warning. VAX C requires a newer version of the /DESIGN=COMMENTS
processing routines.
User Action. Install a more recent version of LSE.
INVPTRCVT, Invalid implicit conversion between a pointer and a
non-pointer type.
Warning. An implicit conversion (caused by assignment or by
function prototype argument conversion) converted between
a pointer and an integer too small to hold the pointer or
between a pointer and a floating point number.
User Action. Verify that the assignment is being made to
the correct variable or that the correct function argument
is being passed. If the suspicious operation flagged by
this diagnostic really was intended, use an explicit cast
to avoid the implied conversion.
NESTEDDUPTAG, Duplicate definition of tag "****" is nested within
its definition.
Error. You have attempted to define a tag within a structure or
union which also defines the same tag.
User Action. Use a different name for the nested tag.
NONTERMPLACE, Nonterminated placeholder.
Warning. You have coded a placeholder that was not properly
terminated before the end of the source line.
User Action. Make sure that the ending delimiter of the placeholder
is present, and that it properly matches the opening delimiter.
Page 16
PLACENOCONT, Continuation of placeholders is not allowed.
Warning. You have attempted to continue a placeholder onto the
next source line, using the backslash-newline escape sequence.
User Action. Make sure that all placeholders are complete on
one source line. Break up long placeholders into a sequence of
shorter placeholders; the compiler will treat such a sequence
as if it were a single placeholder.
PLACENODESIGN, Placeholders are invalid without /DESIGN=PLACEHOLDERS.
Error. A placeholder has been encountered in the source, but you
have not specified /DESIGN=PLACEHOLDERS on the command line.
User Action. Remove the placeholder or replace it with source code,
or specify /DESIGN=PLACEHOLDERS.
PLACENOOBJ, Placeholder(s) detected; no object file generated.
Warning. You have specified both /DESIGN=PLACEHOLDERS and /OBJECT,
and one or more placeholders appear in the source. The presence of
placeholders prevents the generation of object code.
User Action. Specify /NOOBJECT along with /DESIGN=PLACEHOLDERS,
or remove or replace all placeholders.
PLACENOREP, Repetition of pseudocode placeholders is not allowed.
Warning. You have terminated a pseudocode placeholder with an
ellipsis.
User Action. Remove the ellipsis, or change the placeholder
delimiters to indicate a list-type placeholder.
PLACETOOLONG, Placeholder exceeds 255 characters.
Warning. An excessively lengthy placeholder has been encountered.
User Action. Break up the placeholder into a sequence of
shorter placeholders. The compiler will treat such a sequence
as if it were a single placeholder.
6 RESTRICTIONS AND KNOWN BUGS
The following are restrictions in V3.1:
Page 17
o As of V3.1, the only supported means of accessing the environ
variable is by first including UNIXLIB.H, rather than by
simply declaring char **environ, which is the current
practice.
The following are known bugs in V3.2:
o When using the /ANALYSIS_DATA qualifier, the compiler will
bugcheck on the definition of an enum within the declaration
of a struct or union. As a workaround, the enum should be
defined outside of the stuct or union, and the tag
refereneced within the struct or union declaration.
o If multiple compilation units are specified on the command
line along with the /DESIGN qualifier, the ANA files
generated for the compilation units subsequent to the first
one will be invalid.
o For declarations that reference typedefs for simple types
such as "int", PDF REPORTS will indicate that the type of the
variable is "int" instead of reporting the typedef name.
o A bugcheck may occur when a function is inlined that is
defined as returning a value and is then declared as void.
The following are known bugs in V3.1 and V3.2:
o When executing a parallel processing application multiple
times in succession, there should be a delay between the
executions. This is needed to allow VMS to complete the
unmapping of any global sections used by an application. The
unmapping is not completed when the image is executed. If
there is not enough time between executions of parallel
applications, there may not be enough global resources,
global pages, and/or global sections available to properly
execute additional invocations of parallel applications.
o Images using the VAX C parallel processing support cannot run
from a detached process where there is no CLI.
o There is a known interaction problem between the VAX C
parallel processing support, routines compiled with
/PARALLEL, and the run-time library PPL_$ routines. The
result of this problem is that the VAX C parallel processing
application completes, but the subprocesses that are created
during its execution are not properly deleted and are left in
a spin loop, using up CPU time. These subprocesses must be
stopped by the user. The easiest way to stop them is to
either log out of the account that executed the parallel
application or to explicitly stop them by identifying the
leftover subprocesses by using the DCL command SHOW
PROCESS/SUBPROCESSES and using the DCL STOP command on each
of these subprocesses.
Page 18
o PPL_$INITIALIZE cannot be called from within a C decomposed
program. When the C main program is compiled with /PARALLEL
the routine PPL_$INITIALIZE is automatically called to set up
the parallel processing environment for the parallel memory
allocation routines.
o The SCA command EXTRACT MODULE will not work properly on
modules compiled by VAX C when the source for the module
#include's files from a text library. The output from this
command will not go to an .ANA file with the expected name,
but will instead output to a file with the name of some file
associated with the module's compilation, such as an include
file or text library.
o The compiler may bugcheck when the _FFS builtin is used
within a loop.
o When using the /ANALYSIS_DATA qualifier, the compiler will
bugcheck on the definition of an enum within the declaration
of a struct or union. As a workaround, the enum should be
defined outside of the struct or union, and the tag
referenced within the struct or union declaration.
o If multiple compilation units are specified on the command
line along with the /DESIGN qualifier, the ANA files
generated for compilation units subsequent to the first one
will be invalid. This problem will be fixed in the next
major release of LSE after V3.1.