summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2009-01-05 09:08:06 -0800
committerH. Peter Anvin <hpa@zytor.com>2009-01-05 09:08:06 -0800
commitf1e46600d2760d357297d87092a72e5d9a813832 (patch)
treead8fba4192d41d5b3696761b5490775983d5d67b
parentf5fb7234954418f3ea6f70845c7aad78e03cfc8a (diff)
downloadnasm-f1e46600d2760d357297d87092a72e5d9a813832.tar.gz
Fix the [warning] directive
Fix multiple bugs in the [warning] directive: - Only parsed on pass 1 - "-" was interpreted as "+"
-rw-r--r--nasm.c58
1 files 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);