C.5 Symbol handling

This section lists all the messages that concern the handling of symbols. This means all things that have to do with procedure and variable names.

Error 5000: Identifier not found ”arg. 1


The compiler doesn’t know this symbol. Usually happens when you misspell the name of a variable or procedure, or when you forget to declare a variable.

Fatal error 5001: Internal Error in SymTableStack()


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.

Error 5002: Duplicate identifier ”arg. 1


The identifier was already declared in the current scope.

Hint 5003: Identifier already defined in arg. 1at line arg. 2


The identifier was already declared in a previous scope.

Error 5004: Unknown identifier ”arg. 1


The identifier encountered has not been declared, or is used outside the scope where it is defined.

Error 5005: Forward declaration not solved ”arg. 1


This can happen in two cases:

Error 5007: Error in type definition


There is an error in your definition of a new array type. One of the range delimiters in an array declaration is erroneous. For example, Array [1..1.25] will trigger this error.

Error 5009: Forward type not resolved ”arg. 1


A symbol was forward defined, but no declaration was encountered.

Error 5010: Only static variables can be used in static methods or outside methods


A static method of an object can only access static variables.

Error 5012: Record or object or class type expected


The variable or expression isn’t of the type record or object or class.

Error 5013: Instances of classes or objects with an abstract method are not allowed


You are trying to generate an instance of a class which has an abstract method that wasn’t overridden.

Warning 5014: Label not defined ”arg. 1


A label was declared, but not defined.

Error 5015: Label used but not defined ”arg. 1


A label was declared and used, but not defined.

Error 5016: Illegal label declaration


This error should never happen; it occurs if a label is defined outside a procedure or function.

Error 5017: GOTO and LABEL are not supported (use switch -Sg)


You must use the -Sg switch to compile a program which has labels and goto statements. By default, label and goto are not supported.

Error 5018: Label not found


A goto label was encountered, but the label wasn’t declared.

Error 5019: Identifier isn’t a label


The identifier specified after the goto isn’t of type label.

Error 5020: Label already defined


You are defining a label twice. You can define a label only once.

Error 5021: Illegal type declaration of set elements


The declaration of a set contains an invalid type definition.

Error 5022: Forward class definition not resolved ”arg. 1


You declared a class, but you did not implement it.

Hint 5023: Unit ”arg. 1” not used in arg. 2


The unit referenced in the uses clause is not used.

Hint 5024: Parameter ”arg. 1” not used


The identifier was declared (locally or globally) but was not used (locally or globally).

Note 5025: Local variable ”arg. 1” not used


You have declared, but not used, a variable in a procedure or function implementation.

Hint 5026: Value parameter ”arg. 1” is assigned but never used


The identifier was declared (locally or globally) and assigned to, but is not used (locally or globally) after the assignment.

Note 5027: Local variable ”arg. 1” is assigned but never used


The variable in a procedure or function implementation is declared and assigned to, but is not used after the assignment.

Hint 5028: Local arg. 1arg. 2” is not used


A local symbol is never used.

Note 5029: Private field ”arg. 1.arg. 2” is never used


The indicated private field is defined, but is never used in the code.

Note 5030: Private field ”arg. 1.arg. 2” is assigned but never used


The indicated private field is declared and assigned to, but never read.

Note 5031: Private method ”arg. 1.arg. 2” never used


The indicated private method is declared but is never used in the code.

Error 5032: Set type expected


The variable or expression is not of type set. This happens in an in statement.

Warning 5033: Function result does not seem to be set


You can get this warning if the compiler thinks that a function return value is not set. This will not be displayed for assembler procedures, or procedures that contain assembler blocks.

Warning 5034: Type ”arg. 1” is not aligned correctly in current record for C


Arrays with sizes not multiples of 4 will be wrongly aligned for C structures.

Error 5035: Unknown record field identifier ”arg. 1


The field doesn’t exist in the record/object definition.

Warning 5036: Local variable ”arg. 1” does not seem to be initialized


