Error messages

The Mosel error messages listed in the following are grouped according to the following categories:

All messages are identified by their code number, preceded either by the letter E for error or W for warning. Errors cause the compilation or execution of a model to fail, warnings simply indicate that there may be something to look into without causing a failure or interruption.

This chapter documents the error mesages directly generated by Mosel, not the messages stemming from Mosel modules or from other libraries used by modules.

General errors

These errors may occur either during compilation or when running a model.

E-1   Internal error in `location' (errortype)

An unrecoverable error has been detected, Mosel exits. Please contact Xpress Support.

E-2   General error in `location' (errortype)

An internal error has been detected but Mosel can recover. Please contact Xpress Support.

E-4   Not enough memory

Your system has not enough memory available to compile or execute a Mosel model.

E-20   Trying to open `file' twice

The same file cannot be opened twice (e.g. using fopen or include).

E-21   I cannot open file `file' for writing (driver_error)

Likely causes are an incorrect access path or write-protected files.

E-22   I cannot open file `file' for reading (driver_error)

Likely causes are an incorrect access path or filename or not read-enabled files.

E-23   Error when writing to the file `file' (driver_error)

The file could be opened for writing but an error occurred during writing (e.g. disk full).

E-24   Error when reading from the file `file' (driver_error)

The file could be opened for reading but an error occurred while reading it.

E-25   Unfinished string

A string is not terminated, or different types of quotes are used to indicate start and end of a string.



E-26   Identifier expected

May occur when reading data files: a label is missing or a numerical value has been found where a string is expected.


  D: range

 initializations from "test.dat"
Contents of test.dat:
 [1 2 3]
The label D: is missing.

E-27   Number expected

May occur when reading data files: another data type has been found where a numerical value is expected.


  C: set of real

 initializations from "test.dat"
Contents of test.dat:
 C: [1 2 c]
c is not a number.

E-28   Digit expected for constant exponent

May occur when using scientific notation for real values.


b:= 2E -10
E must be immediately followed by a signed integer (i.e. no spaces).

E-29   Wrong file descriptor number for selection (num)

fselect is used with an incorrect parameter value.

E-34   I cannot find IO driver `driver'

The system cannot locate the IO driver driver for opening a file. This may happen if the driver is provided by a module not already loaded in memory. To avoid this problem the module name should be given with the driver name. For instance use "mmodbc.odbc" instead of "odbc" alone.

E-35   Error when closing file `file' (driver_error)

An error occurred while closing a file. Typically the last write operation for clearing buffers failed.

Parser/compiler errors

Whenever possible Mosel displays the location where an error has been detected during compilation in the format (line_number/character_position_in_line).

E-100   Syntax error before token

The parser cannot continue to analyze the source file because it has encountered an unexpected token. When the error is not an obvious syntax error, make sure you are not using an identifier that has not been defined before.


token: )
 writeln(3 mod)
mod must be followed by an integer (or a numerical expression evaluating to an integer).
token: write
 if i > 0 
then has been omitted.
token: end
 if i > 0 then write("greater") end-if
A semicolon must be added to indicate termination of the statement preceeding the end-if.

E-101   Incompatible types (type_of_problem)

We try to apply an operation to incompatible types. Check the types of the operands.


type_of_problem: assignment
The first assignment defines i as an integer, the second tries to re-assign it a real value: i needs to be explicitly declared as a real.
type_of_problem: cmp
A truth value (the result of 12=1 is compared to a numerical value.

E-102   Incompatible types for parameters of `routine'

A subroutine is called with the wrong parameter type. This message may also be displayed instead of E-104 if a subroutine is called with the wrong number of parameters. (This is due to the possibility to overload the definition of subroutines).


 procedure myprint(a:integer)
  writeln("a: ", a)

The subroutine myprint is called with a real-valued argument instead of an integer.

E-103   Incorrect number of subscripts for `array'(num1/num2)

An array is used with num2 subscripts instead of the number of subscripts num1 indicated at its declaration.


`array'(num1/num2): `A'(2/1)
  A: array(1..5,range) of integer


