C.6 Code generator messages

This section lists all messages that can be displayed if the code generator encounters an error condition.

Error: BREAK not allowed
You’re trying to use break outside a loop construction.
Error: CONTINUE not allowed
You’re trying to use continue outside a loop construction.
Error: Expression too complicated - FPU stack overflow
Your expression is too long for the compiler. You should try dividing the construct over multiple assignments.
Error: Illegal expression
This can occur under many circumstances. Mostly when trying to evaluate constant expressions.
Error: Invalid integer expression
You made an expression which isn’t an integer, and the compiler expects the result to be an integer.
Error: Illegal qualifier
One of the following is happening :
Error: High range limit ¡ low range limit
You are declaring a subrange, and the lower limit is higher than the high limit of the range.
Error: Illegal counter variable
The type of a for loop variable must be an ordinal type. Loop variables cannot be reals or strings.
Error: Can’t determine which overloaded function to call
You’re calling overloaded functions with a parameter that doesn’t correspond to any of the declared function parameter lists. e.g. when you have declared a function with parameters word and longint, and then you call it with a parameter which is of type integer.
Error: Parameter list size exceeds 65535 bytes
The I386 processor limits the parameter list to 65535 bytes (the RET instruction causes this)
Error: Illegal type conversion
When doing a type-cast, you must take care that the sizes of the variable and the destination type are the same.
Conversion between ordinals and pointers is not portable across platforms
If you typecast a pointer to a longint, this code will not compile on a machine using 64bit for pointer storage.
Error: File types must be var parameters
You cannot specify files as value parameters, i.e. they must always be declared var parameters.
Error: The use of a far pointer isn’t allowed there
Free Pascal doesn’t support far pointers, so you cannot take the address of an expression which has a far reference as a result. The mem construct has a far reference as a result, so the following code will produce this error:
       var p : pointer;
       ...
       p:=@mem[a000:000];
       
Error: illegal call by reference parameters
You are trying to pass a constant or an expression to a procedure that requires a var parameter. Only variables can be passed as a var parameter.
Error: EXPORT declared functions can’t be called
No longer in use.
Warning: Possible illegal call of constructor or destructor (doesn’t match to this context)
No longer in use.
Note: Inefficient code
You construction seems dubious to the compiler.
Warning: unreachable code
You specified a loop which will never be executed. Example:
       while false do
         begin
         {.. code ...}
         end;
       
Error: procedure call with stackframe ESP/SP
The compiler encountered a procedure or function call inside a procedure that uses a ESP/SP stackframe. Normally, when a call is done the procedure needs a EBP stackframe.
Error: Abstract methods can’t be called directly
You cannot call an abstract method directy, instead you must call a overriding child method, because an abstract method isn’t implemented.
Fatal: Internal Error in getfloatreg(), allocation failure
An internal error occurred in the compiler; If you encounter such an error, please contact the developers and try to provide an exact description of the circumstances in which the error occurs.
Fatal: Unknown float type
The compiler cannot determine the kind of float that occurs in an expression.
Fatal: SecondVecn() base defined twice
An internal error occurred in the compiler; If you encounter such an error, please contact the developers and try to provide an exact description of the circumstances in which the error occurs.
Fatal: Extended cg68k not supported
The extended type is not supported on the m68k platform.
Fatal: 32-bit unsigned not supported in MC68000 mode
The cardinal is not supported on the m68k platform.
Fatal: Internal Error in secondinline()
An internal error occurred in the compiler; If you encounter such an error, please contact the developers and try to provide an exact description of the circumstances in which the error occurs.
Register arg1 weight arg2 arg3
Debugging message. Shown when the compiler considers a variable for keeping in the registers.
Error: Stack limit excedeed in local routine
Your code requires a too big stack. Some operating systems pose limits on the stack size. You should use less variables or try ro put large variables on the heap.
Stack frame is omitted
Some procedure/functions do not need a complete stack-frame, so it is omitted. This message will be displayed when the -vd switch is used.
Error: Object or class methods can’t be inline.
You cannot have inlined object methods.
Error: Procvar calls can’t be inline.
A procedure with a procedural variable call cannot be inlined.
Error: No code for inline procedure stored
The compiler couldn’t store code for the inline procedure.
Error: Direct call of interrupt procedure arg1 is not possible
You can not call an interrupt procedure directly from FPC code
Error: Element zero of an ansi/wide- or longstring can’t be accessed, use (set)length instead
You should use setlength to set the length of an ansi/wide/longstring and length to get the length of such kinf of string
Error: Include and exclude not implemented in this case
include and exclude are only partially implemented for i386 processors and not at all for m68k processors.
Error: Constructors or destructors can not be called inside a ’with’ clause
Inside a With clause you cannot call a constructor or destructor for the object you have in the with clause.
Error: Cannot call message handler method directly
A message method handler method can’t be called directly if it contains an explicit self argument
Error: Jump in or outside of an exception block
It isn’t allowed to jump in or outside of an exception block like try..finally..end;:
       label 1;
      
       ...
      
       try
          if not(final) then
            goto 1;   // this line will cause an error
       finally
         ...
       end;
       1:
       ...
       
Error: Control flow statements aren’t allowed in a finally block
It isn’t allowed to use the control flow statements break, continue and exit inside a finally statement. The following example shows the problem:
       ...
         try
            p;
         finally
            ...
            exit;  // This exit ISN'T allowed
         end;
       ...
      
       
If the procedure p raises an exception the finally block is executed. If the execution reaches the exit, it’s unclear what to do: exiting the procedure or searching for another exception handler