diff options
author | H. Peter Anvin <hpa@zytor.com> | 2009-01-05 09:08:06 -0800 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2009-01-05 09:08:06 -0800 |
commit | f1e46600d2760d357297d87092a72e5d9a813832 (patch) | |
tree | ad8fba4192d41d5b3696761b5490775983d5d67b | |
parent | f5fb7234954418f3ea6f70845c7aad78e03cfc8a (diff) | |
download | nasm-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.c | 58 |
1 files changed, 28 insertions, 30 deletions
@@ -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); |