E-104   Incorrect number of parameters for `routine'(num1/num2)

Typically displayed if write or read are used without argument(s).

E-106   Division by zero detected

Explicit division by 0 (otherwise error only detected at runtime).

E-107   Math error detected on function `fct'

For example, a negative number is used with a fractional exponent.

E-108   Logical expression expected here

Something else than a logical condition is used in an if statement.

E-109   Trying to redefine `name'

Objects can only be defined once, changing their type is not possible.



  i: real  
i is already defined as an integer by the assignment.

E-111   Logical expression expected for operator `op'


op: and
 2+3 and true

E-112   Numeric expression expected for operator `op'


op: +
op: *
 uses "mmxprs"


Multiplication of decision variables of type mpvar is only possible if a suitable module (like mmquad) supporting non-linear expressions is loaded.

E-113   Wrong type for conversion

Mosel performs automatic conversions when required (for instance from an integer to a real) or when explicitly requested by using the type name, e.g. integer(12.5). This error is raised when an unsupported conversion is requested or when no implicit conversion can be applied.

E-114   Unknown type for constant `const'

A constant is defined but there is not enough information to deduce its type or the type implied cannot be used for a constant (for instance a linear constraint).

E-115   Expression cannot be passed by reference

We try to use a constant where an identifier is expected. For instance, only non-constants can be used in an initializations block.

E-118   Wrong logical operator

A logical opeartor is used with a type for which it is not defined.


 if("abc" in "acd") then writeln("?"); end-if
The operator in is not defined for strings.

W-121   Statement with no effect

An expression stands where a statement is expected. In this case, the expression is ignored — typically, a constraint has been stated and the constraint type is missing (i.e. >= or <= ...) or an equality constraint occurs without decision variables, e.g. 2=1

E-122   Control parameter `param' unknown

The control parameters of Mosel are documented in the Mosel Reference manual under function getparam. All control parameters provided by a module, e.g. mmxprs, can be display with the command EXAM, e.g. exam -p mmxprs. In IVE this information is displayed by the module browser.

E-123   `identifier' is not defined

identifier is used without or before declaring it. Check the spelling of the name. If identifier is defined by a module, make sure that the corresponding module is loaded. If identifier is a subroutine that is defined later in the program, add a forward declaration at the beginning of the model.

E-125   Set expression expected

For instance computing the union between an integer constant and a set of integers: union(12+{13})

E-126   String expression expected

A string is expected here: for instance a file name for an initiazation block.

E-127   A function cannot be of type `type'

Some types cannot be the return value of a function. Typically no function can return a decision variable (type mpvar).

E-128   Type `type' has no field named `field'

Trying to access an unknown field in a record type.


k is not a field of r.

E-129   Type `type' is not a record

Trying to use a record dereference on an object that is not a record. For instance using i.j with i defined as an integer.

E-130   A type definition cannot be local

It is not possible to declare a type in a procedure or function.

E-132   Array `identifier' is not indexed by ranges: assignment may be incorrect

When performing an inline initialization (operator ::) on an array, it is recommended to list indices if the indexing sets are not ranges. Indeed, since order of set elements is not guaranteed the values provided may not be assigned to the expected cells in the array.


  a:array({3,2,1}) of integer
 ! a::[3,2,1]        !=> a(1)=3 a(2)=2 a(3)=1
 a::([3,2,1])[3,2,1] !=> a(1)=1 a(2)=2 a(3)=3

E-132   Set or list expression expected

Aggregate operators (like sum or forall) require sets or lists to describe the domains for their loops.


 forall(i = 2) writeln(i)
Since i is declared as an integer before the loop, the expression i=2 is a logical expression (it checks whether i is equal to 2) instead of an index definition.

E-147   Trying to interrupt a non existing loop

break or next is used outside of a loop.

E-148   Procedure/function `identifier' declared but not defined

A procedure or functions is declared with forward, but no definition of the subroutine body has been found or the subroutine body does not contain any statement.

E-149   Some requirements are not met

A package may declare requirements: these are symbols that must be declared by models using this package. This error occurs when a model uses a package without providing the definitions for all the requirements.

E-150   End of file inside a commentary

A commentary (usually started with (!) is not terminated. This error may occur, for instance, with several nested commentaries.

E-151   Incompatible type for subscript num of `identifier'

