|
|
Microsoft OS/2 SDK 12-15-1987
(C) Copyright Microsoft Corporation, 1987
Microsoft(R) C Optimizing Compiler Version 5.00
ERRMSG.DOC
This document describes added and changed error and warning messages for the
Microsoft C Optimizing Compiler, Version 5.0. The information contained in
this document is more up to date than that in the printed manuals.
Compiler and Run-Time Errors
Deleted Messages
----------------
Error message C2049, warning message C4043, and run-time error R6004 are
no longer generated.
Changed Messages
----------------
Error message C1013 has been changed to read as follows:
C1013 cannot open source file 'filename'
Error C2003 has been changed to read as follows:
C2003 Expected 'defined id'
Error message C2085 has been changed to read as follows:
C2085 'identifier' : not in formal parameter list
Error message C2095 has been changed to read as follows:
C2095 function : actual has type void : parameter number
An attempt was made to pass a void argument to a function. The
given number identifies which argument was in error.
Formal parameters and arguments to functions cannot have type void;
they can, however, have type "void *" (pointer to void).
Warning message C4013 "constant too big" has been changed to error
message C2177.
Warning message C4016 has been changed to read as follows:
C4016 '<name>' : no function return type, using 'int' as
default
Warning message C4079 has been changed to read as follows:
C4079 unexpected token <token>
New Messages
------------
In the following messages, the number in parentheses after a warning message
indicates the minimum warning level that must be set for the warning to appear:
C1015 cannot open include file 'filename'
The given include file either did not exist, could not be opened,
or was not found. Make sure your environment settings are valid and
that you have given the correct path name for the file.
C1058: floating point expression too complex - would overflow NDP stack
A floating-point expression was too complex for the compiler to handle,
as in the following example:
double f(a, b, c, d, e, f, g, h, i, j)
double a, b, c, d, e, f, g, h, i, j;
{
return ( a / ( b / ( c / ( d / ( e / ( f / ( g / ( h /
( i / j ) ) ) ) ) ) ) ) );
}
Try breaking up the expression that caused the error and recompiling.
C1062 error writing to preprocessor output file
You compiled with the /P, /E, or /EP option to produce a preprocessor
output file, but not enough room was available to hold the file.
C2164 '<function>' : intrinsic was not declared
You did not declare the given function before using it in an intrinsic
pragma. This error appears only if you compile with the /Oi option.
C2166 lval specifies 'const' object
An attempt was made to modify an item declared with const type.
C2172 <function> : actual is not a pointer : parameter <number>
An attempt was made to pass a non-pointer argument to a function
that expected a pointer. The given number indicates which argument
was in error.
C2173 <function> : actual is not a pointer : parameter <number> :
parameter list <number>
An attempt was made to pass a non-pointer argument to a function that
expected a pointer. This error occurs in calls that return a pointer
to a function. The first number indicates which argument was in error;
the second number indicates which argument list contained the invalid
argument.
C2174 <function> : actual has type void : parameter <number>,
parameter list <number>
An attempt was made to pass a void argument to a function.
Formal parameters and arguments to functions cannot have type
void; they can, however, have type "void *" (pointer to void).
This error occurs in calls that return a pointer to
a function. The first number indicates which argument was in error;
the second number indicates which argument list contained the invalid
argument.
C2178 '<name>' : storage class for same_seg variables must be 'extern'
The given variable was specified in a same_seg pragma, but it was not
declared with extern storage class.
C2179 '<name>' : was used in same_seg, but storage class is no
longer 'extern'
The given variable was specified in a same_seg pragma, but it was
redeclared with a storage class other than extern, as in the following
example:
extern int i,j;
#pragma same_seg(i,j)
int i;
C2180 controlling expression has type 'void'
The controlling expression in an if, while, for, or do statement
was a function with void return type.
C2182 '<name>' : 'void' on variable
The given variable was declared with the void keyword. The void
keyword can be used only in function declarations.
C2183 <name> : 'interrupt' function must be 'far'
The given interrupt function was implicitly or explicitly declared to be
near. You must declare the function without the near attribute, and if
you compile the program with the default (small) or compact memory
model, you must explicitly declare the function with the far attribute.
C2184 <name> : 'interrupt' function cannot be 'pascal/fortran'
The given interrupt function was declared with the FORTRAN/Pascal calling
convention, either because the fortran or pascal attribute was used in the
declaration or because the program was compiled with the /Gc option.
Functions declared with the interrupt attribute are required to use the C
calling conventions. Therefore, you must either declare the function without
the fortran or pascal attribute if you compile the program without the /Gc
option, or declare the function with the cdecl attribute if you compile
the program with the /Gc option.
C4054 insufficient memory may affect optimization
Not enough memory was available to perform all of the requested
optimizations. This message appears if available memory is
within 64K of the absolute minimum that will accommodate the
executable file.
C4078 loss of debugging information caused by optimization
Because of the requested optimization, the compiler could not generate
debugging information.
C4088 '<function>' : pointer mismatch : parameter <number>
parameter list <number>
The pointer argument in the given function call did not have the same type as
the pointer argument in the function prototype, as in the following example:
int (*foo(int,int))(char *);
.
.
.
main()
{
int i;
(*foo(10,20))(i);/* pointer mismatch : parameter 1,
parameter list 2. */
}
C4089 'function' : different types : parameter int parameter list int
The argument in the given function call did not have the same type as
the argument in the function prototype.
C4098 void function returning a value
A function declared with void return type also returned a value, as
in the following example:
void func()
{
.
.
.
return(10);
}
C4100 '<name>' : unreferenced formal parameter
The given formal parameter was never referenced in the body of the
function for which it was declared. (3)
C4101 '<name>' : unreferenced local variable
The given local variable was never used. (3)
C4102 '<name>' : unreferenced label
The given label was defined but never referenced. (3)
C4103 '<name>' : function definition used as prototype
A function definition appeared before its prototype in the program. (3)
C4104 : '<identifier>' : near data in same_seg pragma, ignored
The given near variable was specified in a same_seg pragma, as in
the following example:
extern int near near_var;
extern int far far_var;
#pragma same_seg(near_var, far_var);
In this example, the compiler ignores the specification of near_var;
consequently, it does not assume that near_var and far_var reside
in the same data segment.
C4105 <name> : 'interrupt' must be function/pointer to function
The interrupt attribute was used to declare something other than a function
or function pointer.
C4185 near call to <function> in different segment
You specified the given function in an alloc_text pragma without declaring it
to be far, then called this function from another text segment, as in the
following example:
int f();
#pragma alloc_text(NEW, f)
main()
{
f();
}
f()
{
}
In this example, the main function (in default text segment) makes a near call
to the f function (in the text segment NEW). The error generated is
C4185: near call to _f in different segment
Although this is a warning message rather than an error message, THE RESULTING
CODE WILL NOT WORK CORRECTLY.
Note that if you compile with stack checking enabled (the default), you would
also get the following error message for the f function:
C4185: near call to __chkstk in different segment
LINK Linker
Changed Messages
----------------
The explanation for fatal-error message L1008 is changed as follows:
The /SEGMENTS option specified a limit greater than 3072 on the
number of segments allowed.
Error message L1009 has been changed to read as follows:
L1009 <number> : CPARMAXALLOC : illegal value
Error message L1053 has been changed to read as follows:
L1053 out of memory for symbol table
The program had more symbolic information (such as public, external,
segment, group, class, and file names) than the amount that could fit
in available real memory.
Try freeing memory by linking from the DOS command level instead of
from a MAKE file or from an editor. Otherwise, combine modules or
segments and try to eliminate as many public symbols as possible.
Fatal error L1123 has been removed.
Warning message L4050 has been changed as follows:
L4050 too many public symbols for sorting
The linker uses the stack and all available memory in the
near heap to sort public symbols for the /MAP option. If
the number of public symbols exceeds the space available
for them, this warning is issued and the symbols are not
sorted in the map file but listed in arbitrary order.
New Messages
------------
L1003 /QUICKLIB, /EXEPACK incompatible
You cannot link with both the /QU option and the /E option.
L1115 /QUICKLIB, overlays incompatible
You specified overlays and used the /QUICKLIB option.
These cannot be used together.
L2013 LIDATA record too large
An LIDATA record contained more than 512 bytes. This is
probably a compiler error.
L2041 stack plus data exceed 64K
The total of near data and requested stack size exceeds 64K,
and the program will not run correctly. Reduce the stack size.
The linker only checks for this condition if /DOSSEG
is enabled, which is done automatically in the library
startup module.
L2043 Quick Library support module missing
When creating a Quick library, you did not link with the required
QUICKLIB.OBJ module.
L2044 <name> : symbol multiply defined, use /NOE
The linker found what it interprets as a public-symbol
redefinition, probably because you have redefined a symbol that
is defined in a library. Relink with the /NOEXTDICTIONARY
(/NOE) option. If error L2025 results for the same symbol, then you
have a genuine symbol-redefinition error.
L4003 intersegment self-relative fixup at <offset> in segment <name>
pos: <offset> Record type: 9C target external '<name>'
The linker found an intersegment self-relative fixup. This error
may be caused by compiling a small-model program with the /NT
option.
L4034 more than 239 overlay segments; extra put in root
Your program designated more than the limit of 239 segments to
go in overlays. Starting with the 234th segment, they are assigned to
the root (that is, the permanently resident portion of the program).
Dynamic-Link-Specific Messages
------------------------------
These messages are specific to linking OS/2 or Windows
applications and dynlink libraries.
L1005 <option> : packing limit exceeds 65536 bytes
The value specified following the /PACKCODE option
exceeds 65536, which is the limit.
L1030 missing internal name
You specified an IMPORT by ordinal in the definitions
file without including the internal name of the routine.
The name must be given if the import is by ordinal.
L1031 module description redefined
You specified a DESCRIPTION in the definitions file more
than once. Only one is allowed.
L1032 module name redefined
You specified the module name via a NAME or LIBRARY
statement more than once. Once is the limit.
L1040 too many exported entries
Your definitions file included more than 3072 exported
names. 3072 is the limit.
L1041 resident-name table overflow
The size of the resident name table exceeds 65,534 bytes.
An entry in the resident names table is made for each
EXPORT'ed routine designated RESIDENTNAME, and consists
of the name plus three bytes of information. The first
entry is the module name. Reduce the number of exported
routines or change some to nonresident.
L1042 nonresident-name table overflow
The size of the nonresident name table exceeds 65,534
bytes. An entry in the nonresident names table is made
for each EXPORT'ed routine not designated RESIDENTNAME,
and consists of the name plus three bytes of information.
The first entry is the DESCRIPTION. Reduce the number of
exported routines or change some to resident.
L1044 imported-name table overflow
The size of the imported names table exceeds 65,534
bytes. An entry in the imported names table is made for
each new name given in the IMPORTS section, including the
module names, and consists of the name plus one byte.
Reduce the number of imports.
L1073 file-segment limit exceeded
The number of physical or file segments exceeds 254
which is the limit imposed by OS/2 protected mode and Windows
for each application or dynamic link library. A file segment
is created for each group definition, or for each logical
segment which is not packed, or each set of packed segments.
Reduce the number of segments, group more of them and
make sure /PACKCODE is enabled.
L1074 <name> : group larger than 64K bytes
The given group exceeds 65,536 bytes, which is the limit
because each group is assigned to a single physical segment.
Reduce the size of the group, or make sure no unwanted segments
are in the group (look at the map file).
L1075 entry table larger than 65535 bytes
The entry table exceeds the limit. An entry in this table
is created for each exported routine, and also for each
address which is the target of a far relocation and for which
one of the following conditions is true:
- the target segment is designated IOPL
- PROTMODE is not enabled and the target segment is
designated MOVABLE
Declare PROTMODE if applicable, or reduce the number of
exported routines, or make some segments FIXED or NOIOPL
if possible.
L1082 stub .EXE file not found
The linker could not open the file given in the STUB
statement in the definitions file.
L1092 cannot open module definitions file
The linker could not open the definitions file specified
on the command line or response file.
L1100 stub .EXE file invalid
The file specified in the STUB statement is not a valid
DOS3 (OS/2 realmode) executable file.
L2000 imported starting address
The program starting address as specified in the END
statement in a MASM file is an imported routine. This
is not supported in OS/2 or Windows.
L2010 too many fixups in LIDATA record
The number of far relocations (pointer- or base-type) in an
LIDATA record, which is typically produced by the DUP statement
in a .ASM file, exceeds the limit imposed by the linker.
The limit is dynamic: a 1024-byte buffer is shared by
relocations and the contents of the LIDATA record, and there
are eight bytes per relocation. Reduce the number of far
relocations in the DUP statement.
L2022 <name1> (alias <internalname>) : export undefined
The internal name of the given exported routine is undefined.
L2023 <name1> (alias <internalname>) : export imported
The internal name name of the given exported routine
conflicts with the internal name of a previously exported
routine. The set of imported and exported names must not
overlap.
L2026 entry ordinal <number>, name <name> : multiple definitions for
same ordinal
The given exported name with the given ordinal number
conflicted with a different exported name previously
assigned to the same ordinal. At most one name can be
associated with a particular ordinal.
L2027 <name> : ordinal too large for export
The given exported name was assigned an ordinal which
exceeded 3072, which is the limit.
L2028 automatic data segment plus heap exceed 64K
The total size of data declared in DGROUP plus the value
given in HEAPSIZE in the definitions file, plus the stack
size given by the /STACKSIZE option or or STACKSIZE definitions
file statement, exceeds 64K. Reduce near data allocation,
stack, or HEAPSIZE.
L2030 starting address not code (use class 'CODE')
The program starting address, as specified in the END
statement of a .ASM file, is not in a code segment (code
segments are recognized if their class name ends in 'CODE').
This is an error in OS/2 protected mode; the error message may
be disabled by including the statement REALMODE in the definitions
file.
L4000 seg disp. included near <offset> in segment <name>
This is the warning generated by the /WARNFIXUP option.
Refer to documentation on that option.
L4001 frame-relative fixup, frame ignored near <offset> in segment <name>
A reference is made relative to a segment which is different
from the target segment of the reference. This does not make
sense in OS/2 protected mode or Windows. For example, if _foo
is defined in segment _TEXT, the instruction "call DGROUP:_foo"
will result in this warning. The frame DGROUP is ignored, so
the linker will treat the call as if it were "call _TEXT:_foo".
L4002 frame-relative absolute fixup near %04x in segment %s
A reference is made similar to the type described in
L4001, but both segments are absolute (defined with AT).
It is unclear what this means in OS/2 protected mode or
Windows; the linker treats it as if it were real mode.
L4010 invalid alignment specification
The number specified in the /ALIGNMENT option must be
a power of 2 in the range 2 to 32768, inclusive.
L4011 PACKCODE value exceeding 65500 unreliable
The packing limit specified with the /PACKCODE option
was between 65500 and 65536. Code segments with a size
in this range are unreliable on some steppings of the
80286 processor.
L4013 invalid option for new-format executable file ignored
The options /CPARMAXALLOC, /DSALLOCATION, /NOGROUPASSOCIATION,
and currently /EXEPACK, as well as overlays, are disallowed for
OS/2 protected mode and Windows executables.
L4014 invalid option for old-format executable file ignored
The /ALIGNMENT option is invalid for DOS3 (OS/2 realmode)
executables.
L4022 <group1>, <group2> : groups overlap
The named groups overlap; since a group is assigned to
a physical segment, this is invalid for OS/2 protect mode
and Windows executables. Reorganize segments and group
definitions so the groups do not overlay; look at the map file.
L4023 <name>(<internal name>) : export internal name conflict
The internal name of the given exported routine conflicted
with internal name of a previous import or export definition.
L4024 <name> : multiple definitions for export name
The given name was exported more than once.
L4025 <dynlib>.<import>(<name>) : import internal name conflict
The internal name of the given imported routine (<import> is
either a name or a number) conflicted with the internal name
of a previous export or import.
L4026 <dynlib>.<import>(<name>) : self-imported
The given imported routine was imported from the module
being linked. This is not supported on some systems.
L4027 <name> : multiple definitions for import internal-name
The given internal name was imported more than once.
Previous import definitions are ignored.
L4028 <name> : segment already defined
The given segment was defined more than once in the
SEGMENTS statement of the definitions file.
L4029 <name> : DGROUP segment converted to type data
The given logical segment in the group DGROUP was defined
as a code segment. DGROUP has special meaning to the linker
as the automatic or default data segment and must be of type
data, so the linker converts the type of the named segment
to data.
L4030 <name> : segment attributes changed to conform with
automatic data segment
The given logical segment in the group DGROUP was given
sharing attributes (SHARED/NONSHARED) which differed from
the automatic data attributes as declared by
DATA INSTANCE/MULTIPLE. The attributes are converted to
conform to those of DGROUP. See note in L4029 about DGROUP.
L4032 <name> : code-group size exceeds 65500 bytes
The given code group has a size between 65500 and 65536,
which is unreliable on some steppings of the 80286
processor.
L4036 no automatic data segment
The application did not define a group named "DGROUP".
DGROUP has special meaning to the linker which uses it to
identify the automatic or default data segment used by the
operating system. Most OS/2 protected mode and Windows
applications require DGROUP. This warning will not be issued
if "DATA NONE" is declared or if the executable is a
dynlink library.
L4042 cannot open old version
The file specified in the OLD statement in the definitions
file could not be opened.
L4043 old version not segmented-executable format
The file specified in the OLD statement in the definitions
file was not a valid OS/2 protected mode or Windows executable.
L4046 module name different from output file name
The name of the executable as specified in the NAME or
LIBRARY statement is different from the output file name.
This may cause problems; consult documentation for your
operating system.
LIB Library-Maintenance Utility
Changed Messages
----------------
Warning messages U4152, U4155, and U4157-U4159 for the Microsoft LIB Library
Manager are now nonfatal error messages U2152, U2155, and U2157-U2159,
respectively.
Warning message U4151 has been changed to read as follows:
U4151 '<name>' : symbol defined in module <name>, redefinition ignored
New Messages
------------
The following new warning messages have been added for LIB:
U4155 <modulename> : module not in library
A module specified to be replaced does not already exist in the
library. LIB adds the module anyway.
U4157 insufficient memory, extended dictionary not created
U4158 internal error, extended dictionary not created
For the reason indicated, LIB could not create an extended
dictionary. The library is still valid, but the linker
will not be able to take advantage of of the extended dictionary
to speed linking.
MAKE Program-Maintenance Utility
New Message
-----------
U1015: <file> : error redirection failed
This error occurs if the /X option is given and error output cannot
be redirected to the given file (for example, because the file
is read-only).
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.