8.2 Messages 500 Thru 999
(500) undefined symbols: (Linker)
A list of symbols follows that were undefined at link time. These errors could be due to spelling error, or failure to link an appropriate module.
(501) program entry point is defined more than once (Linker)
END directive. The
                runtime startup code defines the entry point, for example:
                powerup:
goto start
END  powerup  ; end of file and define entry point
; other files that use END should not define another entry point
            (502) incomplete * record body: length = * (Linker)
An object file contained a record with an illegal size. This probably means the file is truncated or not an object file. Contact Microchip Technical Support with details.
(503) ident records do not match (Linker)
The object files passed to the linker do not have matching
                    ident records. This means they are for different device
                types.
(504) object code version is greater than *.* (Linker)
The object code version of an object module is higher than the highest version the linker is known to work with. Check that you are using the correct linker. Contact Microchip Technical Support if you have not patched the linker.
(505) no end record found inobject file (Linker)
An object file did not contain an end record. This probably means the file is corrupted or not an object file. Contact Microchip Technical Support if the object file was generated by the compiler.
(506) object file record too long: *+* (Linker)
This is an internal compiler error. Contact Microchip Technical Support with details.
(507) unexpected end of file in object file (Linker)
This is an internal compiler error. Contact Microchip Technical Support with details.
(508) relocation offset (*) out of range 0..*-*-1 (Linker)
This is an internal compiler error. Contact Microchip Technical Support with details.
(509) illegal relocation size: * (Linker)
There is an error in the object code format read by the linker. This either means you are using a linker that is out of date, or that there is an internal error in the assembler or linker. Contact Microchip Technical Support with details if the object file was created by the compiler.
(510) complex relocation not supported for -R or -L options (Linker)
The linker was given a -R or -L option
                with file that contain complex relocation.
(511) bad complex range check (Linker)
This is an internal compiler error. Contact Microchip Technical Support with details.
(512) unknown complex operator 0x* (Linker)
This is an internal compiler error. Contact Microchip Technical Support with details.
(513) bad complex relocation (Linker)
The linker has been asked to perform complex relocation that is not syntactically correct. Probably means an object file is corrupted.
(514) illegal relocation type: * (Linker)
An object file contained a relocation record with an illegal relocation type. This probably means the file is corrupted or not an object file. Contact Microchip Technical Support with details if the object file was created by the compiler.
(515) unknown symbol type * (Linker)
This is an internal compiler error. Contact Microchip Technical Support with details.
(516) text record has bad length: *-*-(*+1) < 0 (Linker)
This is an internal compiler error. Contact Microchip Technical Support with details.
(520) function “*” is never called (Linker)
This function is never called. This cannot represent a problem, but space could be saved by removing it. If you believe this function should be called, check your source code. Some assembler library routines are never called, although they are actually execute. In this case, the routines are linked in a special sequence so that program execution falls through from one routine to the next.
(521) call depth exceeded by function “*” (Linker)
The call graph shows that functions are nested to a depth greater than specified.
(522) library “*” is badly ordered (Linker)
This library is badly ordered. It will still link correctly, but it will link faster if better ordered.
(523) argument to -W option (*) illegal and ignored (Linker)
The argument to the linker option -w is out of range.
                This option controls two features. For warning levels, the range is -9 to 9. For the
                map file width, the range is greater than or equal to 10.
(524) unable to open list file “*”: * (Linker)
The named list file could not be opened. The linker would be trying to fixup the list file so that it will contain absolute addresses. Ensure that an assembler list file was generated during the compilation stage. Alternatively, remove the assembler list file generation option from the link step.
(525) too many address (memory) spaces; space (*) ignored (Linker)
The limit to the number of address spaces (specified with the
                    PSECT assembler directive) is currently 16.
(526) psect “*” not specified in -P option (first appears in “*”) (Linker)
This psect was not specified in a -P or
                    -A option to the linker. It has been linked at the end of the
                program, which is probably not where you wanted it.
(528) no start record; entry point defaults to zero (Linker)
None of the object files passed to the linker contained a start record.
                The start address of the program has been set to zero. This can be harmless, but it
                is recommended that you define a start address in your startup module by using the
                    END directive.
(529) usage: objtohex [-Ssymfile] [object-file [HEX-file]] (Objtohex)
Improper usage of the command-line tool objtohex. If
                you are not invoking this tool directly, this is an internal compiler error, and you
                should contact Microchip Technical Support with details.
(593) can’t find 0x* words (0x* withtotal) for psect “*” in segment “*” (Linker)
See message (491).
(594) undefined symbol: (Linker)
The symbol following is undefined at link time. This could be due to spelling error, or failure to link an appropriate module.
(595) undefined symbols: (Linker)
A list of symbols follows that were undefined at link time. These errors could be due to spelling error, or failure to link an appropriate module.
(596) segment “*” (*-*) overlaps segment “*” (*-*) (Linker)
The named segments have overlapping code or data. Check the addresses
                being assigned by the -P linker option.
(599) No psect classes given for COFF write (Cromwell)
CROMWELL requires that the program memory psect classes be specified to
                produce a COFF file. Ensure that you are using the -N option.
(600) No chip arch given for COFF write (Cromwell)
CROMWELL requires that the chip architecture be specified to produce a
                COFF file. Ensure that you are using the -P option.
(601) Unknown chip arch “*” for COFF write (Cromwell)
The chip architecture specified for producing a COFF file isn’t
                recognized by 
CROMWELL. Ensure that you are using the -P option,
                and that the architecture is correctly specified.
(602) null file format name (Cromwell)
The -I or -O option to CROMWELL must
                specify a file format.
(603) ambiguous file format name “*” (Cromwell)
The input or output format specified to CROMWELL is ambiguous. These
                formats are specified with the -i key and -o key
                options respectively.
(604) unknown file format name “*” (Cromwell)
cromwell -m -P16F877 main.HEX main.sym -ocotThere is no output file type of cot. Did you mean cof?
(605) did not recognize format of input file (Cromwell)
The input file to CROMWELL is required to have a Cromwell map file (CMF), COD, Intel HEX, Motorola HEX, COFF, OMF51, ELF, UBROF or HI-TECH format.
(606) inconsistent symbol tables (Cromwell)
This is an internal compiler error. Contact Microchip Technical Support with details.
(607) inconsistent line number tables (Cromwell)
This is an internal compiler error. Contact Microchip Technical Support with details.
(608) bad path specification (Cromwell)
This is an internal compiler error. Contact Microchip Technical Support with details.
(609) missing device spec after -P (Cromwell)
The -p option to CROMWELL must specify a device
                name.
(610) missing psect classes after -N (Cromwell)
CROMWELL requires that the -N option be given a list of
                the names of psect classes.