The subscript counter num may be wrong if an incorrect number of subscripts is used.


  A:array(1..2,3..4) of integer
This prints the value 2 for num, although the second subscript is actually missing.

W-152   Empty set for a loop detected

This warning will be printed in a few cases where it is possible to detect an empty set during compilation.

E-153   Trying to assign the index `idx'

Loop indices cannot be re-assigned.


  C: set of string
  D: range
 forall(d in D) d+=1
 forall(c in C) if (c='a') then c:='A'; end-if
Both of these assignments will raise the error. To replace an element of the set C, the element needs to be removed and the new element added to the set.

E-154   Unexpected end of file

May occur, for instance, if an expression at the end of the model file is incomplete and in addition end-model is missing.

E-155   Empty `case'

A case statement is used without defining any choices.

E-156   `identifier' has no type

The type of identifier cannot be deduced. Typically, an undeclared object is assigned an empty set.

E-157   Scalar expression expected



 case B of
  1: writeln("stop")
The case statement can only be used with the basic types (integer, real, boolean, string).
 D:: [1,2]
Declaration of arrays by assignment is only possible if the index set can be deduced (e.g. definition of an array of linear constraints in a loop).

E-159   Compiler option `option' unknown

Valid compiler options include explterm and noimplicit. See section Directive options for more details.

E-160   Definition of functions and procedures cannot be nested

May occur, for instance, if end-procedure or end-function is missing and the definition of a second subroutine follows.

E-161   Expressions not allowed as procedure/function parameter

Occurs typically if the index set(s) of an array are defined directly in the procedure/function prototype.


 procedure myproc(F:array(1..5) of real)
Replace either by array(range) or array(set of integer) or define A:=1..5 outside of the subroutine definition and use array(A)

E-162   Non empty string expected here

This error is raised, for example, by uses ""

E-163   Array declarations in the form of a list are not allowed as procedure/function parameter

Basic types may be given in the form of a list, but not arrays.


 procedure myproc(F,G,H:array(range) of real, a,b,c:real)
Separate declaration of every array is required:
 procedure myproc(F:array(range) of real, G:array(range) of real, 
                  H:array(range) of real, a,b,c:real)

W-164   A local symbol cannot be made public


 procedure myproc
   public i:integer
Any symbol declared in a subroutine is local and cannot be made public.

E-165   Declaration of `identifier' hides a parameter

The name of a function/procedure parameter is re-used in a local declaration.


 procedure myproc(D:array(range) of real)
   D: integer
Rename either the subroutine argument or the name used in the declaration.

W-166   `;' missing at end of statement

If the option explterm is employed, then all statements must be terminated by a semicolon.

E-167   Operator `op' not defined

A constructor for a type is used in a form that is not defined.


 uses "complex"
The module complex defines constructors for complex numbers from one or two reals, but not from three.

E-168   `something' expected here

Special case of ``syntax error'' (E-100) where the parser is able to provide a guess of what is missing.


something: :=
 a: 3
The assignment is indicated by :=.
something: of
  S: set integer
of has been omitted.
something: ..
  A: array(1:2) of integer
Ranges are specified by ...

E-169   `identifier' cannot be used as an index name (the identifier is already in use or declared)


 sum(i in 1..10)
The identifier i has to be replaced by a different name in one of these lines.

E-170   `=' expects a scalar here (use `in' for a set)

Special case of syntax error (E-100).


 sum(i = 1..10)
Replace = by in.

E-171   The [upper/lower] bound of a range is not an integer expression


  A: array(1..2.5) of integer
Ranges are intervals of integers, so the upper bound of the index range must be changed to either 2 or 3.

E-172   Only a reference to a public set is allowed here

All index sets of a public array must also be public.

E-173   Statement allowed in packages only

The block requirements can only be used in packages.

E-175   Index sets of array types must be named

