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.