(611) too many input files (Cromwell)
To many input files have been specified to be converted by CROMWELL.
(612) too many output files (Cromwell)
To many output file formats have been specified to CROMWELL.
(613) no output file format specified (Cromwell)
The output format must be specified to CROMWELL.
(614) no input files specified (Cromwell)
CROMWELL must have an input file to convert.
(616) option -Cbaseaddr is illegal with options -R or -L (Linker)
The linker option -Cbaseaddr cannot be used in
                conjunction with either the -R or -L linker
                options.
(618) error reading COD file data (Cromwell)
An error occurred reading the input COD file. Confirm the spelling and path of the file specified on the command line.
(619) I/O error reading symbol table (Cromwell)
The COD file has an invalid format in the specified record.
(620) filename index out of range in line number record (Cromwell)
The COD file has an invalid value in the specified record.
(621) error writing ELF/DWARF section “*” on “*” (Cromwell)
An error occurred writing the indicated section to the given file. Confirm the spelling and path of the file specified on the command line.
(622) too many type entries (Cromwell)
This is an internal compiler error. Contact Microchip Technical Support with details.
(623) bad class in type hashing (Cromwell)
This is an internal compiler error. Contact Microchip Technical Support with details.
(624) bad class in type compare (Cromwell)
This is an internal compiler error. Contact Microchip Technical Support with details.
(625) too many files in COFF file (Cromwell)
This is an internal compiler error. Contact Microchip Technical Support with details.
(626) string lookup failed in COFF: get_string() (Cromwell)
This is an internal compiler error. Contact Microchip Technical Support with details.
(627) missing “*” in SDB file “*” line * column * (Cromwell)
This is an internal compiler error. Contact Microchip Technical Support with details.
(629) bad storage class “*” in SDB file “*” line * column * (Cromwell)
This is an internal compiler error. Contact Microchip Technical Support with details.
(630) invalid syntax for prefix list in SDB file “*” (Cromwell)
This is an internal compiler error. Contact Microchip Technical Support with details.
(631) syntax error at token “*” in SDB file “*” line * column * (Cromwell)
This is an internal compiler error. Contact Microchip Technical Support with details.
(632) can’t handle address size (*) (Cromwell)
This is an internal compiler error. Contact Microchip Technical Support with details.
(633) unknown symbol class (*) (Cromwell)
CROMWELL has encountered a symbol class in the symbol table of a COFF, Microchip COFF, or ICOFF file which it cannot identify.
(634) error dumping “*” (Cromwell)
Either the input file to CROMWELL is of an unsupported type or that file cannot be dumped to the screen.
(635) invalid HEX file “*” on line * (Cromwell)
The specified HEX file contains an invalid line. Contact Microchip Technical Support if the HEX file was generated by the compiler.
(636) error in Intel HEX file “*” on line * (Cromwell, Hexmate)
An error was found at the specified line in the specified Intel HEX file. The HEX file may be corrupt.
(637) unknown prefix “*” in SDB file “*” (Cromwell)
This is an internal compiler warning. Contact Microchip Technical Support with details.
(638) version mismatch: 0x* expected (Cromwell)
The input Microchip COFF file wasn’t produced using CROMWELL.
(639) zero bit width in Microchip optional header (Cromwell)
The optional header in the input Microchip COFF file indicates that the program or data memory spaces are zero bits wide.
(668) prefix list did not match any SDB types (Cromwell)
This is an internal compiler error. Contact Microchip Technical Support with details.
(669) prefix list matched more than one SDB type (Cromwell)
This is an internal compiler error. Contact Microchip Technical Support with details.
(670) bad argument to -T (Clist)
The argument to the -T option to specify tab size was
                not present or correctly formed. The option expects a decimal integer argument.
(671) argument to -T should be in range 1 to 64 (Clist)
The argument to the -T option to specify tab size was
                not in the expected range. The option expects a decimal integer argument ranging
                from 1 to 64 inclusive.