User types defined as arrays must be indexed by named sets (i.e. declared separately). For instance it is not allowed to use range or set of string as an index of such an array.

E-176   Only a public type is allowed here

If a user type depending on another user type is declared declared public, the secondary type must also be public. For instance, assuming type T1 is private, it is not possible to declare T2 as a public T2=set of T1.

E-177   Incorrect number of initializers (n1/n2)

In an inline initialization (operator ::) the number of provided values to assign does not match the list of indices.

E-202   Integer constant expected

Versions numbers (stated by means of the version compiler directive) must consist in 1 to 3 numbers separated by dots (e.g. 1.2.3). This error is displayed if a version number does not conform to this syntax.

E-207   Problem reference/type expected here

The operator with is used with something that is not a problem.

E-208   There can be only one counter

The as counter declaration can appear only once in an iterator list.

E-209   Missing loop indices

Typically an iterator list contains only a counter declaration: it is necessary to provide at least one index.

Errors related to modules

E-302   The symbol `identifier' from `module' cannot be defined (redefinition)

Two different modules used by a model define the same symbol (incompatible definitions).

E-303   Wrong type for symbol `identifier' from `module'

Internal error in the definition of a user module (an unknown type is used): refer to the list of type codes in the Native Interface reference manual.

W-304   The symbol `identifier' is hidden by module `module'

Two different modules used by a model define the same symbol (definitions are compatible, second replaces first definition).

W-306   Unknown operator `op' (code num) in module `module'

Internal error in the definition of a user module: refer to the list of operator codes in the Native Interface reference manual.

E-307   Operator `op' (code num) from module `module' rejected

Internal error in the definition of a user module: an operator is not defined correctly.

E-308   Parameter string of a native routine corrupted

Internal error in the definition of a user module: refer to the list of parameter type codes in the Native Interface reference manual.

W-309   Problem type `typ' unknown: extension `ext' ignored

A module declares a native type as a problem extension but the compiler cannot find the base type. For instance the new type is named "myprob.pb" but "myprob" does not exist.

Errors related to packages

E-320   Package `package' not found

A package has not been found in the module path (see section Directive uses for the search rules).

E-321   `file' is not a package

Typically displayed if a model is used as a package (the source for the bim file starts with the model keyword instead of package).

E-322   Wrong version for package `package'(num1.num2.num3/num4.num5.num6)

A model is compiled with package A depending on a package B. The bim file Mosel has loaded for B is not compatible with the one used for compiling A.

E-323   Package `package' imported several times

A package cannot be imported several times in a model. This error occurs usually when a model uses packages A and B, and package B already includes A.

Runtime errors

Runtime errors are usually displayed without any information about where they have occurred. To obtain the location of the error, use the flag g with the COMPILE, CLOAD, or EXECUTE command.


E-30   Duplicate label `label' at line num of file `file' (ignored)

The same label is used repeatedly in a data file.


 D: [1 2 3]
 D: [1 2 4]

E-31   Error when reading label `label' at (num1,num2) of file `file'

The data entry labeled label has not been read correctly. Usually this message is preceded by a more detailed one, e.g. E-24, E-27 or E-28.

E-32   Error when writing label `label' at (num1,num2) of file `file'

The data entry labeled label has not been written correctly. Usually this message is preceded by a more detailed one, e.g. E-23.

E-33   Initialization with file `file' failed for: list_of_identifier

Summary report at the end of an initializations section. Usually this message is preceded by more detailed ones, e.g. E-27, E-28, E-30, E-31.

General runtime errors

E-51   Division by zero

Division by 0 resulting from the evaluation of an expression.

E-52   Math error performing function `identifier'

For example ln used with inadmissible argument, such as 0 or negative values.

E-1000   Inconsistent range

Typically displayed if the lower bound specified for a range is greater than its upper bound.



E-1001   Conflicting types in set operation (op)

A set operation can only be carried out between sets of the same type.


  C: set of integer
  D: range

The inverse, C:=D, is correct because ranges are a special case of sets of integers.

E-1002   An index is out of range

An attempt is being made to access an array entry that lies outside of the index sets of the array.

