mirror of
https://github.com/netwide-assembler/nasm.git
synced 2025-02-17 17:19:35 +08:00
warnings: make it possible for a warning to default to an error
This allows us to do soft-migration of warnings to errors; they will now be nonfatal errors by default, but gives the user the option to demote them. Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
This commit is contained in:
parent
93367ea97b
commit
eb48c1191d
56
asm/error.c
56
asm/error.c
@ -46,34 +46,38 @@
|
||||
* Description of the suppressible warnings for the command line and
|
||||
* the [warning] directive.
|
||||
*/
|
||||
#define on (WARN_ST_ENABLED)
|
||||
#define off 0
|
||||
#define err (WARN_ST_ENABLED|WARN_ST_ERROR)
|
||||
|
||||
const struct warning warnings[WARN_ALL+1] = {
|
||||
{NULL, NULL, true}, /* must be true - used for unconditional enable */
|
||||
{"macro-params", "macro calls with wrong parameter count", true},
|
||||
{"macro-selfref", "cyclic macro references", false},
|
||||
{"macro-defaults", "macros with more default than optional parameters", true},
|
||||
{"orphan-labels", "labels alone on lines without trailing `:'", true},
|
||||
{"number-overflow", "numeric constant does not fit", true},
|
||||
{"gnu-elf-extensions", "using 8- or 16-bit relocation in ELF32, a GNU extension", false},
|
||||
{"float-overflow", "floating point overflow", true},
|
||||
{"float-denorm", "floating point denormal", false},
|
||||
{"float-underflow", "floating point underflow", false},
|
||||
{"float-toolong", "too many digits in floating-point number", true},
|
||||
{"user", "%warning directives", true},
|
||||
{"lock", "lock prefix on unlockable instructions", true},
|
||||
{"hle", "invalid hle prefixes", true},
|
||||
{"bnd", "invalid bnd prefixes", true},
|
||||
{"zext-reloc", "relocation zero-extended to match output format", true},
|
||||
{"ptr", "non-NASM keyword used in other assemblers", true},
|
||||
{"bad-pragma", "empty or malformed %pragma", false},
|
||||
{"unknown-pragma", "unknown %pragma facility or directive", false},
|
||||
{"not-my-pragma", "%pragma not applicable to this compilation", false},
|
||||
{"unknown-warning", "unknown warning in -W/-w or warning directive", false},
|
||||
{"negative-rep", "regative %rep count", true},
|
||||
{"phase", "phase error during stabilization", false},
|
||||
{NULL, NULL, on}, /* must be on - used for unconditional enable */
|
||||
{"macro-params", "macro calls with wrong parameter count", on},
|
||||
{"macro-selfref", "cyclic macro references", off},
|
||||
{"macro-defaults", "macros with more default than optional parameters", on},
|
||||
{"orphan-labels", "labels alone on lines without trailing `:'", on},
|
||||
{"number-overflow", "numeric constant does not fit", on},
|
||||
{"gnu-elf-extensions", "using 8- or 16-bit relocation in ELF32, a GNU extension", off},
|
||||
{"float-overflow", "floating point overflow", on},
|
||||
{"float-denorm", "floating point denormal", off},
|
||||
{"float-underflow", "floating point underflow", off},
|
||||
{"float-toolong", "too many digits in floating-point number", on},
|
||||
{"user", "%warning directives", on},
|
||||
{"lock", "lock prefix on unlockable instructions", on},
|
||||
{"hle", "invalid hle prefixes", on},
|
||||
{"bnd", "invalid bnd prefixes", on},
|
||||
{"zext-reloc", "relocation zero-extended to match output format", on},
|
||||
{"ptr", "non-NASM keyword used in other assemblers", on},
|
||||
{"bad-pragma", "empty or malformed %pragma", off},
|
||||
{"unknown-pragma", "unknown %pragma facility or directive", off},
|
||||
{"not-my-pragma", "%pragma not applicable to this compilation", off},
|
||||
{"unknown-warning", "unknown warning in -W/-w or warning directive", off},
|
||||
{"negative-rep", "regative %rep count", on},
|
||||
{"phase", "phase error during stabilization", off},
|
||||
|
||||
/* THESE ENTRIES SHOULD COME LAST */
|
||||
{"other", "any warning not specifially mentioned below", true},
|
||||
{"all", "all possible warnings", false}
|
||||
{"other", "any warning not specifially mentioned below", on},
|
||||
{"all", "all possible warnings", off}
|
||||
};
|
||||
|
||||
uint8_t warning_state[WARN_ALL];/* Current state */
|
||||
@ -120,7 +124,7 @@ fatal_func nasm_assert_failed(const char *file, int line, const char *msg)
|
||||
|
||||
/*
|
||||
* This is called when processing a -w or -W option, or a warning directive.
|
||||
* Returns true if if the action was successful.
|
||||
* Returns on if if the action was successful.
|
||||
*/
|
||||
bool set_warning_status(const char *value)
|
||||
{
|
||||
|
@ -1346,10 +1346,8 @@ static void parse_cmdline(int argc, char **argv, int pass)
|
||||
* Initialize all the warnings to their default state, including
|
||||
* warning index 0 used for "always on".
|
||||
*/
|
||||
for (i = 0; i < WARN_ALL; i++) {
|
||||
warning_state_init[i] = warning_state[i] =
|
||||
warnings[i].enabled ? WARN_ST_ENABLED : 0;
|
||||
}
|
||||
for (i = 0; i < WARN_ALL; i++)
|
||||
warning_state_init[i] = warning_state[i] = warnings[i].state;
|
||||
|
||||
/*
|
||||
* First, process the NASMENV environment variable.
|
||||
@ -2059,7 +2057,8 @@ static void help(const char xopt)
|
||||
printf(" %-23s %s%s\n",
|
||||
warnings[i].name, warnings[i].help,
|
||||
i == WARN_ALL ? "\n" :
|
||||
warnings[i].enabled ? " [on]" : " [off]");
|
||||
(warnings[i].state & WARN_ST_ERROR) ? " [error]" :
|
||||
(warnings[i].state & WARN_ST_ENABLED) ? " [on]" : " [off]");
|
||||
|
||||
if (xopt == 'f') {
|
||||
printf("valid output formats for -f are"
|
||||
|
@ -120,17 +120,16 @@ static inline vefunc nasm_set_verror(vefunc ve)
|
||||
#define WARN_ALL (22+2) /* Do not use WARN() here */
|
||||
#define WARN_OTHER WARN(WARN_ALL-1) /* any noncategorized warning */
|
||||
|
||||
struct warning {
|
||||
const char *name;
|
||||
const char *help;
|
||||
bool enabled;
|
||||
};
|
||||
extern const struct warning warnings[WARN_ALL+1];
|
||||
|
||||
/* This is a bitmask */
|
||||
#define WARN_ST_ENABLED 1 /* Warning is currently enabled */
|
||||
#define WARN_ST_ERROR 2 /* Treat this warning as an error */
|
||||
|
||||
struct warning {
|
||||
const char *name;
|
||||
const char *help;
|
||||
uint8_t state; /* Default state for this warning */
|
||||
};
|
||||
extern const struct warning warnings[WARN_ALL+1];
|
||||
extern uint8_t warning_state[WARN_ALL];
|
||||
extern uint8_t warning_state_init[WARN_ALL];
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user