This message is displayed if the compiler thinks that a variable will be used (i.e. it appears in the right-hand side of an expression) when it was not initialized first (i.e. appeared in the left-hand side of an assignment).

Warning 5037: Variable ”arg. 1” does not seem to be initialized


This message is displayed if the compiler thinks that a variable will be used (i.e. it appears in the right-hand side of an expression) when it was not initialized first (i.e. appeared in the left-hand side of an assignment).

Error 5038: Identifier idents no member ”arg. 1


This error is generated when an identifier of a record, field or method is accessed while it is not defined.

Hint 5039: Found declaration: arg. 1


You get this when you use the -vh switch.In the case of an overloaded procedure not being found. Then all candidate overloaded procedures are listed, with their parameter lists.

Error 5040: Data element too large


You get this when you declare a data element whose size exceeds the prescribed limit (2 Gb on 80386+/68020+ processors).

Error 5042: No matching implementation for interface method ”arg. 1” found


There was no matching method found which could implement the interface method. Check argument types and result type of the methods.

Warning 5043: Symbol ”arg. 1” is deprecated


This means that a symbol (a variable, routine, etc...) which is declared as deprecated is used. Deprecated symbols may no longer be available in newer versions of the unit / library. Use of this symbol should be avoided as much as possible.

Warning 5044: Symbol ”arg. 1” is not portable


This means that a symbol (a variable, routine, etc...) which is declared as platform is used. This symbol’s value, use and availability is platform specific and should not be used if the source code must be portable.

Warning 5055: Symbol ”arg. 1” is not implemented


This means that a symbol (a variable, routine, etc...) which is declared as unimplemented is used. This symbol is defined, but is not yet implemented on this specific platform.

Error 5056: Can’t create unique type from this type


Only simple types like ordinal, float and string types are supported when redefining a type with type newtype = type oldtype;.

Hint 5057: Local variable ”arg. 1” does not seem to be initialized


This message is displayed if the compiler thinks that a variable will be used (i.e. it appears in the right-hand side of an expression) when it was not initialized first (i.e. it did not appear in the left-hand side of an assignment).

Hint 5058: Variable ”arg. 1” does not seem to be initialized


This message is displayed if the compiler thinks that a variable will be used (i.e. it appears in the right-hand side of an expression) when it was not initialized first (i.e. t did not appear in the left-hand side of an assignment).

Warning 5059: Function result variable does not seem to be initialized


This message is displayed if the compiler thinks that the function result variable will be used (i.e. it appears in the right-hand side of an expression) before it is initialized (i.e. before it appeared in the left-hand side of an assignment).

Hint 5060: Function result variable does not seem to be initialized


This message is displayed if the compiler thinks that the function result variable will be used (i.e. it appears in the right-hand side of an expression) before it is initialized (i.e. it appears in the left-hand side of an assignment)

Warning 5061: Variable ”arg. 1” read but nowhere assigned


You have read the value of a variable, but nowhere assigned a value to it.

Hint 5062: Found abstract method: arg. 1


When getting a warning about constructing a class/object with abstract methods you get this hint to assist you in finding the affected method.

Warning 5063: Symbol ”arg. 1” is experimental


This means that a symbol (a variable, routine, etc...) which is declared as experimental is used. Experimental symbols might disappear or change semantics in future versions. Usage of this symbol should be avoided as much as possible.

Warning 5064: Forward declaration ”arg. 1” not resolved, assumed external


This happens if you declare a function in the interface of a unit in macpas mode, but do not implement it.

Warning 5065: Symbol ”arg. 1” is belongs to a library


This means that a symbol (a variable, routine, etc...) which is declared as library is used. Library symbols may not be available in other libraries.

Warning 5066: Symbol ”arg. 1” is deprecated: ”arg. 2


This means that a symbol (a variable, routine, etc...) which is declared as deprecated is used. Deprecated symbols may no longer be available in newer versions of the unit / library. Use of this symbol should be avoided as much as possible.

Error 5067: Cannot find an enumerator for the type ”arg. 1