E-1003   Trying to modify a finalized or fixed set

Occurs, for instance, when it is attempted to re-assign a constant set or to add elements to a fixed set.

E-1004   Trying to access an uninitialized object (type_of_object)

Occurs typically in models that define subroutines.


type_of_object: array
 forward procedure myprint
  A:array(1..2,3..4) of integer

 procedure myprint  
Move the declaration of A before the call of the subroutine

E-1005   Wrong type for ``procedure''

Occurs when procedures settype or getvars are used with incorrect types.

E-1006   Null reference (internal_function)

This error is a special case of E-1004 when the problem is detected on an external type or scalar (e.g. accessing a record field on an object that has not been initialized).

E-1009   Too many initializers

The number of data elements exceeds the maximum size of an array.


  A:array(1..3) of integer


E-1010   Trying to extend a unary constraint

Most types of unary constraints cannot be transformed into constraints on several variables.


  x,y: mpvar

 c:=x is_integer

E-1013   Infeasible constraint

The simple cases of infeasible unnamed constraints that are detected at run time include:


! or:

E-1014   Conflicting types in array operation (op)

An array operation (like assignment) can only be carried out between arrays of the same type and structure.

E-1015   Trying to modify a constant list

Occurs, for instance, when it is attempted to apply a destructive operation (like splittail) to a constant list.

E-1016   Trying to get an element in an empty set

The function getfirst or getlast is applied to an empty set.

E-1017   Trying to get an element in an empty list

The function getfirst or getlast is applied to an empty list.

E-1100   Empty problem

We are trying to generate or load an empty problem into a solver (i.e. no constraints; bounds do not count as constraints).

E-1102   Problem capacity of student license exceeded (num1 type_of_object > num2)

The problem is too large to be solved with a student license. Use a smaller data set or try to reformulate the problem to reduce the number of variables, constraints, or global entities.

BIM reader

E-80   `file' is not a BIM file

Trying to load a file that does not have the structure of a BIM file.

E-82   Wrong file version (num1/num2) for file `file'

A BIM file is loaded with an incompatible version of Mosel: preferably the same versions should be used for generating and running a BIM file.

E-83   Bim file `file' corrupted

A BIM file has been corrupted, e.g. by saving it with a text editor.

E-84   File `file': model cannot be renamed

A model file that is being executed cannot be re-loaded at the same time.

W-85   Trailing data at end of file `file' ignored

At the end of a BIM file additional, unidentifiable data has been found (may be a sign of file corruption).

Module manager errors

E-350   Module `module' not found

A module has not been found in the module path (see section Directive uses for the search rules). This message is also displayed, if a module depends on another library that has not been found (e.g. module mmxprs has been found but Xpress-Optimizer has not been installed or cannot be located by the operating system).

E-351   File `file' is not a Mosel DSO

Typically displayed if Mosel cannot find the module initialization function.

E-352   Module `module': wrong interface version

A module is not compatible with the Mosel version used to load it.

E-353   Module `module': no authorization found

Module module requires a license for its use. Please contact Xpress Support.

E-354   Error when initializing module `module'

Usually preceded by an error message generated by the module. Please refer to the documentation of the module for further detail.

E-355   Wrong version for module `module'(num1.num2.num3/num4.num5.num6)

A model is run with a version of a module that is different from the version that has been used to compile the model.

E-358   Error when resetting module `module'

A module cannot be executed (e.g. due to a lack of memory).

E-359   Driver `pkg.driver' rejected (reason)

A module publishes an IO driver which name is invalid or that is missing some mandatory function.

E-360   Control parameter `module.param' unknown (setting ignored)

It is possible to set module parameters when running a model (using the RUN command for instance): in the list of assignments, a control parameter cannot be found in the indicated module.

E-361   Version number truncated (`vernum')

A version number (for module, model or package) consists in three positive numbers a.b.c. This error is raised if one of these numbers is larger than 999.

If you have any comments or suggestions about these pages, please send mail to

© Copyright 2001-2013 Fair Isaac Corporation. All rights reserved.