These are the warning classes currently defined by NASM for the purpose of enabling, disabling and promoting to error. See section 2.1.26 and section 7.13.
all
: all possible warnings
all
is an group alias for all warning classes.
Thus, -w+all
enables all available warnings, and
-w-all
disables warnings entirely (since NASM 2.13).
bad-pragma
: malformed %pragma
bad-pragma
is a backwards compatibility alias for
pragma-bad
.
bnd
: invalid BND prefix
bnd
is a backwards compatibility alias for
prefix-bnd
.
db-empty
: no operand for data declaration
db-empty
warns about a DB
, DW
,
etc declaration with no operands, producing no output. This is permitted,
but often indicative of an error. See
section 3.2.1.
Enabled by default.
ea
: all ea-
warnings
ea
is a group alias for all warning classes prefixed by
ea-
; currently ea-absolute
and
ea-dispsize
.
ea-absolute
: absolute address cannot be RIP-relative
ea-absolute
warns that an address that is inherently
absolute cannot be generated with RIP-relative encoding using
REL
, see section
7.2.1.
Enabled by default.
ea-dispsize
: displacement size ignored on absolute address
ea-dispsize
warns that NASM does not support generating
displacements for inherently absolute addresses that do not match the
address size of the instruction.
Enabled by default.
environment
: nonexistent environment variable
environment
is a backwards compatibility alias for
pp-environment
.
float
: all float-
warnings
float
is a group alias for all warning classes prefixed by
float-
; currently float-denorm
,
float-overflow
, float-toolong
,
float-underflow
.
float-denorm
: floating point denormal
float-denorm
warns about denormal floating point constants.
Disabled by default.
float-overflow
: floating point overflow
float-overflow
warns about floating point underflow.
Enabled by default.
float-toolong
: too many digits in floating-point number
float-toolong
warns about too many digits in floating-point
numbers.
Enabled by default.
float-underflow
: floating point underflow
float-underflow
warns about floating point underflow (a
nonzero constant rounded to zero.)
Disabled by default.
forward
: forward reference may have unpredictable results
forward
warns that a forward reference is used which may
have unpredictable results, notably in a RESB
–type
pseudo-instruction. These would be critical expressions (see
section 3.8) but are permitted in a
handful of cases for compatibility with older versions of NASM. This
warning should be treated as a severe programming error as the code could
break at any time for any number of reasons.
Enabled by default.
hle
: invalid HLE prefix
hle
is a backwards compatibility alias for
prefix-hle
.
label
: all label-
warnings
label
is a group alias for all warning classes prefixed by
label-
; currently label-orphan
,
label-redef
, label-redef-late
.
label-orphan
: labels alone on lines without trailing `:'
label-orphan
warns about source lines which contain no
instruction but define a label without a trailing colon. This is most
likely indicative of a typo, but is technically correct NASM syntax (see
section 3.1.)
Enabled by default.
label-redef
: label redefined to an identical value
label-redef
warns if a label is defined more than once, but
the value is identical. It is an unconditional error to define the same
label more than once to different values.
Disabled by default.
label-redef-late
: label (re)defined during code generation
label-redef-late
the value of a label changed during the
final, code-generation pass. This may be the result of strange use of the
preprocessor. This is very likely to produce incorrect code and may end up
being an unconditional error in a future version of NASM.
Enabled and promoted to error by default.
lock
: LOCK prefix on unlockable instructions
lock
is a backwards compatibility alias for
prefix-lock
.
macro-def-case-single
: single-line macro defined both case
sensitive and insensitive
macro-def-case-single
is a backwards compatibility alias
for pp-macro-def-case-single
.
macro-def-greedy-single
: single-line macro
macro-def-greedy-single
is a backwards compatibility alias
for pp-macro-def-greedy-single
.
macro-def-param-single
: single-line macro defined with and
without parameters
macro-def-param-single
is a backwards compatibility alias
for pp-macro-def-param-single
.
macro-defaults
: macros with more default than optional
parameters
macro-defaults
is a backwards compatibility alias for
pp-macro-defaults
.
macro-params-legacy
: improperly calling multi-line macro
for legacy support
macro-params-legacy
is a backwards compatibility alias for
pp-macro-params-legacy
.
macro-params-multi
: multi-line macro calls with wrong
parameter count
macro-params-multi
is a backwards compatibility alias for
pp-macro-params-multi
.
macro-params-single
: single-line macro calls with wrong
parameter count
macro-params-single
is a backwards compatibility alias for
pp-macro-params-single
.
negative-rep
: regative %rep count
negative-rep
is a backwards compatibility alias for
pp-rep-negative
.
not-my-pragma
: %pragma not applicable to this compilation
not-my-pragma
is a backwards compatibility alias for
pragma-na
.
number-overflow
: numeric constant does not fit
number-overflow
covers warnings about numeric constants
which don't fit in 64 bits.
Enabled by default.
obsolete
: all obsolete-
warnings
obsolete
is a group alias for all warning classes prefixed
by obsolete-
; currently obsolete-nop
,
obsolete-removed
, obsolete-valid
.
obsolete-nop
: instruction obsolete and is a noop on the
target CPU
obsolete-nop
warns for an instruction which has been
removed from the architecture, but has been architecturally defined to be a
noop for future CPUs.
Enabled by default.
obsolete-removed
: instruction obsolete and removed on the
target CPU
obsolete-removed
warns for an instruction which has been
removed from the architecture, and is no longer included in the CPU
definition given in the [CPU]
directive, for example
POP CS
, the opcode for which, 0Fh
, instead is an
opcode prefix on CPUs newer than the first generation 8086.
Enabled by default.
obsolete-valid
: instruction obsolete but valid on the
target CPU
obsolete-valid
warns for an instruction which has been
removed from the architecture, but is still valid on the specific CPU given
in the CPU
directive. Code using these instructions is most
likely not forward compatible.
Enabled by default.
orphan-labels
: labels alone on lines without trailing `:'
orphan-labels
is a backwards compatibility alias for
label-orphan
.
other
: any warning not specifically mentioned above
other
specifies any warning not included in any specific
warning class.
Enabled by default.
phase
: phase error during stabilization
phase
warns about symbols having changed values during the
second-to-last assembly pass. This is not inherently fatal, but may be a
source of bugs.
Disabled by default.
pp
: all pp-
warnings
pp
is a group alias for all warning classes prefixed by
pp-
; currently pp-else-elif
,
pp-else-else
, pp-empty-braces
,
pp-environment
, pp-macro-def-case-single
,
pp-macro-def-greedy-single
,
pp-macro-def-param-single
, pp-macro-defaults
,
pp-macro-params-legacy
, pp-macro-params-multi
,
pp-macro-params-single
, pp-macro-redef-multi
,
pp-open-braces
, pp-open-brackets
,
pp-open-string
, pp-rep-negative
,
pp-sel-range
, pp-trailing
.
pp-else
: all pp-else-
warnings
pp-else
is a group alias for all warning classes prefixed
by pp-else-
; currently pp-else-elif
and
pp-else-else
.
pp-else-elif
: %elif after %else
pp-else-elif
warns that an %%elif
–type
directive was encountered after %%elif
will never be expanded.
Enabled by default.
pp-else-else
: %else after %else
pp-else-else
warns that a second %else
clause
was found for the same %if
statement. The content of this
%else
clause will never be expanded.
Enabled by default.
pp-empty-braces
: empty %{} construct
pp-empty-braces
warns that an empty %{}
was
encountered. This expands to a single %
character, which is
normally the %
arithmetic operator.
Enabled by default.
pp-environment
: nonexistent environment variable
pp-environment
warns if a nonexistent environment variable
is accessed using the %!
preprocessor construct (see
section 4.13.2.) Such
environment variables are treated as empty (with this warning issued)
starting in NASM 2.15; earlier versions of NASM would treat this as an
error.
Enabled by default.
pp-macro
: all pp-macro-
warnings
pp-macro
is a group alias for all warning classes prefixed
by pp-macro-
; currently pp-macro-def-case-single
,
pp-macro-def-greedy-single
,
pp-macro-def-param-single
, pp-macro-defaults
,
pp-macro-params-legacy
, pp-macro-params-multi
,
pp-macro-params-single
, pp-macro-redef-multi
.
pp-macro-def
: all pp-macro-def-
warnings
pp-macro-def
is a group alias for all warning classes
prefixed by pp-macro-def-
; currently
pp-macro-def-case-single
,
pp-macro-def-greedy-single
,
pp-macro-def-param-single
.
pp-macro-def-case-single
: single-line macro defined both
case sensitive and insensitive
pp-macro-def-case-single
warns when a single-line macro is
defined both case sensitive and case insensitive. The new macro definition
will override (shadow) the original one, although the original macro is not
deleted, and will be re-exposed if the new macro is deleted with
%undef
, or, if the original macro is the case insensitive one,
the macro call is done with a different case.
Enabled by default.
pp-macro-def-greedy-single
: single-line macro
pp-macro-def-greedy-single
definition shadows greedy macro
warns when a single-line macro is defined which would match a previously
existing greedy definition. The new macro definition will override (shadow)
the original one, although the original macro is not deleted, and will be
re-exposed if the new macro is deleted with %undef
, and will
be invoked if called with a parameter count that does not match the new
definition.
Enabled by default.
pp-macro-def-param-single
: single-line macro defined with
and without parameters
pp-macro-def-param-single
warns if the same single-line
macro is defined with and without parameters. The new macro definition will
override (shadow) the original one, although the original macro is not
deleted, and will be re-exposed if the new macro is deleted with
%undef
.
Enabled and promoted to error by default.
pp-macro-defaults
: macros with more default than optional
parameters
pp-macro-defaults
warns when a macro has more default
parameters than optional parameters. See
section 4.5.5 for why might want
to disable this warning.
Enabled by default.
pp-macro-params
: all pp-macro-params-
warnings
pp-macro-params
is a group alias for all warning classes
prefixed by pp-macro-params-
; currently
pp-macro-params-legacy
, pp-macro-params-multi
,
pp-macro-params-single
.
pp-macro-params-legacy
: improperly calling multi-line
macro for legacy support
pp-macro-params-legacy
warns about multi-line macros being
invoked with the wrong number of parameters, but for bug-compatibility with
NASM versions older than 2.15, NASM tried to fix up the parameters to match
the legacy behavior and call the macro anyway. This can happen in certain
cases where there are empty arguments without braces, sometimes as a result
of macro expansion.
The legacy behavior is quite strange and highly context-dependent, and can be disabled with:
%pragma preproc sane_empty_expansion true
It is highly recommended to use this option in new code.
Enabled by default.
pp-macro-params-multi
: multi-line macro calls with wrong
parameter count
pp-macro-params-multi
warns about multi-line macros being
invoked with the wrong number of parameters. See
section 4.5.1 for an example of
why you might want to disable this warning.
Enabled by default.
pp-macro-params-single
: single-line macro calls with wrong
parameter count
pp-macro-params-single
warns about single-line macros being
invoked with the wrong number of parameters.
Enabled by default.
pp-macro-redef-multi
: redefining multi-line macro
pp-macro-redef-multi
warns that a multi-line macro is being
redefined, without first removing the old definition with
%unmacro
.
Enabled by default.
pp-open
: all pp-open-
warnings
pp-open
is a group alias for all warning classes prefixed
by pp-open-
; currently pp-open-braces
,
pp-open-brackets
, pp-open-string
.
pp-open-braces
: unterminated %{...}
pp-open-braces
warns that a preprocessor parameter enclosed
in braces %{...}
lacks the terminating }
character.
Enabled by default.
pp-open-brackets
: unterminated %[...]
pp-open-brackets
warns that a preprocessor
%[...]
construct lacks the terminating ]
character.
Enabled by default.
pp-open-string
: unterminated string
pp-open-string
warns that a quoted string without a closing
quotation mark was encountered during preprocessing.
Enabled by default.
pp-rep-negative
: regative %rep count
pp-rep-negative
warns about a negative count given to the
%rep
preprocessor directive.
Enabled by default.
pp-sel-range
: %sel() argument out of range
pp-sel-range
warns that the %sel() preprocessor function
was passed a value less than 1 or larger than the number of available
arguments.
Enabled by default.
pp-trailing
: trailing garbage ignored
pp-trailing
warns that the preprocessor encountered
additional text where no such text was expected. This can sometimes be the
result of an incorrectly written expression, or arguments that are
inadvertently separated.
Enabled by default.
pragma
: all pragma-
warnings
pragma
is a group alias for all warning classes prefixed by
pragma-
; currently pragma-bad
,
pragma-empty
, pragma-na
,
pragma-unknown
.
pragma-bad
: malformed %pragma
pragma-bad
warns about a malformed or otherwise unparsable
%pragma
directive.
Disabled by default.
pragma-empty
: empty %pragma directive
pragma-empty
warns about a %pragma
directive
containing nothing. This is treated identically to
%pragma ignore
except for this optional warning.
Disabled by default.
pragma-na
: %pragma not applicable to this compilation
pragma-na
warns about a %pragma
directive
which is not applicable to this particular assembly session. This is not
yet implemented.
Disabled by default.
pragma-unknown
: unknown %pragma facility or directive
pragma-unknown
warns about an unknown %pragma
directive. This is not yet implemented for most cases.
Disabled by default.
prefix
: all prefix-
warnings
prefix
is a group alias for all warning classes prefixed by
prefix-
; currently prefix-bnd
,
prefix-hle
, prefix-lock
,
prefix-opsize
, prefix-seg
.
prefix-bnd
: invalid BND prefix
prefix-bnd
warns about ineffective use of the
BND
prefix when the JMP
instruction is converted
to the SHORT
form. This should be extremely rare since the
short JMP
only is applicable to jumps inside the same module,
but if it is legitimate, it may be necessary to use
bnd jmp dword
.
Enabled by default.
prefix-hle
: invalid HLE prefix
prefix-hle
warns about invalid use of the HLE
XACQUIRE
or XRELEASE
prefixes.
Enabled by default.
prefix-lock
: LOCK prefix on unlockable instructions
prefix-lock
warns about LOCK
prefixes on
unlockable instructions.
Enabled by default.
prefix-opsize
: invalid operand size prefix
prefix-opsize
warns that an operand prefix
(o16
, o32
, o64
, osp
)
invalid for the specified instruction has been specified. The operand
prefix will be ignored by the assembler.
Enabled by default.
prefix-seg
: segment prefix ignored in 64-bit mode
prefix-seg
warns that an es
, cs
,
ss
or ds
segment override prefix has no effect in
64-bit mode. The prefix will still be generated as requested.
Enabled by default.
ptr
: non-NASM keyword used in other assemblers
ptr
warns about keywords used in other assemblers that
might indicate a mistake in the source code. Currently only the MASM
PTR
keyword is recognized. See also
section 6.5.
Enabled by default.
regsize
: register size specification ignored
regsize
warns about a register with implicit size (such as
EAX
, which is always 32 bits) been given an explicit size
specification which is inconsistent with the size of the named register,
e.g. WORD EAX
. DWORD EAX
or WORD AX
are permitted, and do not trigger this warning. Some registers which do
not imply a specific size, such as K0
, may need this
specification unless the instruction itself implies the instruction size:
KMOVW K0,[foo] ; Permitted, KMOVW implies 16 bits KMOV WORD K0,[foo] ; Permitted, WORD K0 specifies instruction size KMOV K0,WORD [foo] ; Permitted, WORD [foo] specifies instruction size KMOV K0,[foo] ; Not permitted, instruction size ambiguous
Enabled by default.
unknown-pragma
: unknown %pragma facility or directive
unknown-pragma
is a backwards compatibility alias for
pragma-unknown
.
unknown-warning
: unknown warning in –W/-w or warning
directive
unknown-warning
warns about a -w
or
-W
option or a [WARNING]
directive that contains
an unknown warning name or is otherwise not possible to process.
Disabled by default.
user
: %warning directives
user
controls output of %warning
directives
(see section 4.11).
Enabled by default.
warn-stack-empty
: warning stack empty
warn-stack-empty
a [WARNING POP] directive was executed
when the warning stack is empty. This is treated as a [WARNING *all]
directive.
Enabled by default.
zeroing
: RESx in initialized section becomes zero
zeroing
a RESx
directive was used in a section
which contains initialized data, and the output format does not support
this. Instead, this will be replaced with explicit zero content, which may
produce a large output file.
Enabled by default.
zext-reloc
: relocation zero-extended to match output
format
zext-reloc
warns that a relocation has been zero-extended
due to limitations in the output format.
Enabled by default.