This means that compiler cannot find an appropriate enumerator to use in the for-in loop. To create an enumerator you need to define an operator enumerator or add a public or published GetEnumerator method to the class or object definition.

Error 5068: Cannot find a ”MoveNext” method in enumerator ”arg. 1


This means that compiler cannot find a public MoveNext method with the Boolean return type in the enumerator class or object definition.

Error 5069: Cannot find a ”Current” property in enumerator ”arg. 1


This means that compiler cannot find a public Current property in the enumerator class or object definition.

Error 5070: Mismatch between number of declared parameters and number of colons in message string.


In Objective-C, a message name automatically contains as many colons as parameters. In order to prevent mistakes when specifying the message name in FPC, the compiler checks whether this is also the case here. Note that in case of messages taking a variable number of arguments translated to FPC via an array of const parameter, this final array of const parameter is not counted. Neither are the hidden self and _cmd parameters.

Note 5071: Private type ”arg. 1.arg. 2” never used


The indicated private type is declared but is never used in the code.

Note 5072: Private const ”arg. 1.arg. 2” never used


The indicated private const is declared but is never used in the code.

Note 5073: Private property ”arg. 1.arg. 2” never used


The indicated private property is declared but is never used in the code.

Warning 5074: Unit ”arg. 1” is deprecated


This means that a unit which is declared as deprecated is used. Deprecated units may no longer be available in newer versions of the library. Use of this unit should be avoided as much as possible.

Warning 5075: Unit ”arg. 1” is deprecated: ”arg. 2


This means that a unit which is declared as deprecated is used. Deprecated units may no longer be available in newer versions of the library. Use of this unit should be avoided as much as possible.

Warning 5076: Unit ”arg. 1” is not portable


This means that a unit which is declared as platform is used. This unit use and availability is platform specific and should not be used if the source code must be portable.

Warning 5077: Unit ”arg. 1” is belongs to a library


This means that a unit which is declared as library is used. Library units may not be available in other libraries.

Warning 5078: Unit ”arg. 1” is not implemented


This means that a unit which is declared as unimplemented is used. This unit is defined, but is not yet implemented on this specific platform.

Warning 5079: Unit ”arg. 1” is experimental


This means that a unit which is declared as experimental is used. Experimental units might disappear or change semantics in future versions. Usage of this unit should be avoided as much as possible.

Error 5080: No full definition of the formally declared class ”arg. 1” is in scope. Add the unit containing its full definition to the uses clause.


Objecive-C and Java classes can be imported formally, without using the unit in which it is fully declared. This enables making forward references to such classes and breaking circular dependencies amongst units. However, as soon as you wish to actually do something with an entity of this class type (such as access one of its fields, send a message to it, or use it to inherit from), the compiler requires the full definition of the class to be in scope.

Error 5081: Gotos into initialization or finalization blocks of units are not allowed


Gotos into initialization or finalization blockse of units are not allowed.

Error 5082: Invalid external name ”arg. 1” for formal class ”arg. 2


Error 5083: Complete class definition with external name ”arg. 1” here


When a class is declared using a formal external definition, the actual external definition (if any) must specify the same external name as the formal definition (since both definitions refer to the same actual class type).

Warning 5084: Possible library conflict: symbol ”arg. 1” from library ”arg. 2” also found in library ”arg. 3


Some OS do not have library specific namespaces, for those OS, the function declared as ”external ’libname’ name ’funcname’”, the ’libname’ part is only a hint, funcname might also be loaded by another library. This warning appears if ’funcname’ is used twice with two different library names.

Error 5085: Cannot add implicit constructor ’Create’ because identifier already used by ”arg. 1


Java does not automatically add inherited constructors to child classes, so that they can be hidden. However, if a class does not explicitly declare at least one constructor, the compiler is required to add a public, parameterless constructor. In Java, constructors are nameless, but in FPC they are all called “Create”. Therefore, if you do not add a constructor to a Java class and furthermore use the “Create” identifier for another entity (e.g., a field, or a parameterless method), the compiler cannot satisfy this requirement.

Error 5086: Cannot generate default constructor for class, because parent has no parameterless constructor