(673) missing filename after * option (Objtohex)
The indicated option requires a valid file name. Ensure that the filename argument supplied to this option exists and is spelled correctly.
(674) too many references to “*” (Cref)
This is an internal compiler error. Contact Microchip Technical Support with details.
(679) unknown extraspecial: * (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(680) bad format for -P option (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(681) bad common spec in -P option (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(685) bad putwsize() (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(686) bad switch size (*) (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(687) bad pushreg “*” (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(688) bad popreg “*” (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(689) unknown predicate “*” (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(691) interrupt functions not implemented for 12 bit PIC MCU (Code Generator)
The 12-bit (Baseline) range of PIC MCU processors do not support interrupts.
(692) more than one interrupt level is associated with the interrupt function “*” (Code Generator)
interrupt_level pragma has been used
                with the function specified. This pragma can be used more than once on main-line
                functions that are called from interrupt functions. For example:
                #pragma interrupt_level 0
#pragma interrupt_level 1  /* oops -- which is it to be: 0 or 1? */
void interrupt isr(void)
{(693) 0 (default) or 1 are the only acceptable interrupt levels for this function (Code Generator)
interrupt_level pragmas use these levels.
                #pragma interrupt_level 2  /* oops -- only 0 or 1 */
void interrupt isr(void)
{
    /* isr code goes here */
}
            (694) no interrupt strategy available (Code Generator)
The device does not support saving and subsequent restoring of registers during an interrupt service routine.
(695) duplicate case label (*) (Code Generator)
case labels with the same value in this
                    switch statement, for example:
                switch(in) {
case ’0’:  /* if this is case ’0’... */
    b++;
    break;
case ’0’:  /* then what is this case? */
    b--;
    break;
}
            (696) out-of-range case label (*) (Code Generator)
This case label is not a value that the controlling expression can yield, thus this label will never be selected.
(697) non-constant case label (Code Generator)
A case label in this switch statement has a value which
                is not a constant.
(698) bit variables must be global or static (Code Generator)
__bit variable cannot be of type auto. If you require
                a bit variable with scope local to a block of code or function, qualify it static,
                for example:
                bit proc(int a)
{
    bit bb;        /* oops --  this should be: static bit bb; */
    bb = (a > 66);
    return bb;
}
            (699) no case labels in switch (Code Generator)
case labels in this
                    switch statement, for example:
                switch(input) {
}               /* there is nothing to match the value of input */
            (700) truncation of enumerated value (Code Generator)
enum { ZERO, ONE, BIG=0x99999999 } test_case;
            (701) unreasonable matching depth (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(702) regused(): bad arg to G (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(703) bad GN (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(704) bad RET_MASK (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(705) bad which (*) after I (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(706) bad which in expand() (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(707) bad SX (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(708) bad mod “+” for how = “*” (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(709) metaregister “*” can’t be used directly (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(710) bad U usage (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(711) bad how in expand() (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(712) can’t generate code for this expression (Code Generator)
This error indicates that a C expression is too difficult for the code generator to actually compile. For successful code generation, the code generator must know how to compile an expression and there must be enough resources (i.e., registers or temporary memory locations) available. Simplifying the expression, i.e., using a temporary variable to hold an intermediate result, can often bypass this situation.
This error can also be issued if the code being compiled is unusual.
                For example, code which writes to a const-qualified object is
                illegal and will result in warning messages, but the code generator can
                unsuccessfully try to produce code to perform the write.
This error can also result from an attempt to redefine a function
                that uses the intrinsic pragma.
(713) bad initialization list (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(714) bad intermediate code (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(715) bad pragma “*” (Code Generator)
The code generator has been passed a pragma directive
                that it does not understand. This implies that the pragma you have
                used is not implemented for the target device.
(716) bad argument to -M option “*” (Code Generator)
The code generator has been passed a -M option that it
                does not understand. This should not happen if it is being invoked by a standard
                compiler driver.
(718) incompatible intermediate code version; should be *.* (Code Generator)
The intermediate code file produced by P1 is not the correct version for
                use with this code generator. This is either that incompatible versions of one or
                more compilers have been installed in the same directory, or a temporary file error
                has occurred leading to corruption of a temporary file. Check the setting of the
                    TEMP environment variable. If it refers to a long path name,
                change it to something shorter. Contact Microchip Technical Support with details if
                required.
(720) multiple free: * (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(721) element count must be constant expression (Code Generator)
const do not form
                such an expression.
                const unsigned char mCount = 5;
int mDeadtimeArr[mCount];  // oops -- the size cannot be a variable
            (722) bad variable syntax in intermediate code (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(723) function definitions nested too deep (Code Generator)
This error is unlikely to happen with C code, because C cannot have nested functions! Contact Microchip Technical Support with details.
(724) bad op (*) in revlog() (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(726) bad op “*” in uconval() (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(727) bad op “*” in bconfloat() (Code Generator)
This is an internal code generator error. Contact Microchip Technical Support with details.
(728) bad op “*” in confloat() (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(729) bad op “*” in conval() (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(730) bad op “*” ( Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(731) expression error with reserved word (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(732) initialization of bit types is illegal (Code Generator)
__bit cannot be initialized, for
                example:
                __bit b1 = 1; /* oops!  b1 must be assigned after its definition */
            (733) bad string “*” in pragma “psect” (Code Generator)
#pragma psect
                directive that has a badly formed string, for example:
                #pragma psect text  /* redirect text psect into what? */Possibly, you meant something like:
#pragma psect text=special_text
        (734) too many “psect” pragmas (Code Generator)
Too many #pragma psect directives have been used.
(735) bad string “*” in pragma “stack_size” (Code Generator)
The argument to the stack_size pragma is malformed.
                This pragma must be followed by a number representing the maximum allowed stack
                size.
(737) unknown argument “*” to pragma “switch” (Code Generator)
The #pragma switch directive has been used with an
                invalid switch code generation method. Possible arguments are:
                    auto, simple and direct.
(739) error closing output file (Code Generator)
The compiler detected an error when closing a file. Contact Microchip Technical Support with details.
(740) zero dimension array is illegal (Code Generator)
The code generator has been passed a declaration that results in an array having a zero dimension.
(741) bitfield too large (* bits) (Code Generator)
struct {
    unsigned flag  : 1;
    unsigned value : 12;  /* oops -- that’s larger than 8 bits wide */
    unsigned cont  : 6;
} object;
            (742) function “*” argument evaluation overlapped (Linker)
void fn1(void)
{
    fn3( 7, fn2(3), fn2(9));    /* Offending call */
}
char fn2(char fred)
{
    return fred + fn3(5,1,0);
}
char fn3(char one, char two, char three)
{
    return one+two+three;
}where fn1 is calling fn3 , and two
                arguments are evaluated by calling fn2 , which in turn calls
                    fn3. The program structure should be modified to prevent this
                type of call sequence.
(743) divide by zero (Code Generator)
An expression involving a division by zero has been detected in your code.
(744) static object “*” has zero size (Code Generator)
A static object has been declared, but has a size of
                zero.
(745) nodecount = * (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(746) object “*” qualified const but not initialized (Code Generator)
An object has been qualified as const, but there is no
                initial value supplied at the definition. As this object cannot be written by the C
                program, this can imply the initial value was accidentally omitted.
(747) unrecognized option “*” to -Z (Code Generator)
This is an internal compiler error. Contact Microchip Technical Support with details.
(748) variable “*” possibly used before being assigned a value (Code Generator)
int main(void)
{
    int a;
    if(a)         /* oops -- ’a’ has never been assigned a value */
        process();
}
            (749) unknown register name “*” used with pragma (Linker)
This is an internal compiler error. Contact Microchip Technical Support with details.
(750) constant operand to || or && (Code Generator)
|| or
                    && is a constant. Check the expression for missing or
                badly placed parentheses. This message can also occur if the global optimizer is
                enabled and one of the operands is an auto or static local variable whose value has
                been tracked by the code generator, for example:
                {
    int a;
    a = 6;
    if(a || b)  /* a is 6, therefore this is always true */
        b++;
            (751) arithmetic overflow in constant expression (Code Generator)
signed char c;
c = 0xFF;As a signed 8-bit quantity, c can only be assigned
                values -128 to 127. The constant is equal to 255 and is outside this range. If you
                mean to set all bits in this variable, then use either of:
c = ~0x0;
c = -1;
            which sets all the bits in the variable, regardless of variable size and without warning.
This warning can also be triggered by intermediate values overflowing. For example:
unsigned int i;  /* assume ints are 16 bits wide */
i = 240 * 137;   /* this should be okay, right? */
            A quick check with your calculator reveals that 240 * 137 is 32880
                which can easily be stored in an unsigned int, but a warning is
                produced. Why? Because 240 and 137 and both signed int values.
                Therefore the result of the multiplication must also be a signed
                    int value, but a signed int cannot hold the value
                32880. Both operands are constant values so the code generator can evaluate this
                expression at compile time, but it must do so following all the ANSI C rules. The
                following code forces the multiplication to be performed with an unsigned result: 
i = 240u * 137;  /* force at least one operand
to be unsigned */
        (752) conversion to shorter data type (Code Generator)
char a;
int b, c;
a = b + c;  /* int to char conversion can result in truncation */
            (753) undefined shift (* bits) (Code Generator)
int input;
input <<= 33;  /* oops -- that shifts the entire value out */
            (754) bitfield comparison out of range (Code Generator)
struct {
    unsigned mask : 2;  /* mask can hold values 0 to 3 */
} value;
int compare(void)
{
    return (value.mask == 6);  /* test can
}
            (755) divide by zero (Code Generator)
a /= 0;  /* divide by 0: was this what you were intending */
            (757) constant conditional branch (Code Generator)
A conditional branch (generated by an if,
                    for, while statement etc.) always follows the
                same path. This will be some sort of comparison involving a variable and a constant
                expression. For the code generator to issue this message, the variable must have
                local scope (either auto or static local) and the global optimizer must be enabled,
                possibly at higher level than 1, and the warning level threshold can need to be
                lower than the default level of 0.
The global optimizer keeps track of the contents of local variables for as long as is possible during a function. For C code that compares these variables to constants, the result of the comparison can be deduced at compile time and the output code hard coded to avoid the comparison, for example:
{
int a, b;
a = 5;
/* this can never be false; always perform the true statement */
if(a == 5)
    b = 6; 
            will produce code that sets a to 5, then immediately sets b to 6.
No code will be produced for the comparison if(a ==
                    5). If a was a global variable, it can be that other functions
                (particularly interrupt functions) can modify it and so tracking the variable cannot
                be performed.
This warning can indicate more than an optimization made by the compiler. It can indicate an expression with missing or badly placed parentheses, causing the evaluation to yield a value different to what you expected.
This warning can also be issued because you have written something
                like while(1). To produce an infinite loop, use
                    for(;;).
A similar situation arises with for loops, for example:
{
int a, b;
/* this loop must iterate at least once */
for(a=0; a!=10; a++)
    b = func(a);
            In this case the code generator can again pick up that a is assigned the value 0, then immediately checked to see if it is equal to 10. Because a is modified during the for loop, the comparison code cannot be removed, but the code generator will adjust the code so that the comparison is not performed on the first pass of the loop; only on the subsequent passes. This cannot reduce code size, but it will speed program execution.
(758) constant conditional branch: possible use of “=” instead of “==” (Code Generator)
if or other
                conditional construct, where a constant is being assigned to a variable. This can
                mean you have inadvertently used an assignment = instead of a
                    compare ==, for example:
                int a, b;
/* this can never be false; always perform the true statement */
if(a = 4)
    b = 6;will assign the value 4 to a, then , as the value
                of the assignment is always true, the comparison can be omitted and the assignment
                to b always made. Did you mean:
/* this can never be false;
always perform the true statement */
if(a == 4)
    b = 6;
            which checks to see if a is equal to 4.
(759) expression generates no code (Code Generator)
int fred;
fred;     /* this is valid, but has no effect at all */Some devices require that special function register need to be read to clear hardware flags. To accommodate this, in some instances the code generator does produce code for a statement which only consists of a variable ID. This can happen for variables which are qualified as volatile. Typically the output code will read the variable, but not do anything with the value read.
(760) portion of expression has no effect (Code Generator)
int a, b, c;
a = b,c;  /* "b" has no effect, was that meant to be a comma? */
            (761) size of yields 0 (Code Generator)
The code generator has taken the size of an object and found it to be zero. This almost certainly indicates an error in your declaration of a pointer; i.e., you can have declared a pointer to a zero length array. In general, pointers to arrays are of little use. If you require a pointer to an array of objects of unknown length, you only need a pointer to a single object that can then be indexed or incremented.
(762) constant truncated when assigned to bitfield (Code Generator)
struct INPUT {
    unsigned a : 3;
    unsigned b : 5;
} input_grp;
input_grp.a = 0x12;  /* oops -- 0x12 cannot fit into a 3-bit wide object */
            (763) constant left operand to “? :” operator (Code Generator)
? is
                constant, thus the result of the tertiary operator ? : will always
                be the same, for example:
                a = 8 ? b : c;  /* this is the same as saying a = b; */
            (764) mismatched comparison (Code Generator)
unsigned char c;
if(c > 300)      /* oops -- how can this be true? */
    close();
            (765) degenerate unsigned comparison (Code Generator)
unsigned char c;
if(c >= 0)
    ...will always be true, because an unsigned value can never be less than zero.
(766) degenerate signed comparison (Code Generator)
char c;
if(c >= -128)
    ...will always be true, because an 8 bit signed char has a maximum negative value of -128.
(767) constant truncated to bitfield width (Code Generator)
struct INPUT {
    unsigned a : 3;
    unsigned b : 5;
} input_grp;
input_grp.a |= 0x13;   /* oops -- 0x13 to large for 3-bit wide object */
            (768) constant relational expression (Code Generator)
unsigned int a;
if(a == -10)    /* if a is unsigned, how can it be -10? */
b = 9;
            (769) no space for macro definition (Assembler)
The assembler has run out of memory.
(772) include files nested too deep (Assembler)
Macro expansions and include file handling have filled up the assembler’s internal stack. The maximum number of open macros and include files is 30.
(773) macro expansions nested too deep (Assembler)
Macro expansions in the assembler are nested too deep. The limit is 30 macros and include files nested at one time.
(774) too many macro parameters (Assembler)
There are too many macro parameters on this macro definition.
(776) can’t allocate space for object “*” (offs: *) (Assembler)
The assembler has run out of memory.
(777) can’t allocate space for opnd structure within object “*” (offs: *) (Assembler)
The assembler has run out of memory.
(780) too many psects defined (Assembler)
There are too many psects defined! Boy, what a program!
(781) can’t enter abs psect (Assembler)
This is an internal compiler error. Contact Microchip Technical Support with details.
(782) REMSYM error (Assembler)
This is an internal compiler error. Contact Microchip Technical Support with details.
(783) “with” psects are cyclic (Assembler)
If Psect A is to be placed “with” Psect B, and Psect B is to be placed
                “with” Psect A, there is no hierarchy. The with flag is an
                attribute of a psect and indicates that this psect must be placed in the same memory
                page as the specified psect.
Remove a with flag from one of the psect declarations. Such an assembler declaration can look like:
psect my_text,local,class=CODE,with=basecode
            which will define a psect called my_text and place
                this in the same page as the psect basecode.
(784) overfreed (Assembler)
This is an internal compiler error. Contact Microchip Technical Support with details.
(785) too many temporary labels (Assembler)
There are too many temporary labels in this assembler file. The assembler allows a maximum of 2000 temporary labels.
(787) can’t handle “v_rtype” of * in copyexpr (Assembler)
This is an internal compiler error. Contact Microchip Technical Support with details.
(788) invalid character “*” in number (Assembler)
A number contained a character that was not part of the range 0-9 or 0-F.
(790) end of file inside conditional (Assembler)
END-of-FILE was encountered while scanning for an endif
                to match a previous if.
(793) unterminated macro argument (Assembler)
An argument to a macro is not terminated. Note that angle brackets,
                    < >, are used to quote macro arguments.
(794) invalid number syntax (Assembler)
The syntax of a number is invalid. This, for example, can be use of 8 or 9 in an octal number, or other malformed numbers.
(796) use of LOCAL outside macros is illegal (Assembler)
The LOCAL directive is only legal inside macros. It
                defines local labels that will be unique for each invocation of the macro.
(797) syntax error in LOCAL argument (Assembler)
A symbol defined using the LOCAL assembler directive in
                an assembler macro is syntactically incorrect. Ensure that all symbols and all other
                assembler identifiers conform with the assembly language of the target device.
(798) use of macro arguments in a LOCAL directive is illegal (Assembler)
LOCAL cannot
                include any of the formal parameters to an enclosing macro, for example:
                mmm MACRO a1
MOVE		r0, #a1
LOCAL		a1	; oops -- the parameter cannot be used with LOCAL
ENDM
            (799) REPT argument must be >= 0 (Assembler)
REPT directive must be greater than
                zero, for example:
                REPT -2						; -2 copies of this code? */
MOVE			r0, [r1]++
ENDM
            (800) undefined symbol “*” (Assembler)
The named symbol is not defined in this module and has not been
                specified GLOBAL.
(801) range check too complex (Assembler)
This is an internal compiler error. Contact Microchip Technical Support with details.
(802) invalid address after END directive (Assembler)
The start address of the program which is specified after the assembler
                    END directive must be a label in the current file.
(803) undefined temporary label (Assembler)
A temporary label has been referenced that is not defined. Note that a temporary label must have a number >= 0.
(804) write error on object file (Assembler)
The assembler failed to write to an object file. This can be an internal compiler error. Contact Microchip Technical Support with details.
(806) attempted to get an undefined object (*) (Assembler)
This is an internal compiler error. Contact Microchip Technical Support with details.
(807) attempted to set an undefined object (*) (Assembler)
This is an internal compiler error. Contact Microchip Technical Support with details.
(808) bad size in add_reloc() (Assembler)
This is an internal compiler error. Contact Microchip Technical Support with details.
(809) unknown addressing mode (*) (Assembler)
An unknown addressing mode was used in the assembly file.
(811) “cnt” too large (*) in display() (Assembler)
This is an internal compiler error. Contact Microchip Technical Support with details.
(814) device type not defined (Assembler)
The device must be defined either from the command line (e.g.,
                    -16c84), via the device assembler directive, or via the
                    LIST assembler directive.
(815) syntax error in chipinfo file at line * (Assembler)
The chipinfo file contains non-standard syntax at the specified line.
(816) duplicate ARCH specification in chipinfo file “*” at line * (Assembler, Driver)
The chipinfo file has a device section with multiple
                    ARCH values. Only one ARCH value is allowed.
                If you have not manually edited the chip info file, contact Microchip Technical
                Support with details.
(817) unknown architecture in chipinfo file at line * (Assembler, Driver)
An chip architecture (family) that is unknown was encountered when reading the chip INI file.
(818) duplicate BANKS for “*” in chipinfo file at line * (Assembler)
The chipinfo file has a device section with multiple
                    BANKS values. Only one BANKS value is allowed.
                If you have not manually edited the chip info file, contact Microchip Technical
                Support with details.
(819) duplicate ZEROREG for “*” in chipinfo file at line * (Assembler)
The chipinfo file has a device section with multiple
                    ZEROREG values. Only one ZEROREG value is
                allowed. If you have not manually edited the chip info file, contact Microchip
                Technical Support with details.
(820) duplicate SPAREBIT for “*” in chipinfo file at line * (Assembler)
The chipinfo file has a device section with multiple
                    SPAREBIT values. Only one SPAREBIT value is
                allowed. If you have not manually edited the chip info file, contact Microchip
                Technical Support with details.
(821) duplicate INTSAVE for “*” in chipinfo file at line * (Assembler)
The chipinfo file has a device section with multiple
                    INTSAVE values. Only one INTSAVE value is
                allowed. If you have not manually edited the chip info file, contact Microchip
                Technical Support with details.
(822) duplicate ROMSIZE for “*” in chipinfo file at line * (Assembler)
The chipinfo file has a device section with multiple
                    ROMSIZE values. Only one ROMSIZE value is
                allowed. If you have not manually edited the chip info file, contact Microchip
                Technical Support with details.
(823) duplicate START for “*” in chipinfo file at line * (Assembler)
The chipinfo file has a device section with multiple
                    START values. Only one START value is allowed.
                If you have not manually edited the chip info file, contact Microchip Technical
                Support with details.
(824) duplicate LIB for “*” in chipinfo file at line * (Assembler)
The chipinfo file has a device section with multiple
                    LIB values. Only one LIB value is allowed. If
                you have not manually edited the chip info file, contact Microchip Technical Support
                with details.
(825) too many RAMBANK lines in chipinfo file for “*” (Assembler)
The chipinfo file contains a device section with too many
                    RAMBANK fields. Reduce the number of values.
(826) inverted ram bank in chipinfo file at line * (Assembler, Driver)
The second HEX number specified in the RAM field in the
                chipinfo file must be greater in value than the first.
(827) too many COMMON lines in chipinfo file for “*” (Assembler)
There are too many lines specifying common (access bank) memory in the chip configuration file.
(828) inverted common bank in chipinfo file at line * (Assembler, Driver)
The second HEX number specified in the COMMON field in
                the chipinfo file must be greater in value than the first. Contact Microchip
                Technical Support if you have not modified the chipinfo INI file.
(829) unrecognized line in chipinfo file at line * (Assembler)
The chipinfo file contains a device section with an unrecognized line. Contact Microchip Technical Support if the INI has not been edited.
(830) missing ARCH specification for “*” in chipinfo file (Assembler)
The chipinfo file has a device section without an ARCH
                values. The architecture of the device must be specified. Contact Microchip
                Technical Support if the chipinfo file has not been modified.
(832) empty chip info file “*” (Assembler)
The chipinfo file contains no data. If you have not manually edited the chip info file, contact Microchip Technical Support with details.
(833) no valid entries in chipinfo file (Assembler)
The chipinfo file contains no valid device descriptions.
(834) page width must be >= 60 (Assembler)
LIST C=10  ; the page width will need to be wider than this
            (835) form length must be >= 15 (Assembler)
The form length specified using the -F length option
                must be at least 15 lines. Setting this length to zero is allowed and turns off
                paging altogether. The default value is zero (pageless).
(836) no file arguments (Assembler)
The assembler has been invoked without any file arguments. It cannot assemble anything.
(839) relocation too complex (Assembler)
The complex relocation in this expression is too big to be inserted into the object file.
(840) phase error (Assembler)
The assembler has calculated a different value for a symbol on two different passes. This is commonly due to the redefinition of a psect with conflicting delta values.
(841) bad source/destination for movfp/movpf instruction (Assembler)
The absolute address specified with the
                    movfp/movpf instruction is too large.
(842) bad bit number (Assembler)
A bit number must be an absolute expression in the range 0-7.
(843) a macro name can’t also be an EQU/SET symbol (Assembler)
EQU or SET symbol has been found
                with the same name as a macro. This is not allowed. For example:
                getval MACRO
MOV  r0, r1
ENDM
getval EQU 55h  ; oops -- choose a different name to the macro
            (844) lexical error (Assembler)
An unrecognized character or token has been seen in the input.
(845) symbol “*” defined more than once (Assembler)
_next:
MOVE		r0, #55
MOVE		[r1], r0
_next:           ; oops -- choose a different nameThe linker will issue this warning if the symbol (C or assembler) was defined multiple times in different modules. The names of the modules are given in the error message. Note that C identifiers often have an underscore prepended to their name after compilation.
(846) relocation error (Assembler)
It is not possible to add together two relocatable quantities. A constant can be added to a relocatable value and two relocatable addresses in the same psect can be subtracted. An absolute value must be used in various places where the assembler must know a value at assembly time.
(847) operand error (Assembler)
The operand to this opcode is invalid. Check your assembler reference manual for the proper form of operands for this instruction.
(848) label defined in this module has also been declared EXTRN (Assembler)
The definition for an assembly label and an EXTRN
                declaration for the same symbol, appear in the same module. Use
                    GLOBAL instead of EXTRN if you want this
                symbol to be accessible from other modules.
(849) illegal instruction for this device (Assembler)
The instruction is not supported by this device.
(850) PAGESEL not usable with this device (Assembler)
The PAGESEL pseudo-instruction is not usable with the
                device selected.
(851) illegal destination (Assembler)
The destination (either ,f or ,w ) is
                not correct for this instruction.
(852) radix must be from 2 - 16 (Assembler)
The radix specified using the RADIX assembler directive
                must be in the range from 2 (binary) to 16 (hexadecimal).
(853) invalid size for FNSIZE directive (Assembler)
The assembler FNSIZE assembler directive arguments must
                be positive constants.
(855) ORG argument must be a positive constant (Assembler)
ORG assembler directive must be a
                positive constant or a symbol which has been equated to a positive constant, for
                example:
                ORG -10  /* this must a positive offset to the current psect */
            (856) ALIGN argument must be a positive constant (Assembler)
The ALIGN assembler directive requires a non-zero
                positive integer argument.
(857) use of both local and global psect flags is illegal with same psect (Linker)
local psect cannot have the same name as a
                    global psect, for example:
                psect text,class=CODE       ; the text psect is implicitly global
MOVE		r0, r1
; elsewhere:
psect text,local,class=CODE
MOVE		r2, r4The global flag is the default for a psect if its
                scope is not explicitly stated.
(859) argument to C option must specify a positive constant (Assembler)
LIST assembler control’s
                    C= option (which sets the column width of the listing output)
                must be a positive decimal constant number, for example:
                LIST C=a0h  ; constant must be decimal and positive,
try: LIST C=80
            (860) page width must be >= 49 (Assembler)
The page width suboption to the LIST assembler
                directive must specify a width of at least 49.
(861) argument to N option must specify a positive constant (Assembler)
LIST assembler control’s
                    N option (which sets the page length for the listing output)
                must be a positive constant number, for example:
                LIST N=-3  ; page length must be positive
            (862) symbol is not external (Assembler)
A symbol has been declared as EXTRN but is also defined
                in the current module.
(863) symbol can’t be both extern and public (Assembler)
If the symbol is declared as extern, it is to be
                imported. If it is declared as public, it is to be exported from
                the current module. It is not possible for a symbol to be both.
(864) argument to “size” psect flag must specify a positive constant (Assembler)
PSECT assembler directive’s
                    size flag must be a positive constant number, for example:
                PSECT text,class=CODE,size=-200  ; a negative size?
            (865) psect flag “size” redefined (Assembler)
size flag to the PSECT assembler
                directive is different from a previous PSECT directive, for
                example:
                psect spdata,class=RAM,size=400
; elsewhere:
psect spdata,class=RAM,size=500
            (866) argument to “reloc” psect flag must specify a positive constant (Assembler)
PSECT assembler directive’s
                    reloc flag must be a positive constant number, for example:
                psect test,class=CODE,reloc=-4  ; the reloc must be positive
            (867) psect flag “reloc” redefined (Assembler)
reloc flag to the PSECT assembler
                directive is different from a previous PSECT directive, for
                example:
                psect spdata,class=RAM,reloc=4
; elsewhere:
psect spdata,class=RAM,reloc=8
            (868) argument to “delta” psect flag must specify a positive constant (Assembler)
PSECT assembler directive’s
                    DELTA flag must be a positive constant number, for example:
                PSECT text,class=CODE,delta=-2  ; negative delta value doesn’t make sense
            (869) psect flag “delta” redefined (Assembler)
The DELTA option of a psect has been redefined more than
                once in the same module.
(870) argument to “pad” psect flag must specify a positive constant (Assembler)
The parameter to the PSECT assembler directive’s
                    PAD flag must be a non-zero positive integer.
(871) argument to “space” psect flag must specify a positive constant (Assembler)
PSECT assembler directive’s
                    space flag must be a positive constant number, for example:
                PSECT text,class=CODE,space=-1  ; space values start at zero
            (872) psect flag “space” redefined (Assembler)
space flag to the PSECT assembler
                directive is different from a previous PSECT directive, for
                example:
                psect spdata,class=RAM,space=0
; elsewhere:
psect spdata,class=RAM,space=1
            (873) a psect can only be in one class (Assembler)
psect text,class=CODELook for other psect definitions that specify a different class name.
(874) a psect can only have one “with” option (Assembler)
psect bss,with=data
; elsewhere
psect bss,with=lktab  ; oops -- bss is to be linked with two psects
            (875) bad character constant in expression (Assembler)
MOV  r0, #’12’    ; ’12’ specifies two characters
            (876) syntax error (Assembler)
A syntax error has been detected. This could be caused a number of things.
(877) yacc stack overflow (Assembler)
This is an internal compiler error. Contact Microchip Technical Support with details.
(878) -S option used: “*” ignored (Driver)
The indicated assembly file has been supplied to the driver in
                conjunction with the -S option. The driver really has nothing to do
                because the file is already an assembly file.
(880) invalid number of parameters. Use “* –HELP” for help (Driver)
Improper command-line usage of the of the compiler’s driver.
(881) setup succeeded (Driver)
The compiler has been successfully setup using the
                    --setup driver option.
(883) setup failed (Driver)
The compiler was not successfully setup using the
                    --setup driver option. Ensure that the directory argument to
                this option is spelled correctly, is syntactically correct for your host operating
                system and it exists.
(884) please ensure you have write permissions to the configuration file (Driver)
--setup driver option because the driver was unable to access
                the XML configuration file. Ensure that you have write permission to this file. The
                driver will search the following configuration files in order: - the file specified by the environment variable XC_XML
 - the file /etc/xc.xml if the directory ’/etc ’ is writable and there is no .xc.xml file in your home directory
 - the file .xc.xml file in your home directory
 
If none of the files can be located, then the above error will occur.
(889) this * compiler has expired (Driver)
The demo period for this compiler has concluded.
(890) contact Microchip to purchase and re-activate this compiler (Driver)
The evaluation period of this demo installation of the compiler has expired. You will need to purchase the compiler to re-activate it. If you sincerely believe the evaluation period has ended prematurely, contact Microchip technical support.
(891) can’t open psect usage map file “*”: * (Driver)
The driver was unable to open the indicated file. The psect usage map
                file is generated by the driver when the driver option
                    --summary=file is used. Ensure that the file is not open
                in another application.
(892) can’t open memory usage map file “*”: * (Driver)
The driver was unable to open the indicated file. The memory usage map
                file is generated by the driver when the driver option
                    --summary=file is used. Ensure that the file is not open
                in another application.
(893) can’t open HEX usage map file “*”: * (Driver)
The driver was unable to open the indicated file. The HEX usage map file
                is generated by the driver when the driver option
                    --summary=file is used. Ensure that the file is not open
                in another application.
(894) unknown source file type “*” (Driver)
The extension of the indicated input file could not be determined. Only files with the extensions .as, .c, .obj, .usb, .p1, .lib or .hex are identified by the driver.
(895) can’t request and specify options in the one command (Driver)
The usage of the driver options --getoption and
                    --setoption is mutually exclusive.
(896) no memory ranges specified for data space (Driver)
No on-chip or external memory ranges have been specified for the data space memory for the device specified.
(897) no memory ranges specified for program space (Driver)
No on-chip or external memory ranges have been specified for the program space memory for the device specified.
(899) can’t open option file “*” for application “*”: * (Driver)
An option file specified by a --getoption or
                    --setoption driver option could not be opened. If you are using
                the --setoption option, ensure that the name of the file is spelled
                correctly and that it exists. If you are using the --getoption
                option ensure that this file can be created at the given location or that it is not
                in use by any other application.
(900) exec failed: * (Driver)
The subcomponent listed failed to execute. Does the file exist? Try re-installing the compiler.
(902) no chip name specified; use “* –CHIPINFO” to see available chip names (Driver)
The driver was invoked without selecting what chip to build for. Running
                the driver with the –CHIPINFO option will display a list of all
                chips that could be selected to build for.
(904) illegal format specified in “*” option (Driver)
The usage of this option was incorrect. Confirm correct usage with
                    --help or refer to the part of the manual that discusses this
                option.
(905) illegal application specified in “*” option (Driver)
The application given to this option is not understood or does not belong to the compiler.
(907) unknown memory space tag “*” in “*” option specification (Driver)
A parameter to this memory option was a string but did not match any valid tags. Refer to the section of this manual that describes this option to see what tags (if any) are valid for this device.
(908) exit status = * (Driver)
One of the subcomponents being executed encountered a problem and returned an error code. Other messages should have been reported by the subcomponent to explain the problem that was encountered.
(913) “*” option can cause compiler errors in some standard header files (Driver)
Using this option will invalidate some of the qualifiers used in the standard header files, resulting in errors. This issue and its solution are detailed in the section of this manual that specifically discusses this option.
(915) no room for arguments (Preprocessor, Parser, Code Generator, Linker, Objtohex)
The code generator could not allocate any more memory.
(917) argument too long (Preprocessor, Parser)
This is an internal compiler error. Contact Microchip Technical Support with details.
(918) *: no match (Preprocessor, Parser)
This is an internal compiler error. Contact Microchip Technical Support with details.
(919) * in chipinfo file “*” at line * (Driver)
The specified parameter in the chip configuration file is illegal.
(920) empty chipinfo file (Driver, Assembler)
The chip configuration file was able to be opened but it was empty. Try re-installing the compiler.
(922) chip “*” not present in chipinfo file “*” (Driver)
The chip selected does not appear in the compiler’s chip configuration file. Contact Microchip to see whether support for this device is available or it is necessary to upgrade the version of your compiler.
(923) unknown suboption “*” (Driver)
This option can take suboptions, but this suboption is not understood.
                This can just be a simple spelling error. If not,--help to look up
                what suboptions are permitted here.
(924) missing argument to “*” option (Driver)
This option expects more data but none was given. Check the usage of this option.
(925) extraneous argument to “*” option (Driver)
This option does not accept additional data, yet additional data was given. Check the usage of this option.
(926) duplicate “*” option (Driver)
This option can only appear once, but appeared more than once.
(928) bad “*” option value (Driver, Assembler)
The indicated option was expecting a valid hexadecimal integer argument.
(929) bad “*” option ranges (Driver)
This option was expecting a parameter in a range format
                        (start_of_range-end_of_range), but the
                parameter did not conform to this syntax.
(930) bad “*” option specification (Driver)
The parameters to this option were not specified correctly. Run the
                driver with --help or refer to the driver’s chapter in this manual
                to verify the correct usage of this option.
(931) command file not specified (Driver)
Command file to this application, expected to be found after
                    ’@’ or ’<’ on the command line was not
                found.
(939) no file arguments (Driver)
The driver has been invoked with no input files listed on its command line. If you are getting this message while building through a third party IDE, perhaps the IDE could not verify the source files to compile or object files to link and withheld them from the command line.
(940) *-bit * placed at * (Objtohex)
Presenting the result of the requested calculation.
(941) bad “*” assignment; USAGE: ** (Hexmate)
An option to Hexmate was incorrectly used or incomplete. Follow the usage supplied by the message and ensure that the option has been formed correctly and completely.
(942) unexpected character on line * of file “*” (Hexmate)
File contains a character that was not valid for this type of file, the
                file can be corrupt. For example, an Intel HEX file is expected to contain only
                ASCII representations of hexadecimal digits, colons (:) and line
                formatting. The presence of any other characters will result in this error.
(944) data conflict at address *h between * and * (Hexmate)
Sources to Hexmate request differing data to be stored to the same address. To force
                one data source to override the other, use the ‘+’ specifier with
                that source. If the two named sources of conflict are the same source, then the
                source can contain an error.
(945) range (*h to *h) contained an indeterminate value (Hexmate)
The range for this calculation contained a value that could not be resolved. This can happen if the result was to be stored within the address range of the calculation.
(948) result width must be between 1 and 4 bytes (Hexmate)
The requested byte size is illegal. Checksum results must be within 1 to 4 bytes
                wide. Check the parameters to the -CK option.
(949) start of range must be less than end of range (Hexmate)
The -CK option has been given a range where the start is greater
                than the end. The parameters can be incomplete or entered in the wrong order.
(951) start of fill range must be less than end of range (Hexmate)
The -FILL option has been given a range where the start
                is greater than the end. The parameters can be incomplete or entered in the wrong
                order.
(953) unknown -HELP sub-option: * (Hexmate)
Invalid sub-option passed to -HELP. Check the spelling
                of the sub-option or use -HELP with no sub-option to list all
                options.
(956) -SERIAL value must be between 1 and * bytes long (Hexmate)
The serial number being stored was out of range. Ensure that the serial number can be stored in the number of bytes permissible by this option.
(958) too many input files specified; * file maximum (Hexmate)
Too many file arguments have been used. Try merging these files in several stages rather than in one command.
(960) unexpected record type (*) on line * of “*” (Hexmate)
Intel HEX file contained an invalid record type. Consult the Intel HEX format specification for valid record types.
(962) forced data conflict at address *h between * and * (Hexmate)
Sources to Hexmate force differing data to be stored
                to the same address. More than one source using the ‘+’ specifier
                store data at the same address. The actual data stored there cannot be what you
                expect.
(963) range includes voids or unspecified memory locations (Hexmate)
The hash (checksum) range had gaps in data content. The runtime hash calculated is likely to differ from the compile-time hash due to gaps/unused byes within the address range that the hash is calculated over. Filling unused locations with a known value will correct this.
(964) unpaired nibble in -FILL value will be truncated (Hexmate)
The hexadecimal code given to the -FILL option contained
                an incomplete byte. The incomplete byte (nibble) will be disregarded.
(965) -STRPACK option not yet implemented; option will be ignored (Hexmate)
This option currently is not available and will be ignored.
(966) no END record for HEX file “*” (Hexmate)
Intel HEX file did not contain a record of type END. The
                HEX file can be incomplete.
(967) unused function definition “*” (from line *) (Parser)
The indicated static function was never called in the
                module being compiled. Being static, the function cannot be called
                from other modules so this warning implies the function is never used. Either the
                function is redundant, or the code that was meant to call it was excluded from
                compilation or misspelled the name of the function.
(968) unterminated string (Assembler)
A string constant appears not to have a closing quote.
(969) end of string in format specifier (Parser)
The format specifier for the printf() style function is
                malformed.
(970) character not valid at this point in format specifier (Parser)
The printf() style format specifier has an illegal
                character.
(971) type modifiers not valid with this format (Parser)
Type modifiers cannot be used with this format.
(972) only modifiers “h” and “l” valid with this format (Parser)
Only modifiers h (short) and
                    l (long) are legal with this printf format
                specifier.
(973) only modifier “l” valid with this format (Parser)
The only modifier that is legal with this format is l
                (for long).
(974) type modifier already specified (Parser)
This type modifier has already be specified in this type.
(975) invalid format specifier or type modifier (Parser)
The format specifier or modifier in the printf-style string is illegal for this particular format.
(976) field width not valid at this point (Parser)
A field width cannot appear at this point in a printf()
                type format specifier.
(978) this identifier is already an enum tag (Parser)
struct or
                    union keyword is already the tag for an enumerated type, and
                thus should only follow the keyword enum, for example:
                enum IN {ONE=1, TWO};
struct IN {             /* oops -- IN is already defined */
    int a, b;
};
            (979) this identifier is already a struct tag (Parser)
union or
                    enum keyword is already the tag for a structure and should only
                follow the keyword struct, for example:
                struct IN {
    int a, b;
};
enum IN {ONE=1, TWO};  /* oops -- IN is already defined */
            (980) this identifier is already a union tag (Parser)
struct or
                    enum keyword is already the tag for a union
                and  should only follow the keyword union, for example:
                union IN {
    int a, b;
};
enum IN {ONE=1, TWO};  /* oops -- IN is already defined */
            (981) pointer required (Parser)
struct DATA data;
data->a = 9;      /* data is a structure, not a pointer to a structure */
            (982) unknown op “*” in nxtuse() (Assembler)
This is an internal compiler error. Contact Microchip Technical Support with details.
(983) storage class redeclared (Parser)
A variable previously declared as being static , has
                now be redeclared as extern.
(984) type redeclared (Parser)
int a;
char a;  /* oops -- what is the correct type? */
            (985) qualifiers redeclared (Parser)
This function or variable has different qualifiers in different declarations.
(986) enum member redeclared (Parser)
A member of an enumeration is defined twice or more with differing values. Does the member appear twice in the same list or does the name of the member appear in more than one enum list?
(987) arguments redeclared (Parser)
The data types of the parameters passed to this function do not match its prototype.
(988) number of arguments redeclared (Parser)
The number of arguments in this function declaration does not agree with a previous declaration of the same function.
(989) module has code below file base of *h (Linker)
This module has code below the address given, but the -C
                option has been used to specify that a binary output file is to be created that is
                mapped to this address. This would mean code from this module would have to be
                placed before the beginning of the file! Check for missing psect
                directives in assembler files.
(990) modulus by zero in #if; zero result assumed (Preprocessor)
#if expression has a zero
                divisor. The result has been assumed to be zero, for example:
                #define ZERO 0
#if FOO%ZERO    /* this will have an assumed result of 0 */
#define INTERESTING
#endif
            (991) integer expression required (Parser)
enum declaration, values can be assigned to the
                members, but the expression must evaluate to a constant of type
                int, for example:
                enum {one = 1, two, about_three = 3.12};
/* no non-int values allowed */
            (992) can’t find op (Assembler)
This is an internal compiler error. Contact Microchip Technical Support with details.
(993) some command-line options are disabled (Driver)
The compiler is operating in demo mode. Some command-line options are disabled.
(994) some command-line options are disabled and compilation is delayed (Driver)
The compiler is operating in demo mode. Some command-line options are disabled, the compilation speed will be slower.
(995) some command-line options are disabled; code size is limited to 16kB, compilation is delayed (Driver)
The compiler is operating in demo mode. Some command-line options are disabled; the compilation speed will be slower, and the maximum allowed code size is limited to 16 KB.
(996) unknown relocation type (*) (Assembler)
While processing an assembly file, the assembler has encountered a relocatable operation in an expression that it does not know about. This is likely an internal error. Contact Microchip Technical Support with details.
