How to detect runtime problems at compile time#
Consider the following program:
MODULE assignvalue ; (*!m2iso+gm2*)
PROCEDURE bad () : INTEGER ;
VAR
i: INTEGER ;
BEGIN
i := -1 ;
RETURN i
END bad ;
VAR
foo: CARDINAL ;
BEGIN
(* the m2rte plugin will detect this as an error, post
optimization. *)
foo := bad ()
END assignvalue.
here we see that the programmer has overlooked that the return value
from bad
will cause an overflow to foo
. If we compile
the code with the following options:
$ gm2 -g -fsoft-check-all -O2 -c assignvalue.mod
assignvalue.mod:16:0:inevitable that this error will occur at runtime,
assignment will result in an overflow
The gm2 semantic plugin is automatically run and will generate a
warning message for every exception call which is known as reachable.
It is highly advised to run the optimizer (-O2
or -O3
)
with -fsoft-check-all
so that the compiler is able to run the
optimizer and perform variable and flow analysis before the semantic
plugin is invoked.