Java does not automatically add inherited constructors to child classes, so that they can be hidden. However, if a class does not explicitly declare at least one constructor, the compiler is required to add a public, parameterless constructor. This compiler must then call the parameterless constructor from the parent class inside this added constructor. This is however impossible if the parent class does not declare such a constructor. In this case you must add a valid constructor yourself.

Adding helper for arg. 1


A helper for the mentioned type is added to the current scope

Error 5088: Found declaration: arg. 1


This message shows all overloaded declarations in case of an error.

Warning 5089: Local variable ”arg. 1” of a managed type does not seem to be initialized


This message is displayed if the compiler thinks that a variable will be used (i.e. it appears in the right-hand side of an expression) when it was not initialized first (i.e. appeared in the left-hand side of an assignment). Since the variable is managed, i. e. implicitly initialized by the compiler, this might be intended behaviour and does not necessarily mean that the code is wrong.

Warning 5090: Variable ”arg. 1” of a managed type does not seem to be initialized


This message is displayed if the compiler thinks that a variable will be used (i.e. it appears in the right-hand side of an expression) when it was not initialized first (i.e. appeared in the left-hand side of an assignment). Since the variable is managed, i. e. implicitly initialized by the compiler, this might be intended behaviour and does not necessarily mean that the code is wrong.

Hint 5091: Local variable ”arg. 1” of a managed type does not seem to be initialized


This message is displayed if the compiler thinks that a variable will be used (i.e. it appears in the right-hand side of an expression) when it was not initialized first (i.e. it did not appear in the left-hand side of an assignment). Since the variable is managed, i. e. implicitly initialized by the compiler, this might be intended behaviour and does not necessarily mean that the code is wrong.

Hint 5092: Variable ”arg. 1” of a managed type does not seem to be initialized


This message is displayed if the compiler thinks that a variable will be used (i.e. it appears in the right-hand side of an expression) when it was not initialized first (i.e. t did not appear in the left-hand side of an assignment). Since the variable is managed, i. e. implicitly initialized by the compiler, this might be intended behaviour and does not necessarily mean that the code is wrong.

Warning 5093: Function result variable of a managed type does not seem to be initialized


This message is displayed if the compiler thinks that the function result variable will be used (i.e. it appears in the right-hand side of an expression) before it is initialized (i.e. before it appeared in the left-hand side of an assignment). Since the variable is managed, i. e. implicitly initialized by the compiler, this might be intended behaviour and does not necessarily mean that the code is wrong.

Hint 5094: Function result variable of a managed type does not seem to be initialized


This message is displayed if the compiler thinks that the function result variable will be used (i.e. it appears in the right-hand side of an expression) before it is initialized (i.e. it appears in the left-hand side of an assignment). Since the variable is managed, i. e. implicitly initialized by the compiler, this might be intended behaviour and does not necessarily mean that the code is wrong.

Warning 5095: Duplicate identifier ”arg. 1


The identifier was already declared in an Objective-C category that’s in the same scope as the current identifier. This is a warning instead of an error, because while this hides the identifier from the category, there are often many unused categories in scope.

Error 5096: Generic type parameter ”arg. 1” does not match with the one in the declaration


The specified generic type parameter for the generic class, record or routine does not match with the one declared in the declaration of the generic class, record or routine.

Error 5097: Generic type parameter declared as ”arg. 1


Shows what the generic type parameter was originally declared as if a mismatch is found between a declaration and the definition.

Error 5098: Record or object type expected


The variable or expression isn’t of the type record or object.

Error 5099: Symbol ”arg. 1” can not be captured


The specified symbol can not be captured to be used in a function reference. For example var or out parameters can not be captured in that way.

Fatal error 5100: System unit not loaded


The compiler used a function that requires the system unit to be loaded, but it was not yet loaded. This is an internal compiler error and must be reported.

Error 5101: WebAssembly reference types cannot be used inside records, objects, or classes


WebAssembly reference types don’t have an in-memory representation and therefore cannot be used inside records, objects or classes.