From f1e46600d2760d357297d87092a72e5d9a813832 Mon Sep 17 00:00:00 2001 From: "H. Peter Anvin" Date: Mon, 5 Jan 2009 09:08:06 -0800 Subject: [PATCH] Fix the [warning] directive Fix multiple bugs in the [warning] directive: - Only parsed on pass 1 - "-" was interpreted as "+" --- nasm.c | 58 ++++++++++++++++++++++++++++------------------------------ 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/nasm.c b/nasm.c index 7d002d33..8705f83e 100644 --- a/nasm.c +++ b/nasm.c @@ -1394,37 +1394,35 @@ static void assemble_file(char *fname, StrList **depend_ptr) ofmt->current_dfmt->debug_directive(debugid, p); break; case D_WARNING: /* [WARNING {+|-|*}warn-name] */ - if (pass1 == 1) { - while (*value && nasm_isspace(*value)) - value++; - - switch(*value) { - case '-': validid = 1; value++; break; - case '+': validid = 1; value++; break; - case '*': validid = 2; value++; break; - default: validid = 1; break; - } + while (*value && nasm_isspace(*value)) + value++; + + switch(*value) { + case '-': validid = 0; value++; break; + case '+': validid = 1; value++; break; + case '*': validid = 2; value++; break; + default: validid = 1; break; + } - for (i = 1; i <= ERR_WARN_MAX; i++) - if (!nasm_stricmp(value, warnings[i].name)) - break; - if (i <= ERR_WARN_MAX) { - switch(validid) { - case 0: - warning_on[i] = false; - break; - case 1: - warning_on[i] = true; - break; - case 2: - warning_on[i] = warning_on_global[i]; - break; - } - } - else - report_error(ERR_NONFATAL, - "invalid warning id in WARNING directive"); - } + for (i = 1; i <= ERR_WARN_MAX; i++) + if (!nasm_stricmp(value, warnings[i].name)) + break; + if (i <= ERR_WARN_MAX) { + switch(validid) { + case 0: + warning_on[i] = false; + break; + case 1: + warning_on[i] = true; + break; + case 2: + warning_on[i] = warning_on_global[i]; + break; + } + } + else + report_error(ERR_NONFATAL, + "invalid warning id in WARNING directive"); break; case D_CPU: /* [CPU] */ cpu = get_cpu(value); -- 2.11.4.GIT