The error() function in preproc.c uses
the istk variable, to determine if an
error should be suppressed or not. The
variable has no default initializer; as
a result it remains uninitialized until
pp_reset() has been called.
However, the pp_pre_define() as well as
the pp_pre_undefine() function do call
the tokenise() function, which in turn
is capable of calling error() -- it may
e.g. see an unterminated string.
And because pp_pre_define() as well as
pp_pre_undefine() are called before the
pp_reset() function, something like...
nasm "-D'" foobar.asm
... is going to fail.
The result could be unexpected behavior,
a crash, silent corruption, etc.