mirror of
https://github.com/netwide-assembler/nasm.git
synced 2024-11-27 08:10:07 +08:00
BR 3392691: errors: issue ERR_PASS2 messages in preproc-only mode
In preproc-only mode, we only ever execute a single pass, so we need to still issue error messages created during that pass, otherwise we don't even generate %warning or %error messages... Reported-by: Jason Hood <jadoxa@yahoo.com.au> Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
This commit is contained in:
parent
61be48a383
commit
87a832e391
23
asm/nasm.c
23
asm/nasm.c
@ -644,7 +644,7 @@ int main(int argc, char **argv)
|
||||
|
||||
location.known = false;
|
||||
|
||||
_pass_type = PASS_FIRST; /* We emulate this assembly pass */
|
||||
_pass_type = PASS_PREPROC;
|
||||
preproc->reset(inname, PP_PREPROC, depend_list);
|
||||
|
||||
while ((line = preproc->getline())) {
|
||||
@ -1651,8 +1651,19 @@ static void assemble_file(const char *fname, struct strlist *depend_list)
|
||||
|
||||
while (!terminate_after_phase && !pass_final()) {
|
||||
_passn++;
|
||||
if (pass_type() != PASS_OPT || !global_offset_changed)
|
||||
switch (pass_type()) {
|
||||
case PASS_INIT:
|
||||
_pass_type = PASS_FIRST;
|
||||
break;
|
||||
case PASS_OPT:
|
||||
if (global_offset_changed)
|
||||
break; /* One more optimization pass */
|
||||
/* fall through */
|
||||
default:
|
||||
_pass_type++;
|
||||
break;
|
||||
}
|
||||
|
||||
global_offset_changed = 0;
|
||||
|
||||
/*
|
||||
@ -1830,8 +1841,12 @@ static bool skip_this_pass(errflags severity)
|
||||
if (type == ERR_LISTMSG)
|
||||
return true;
|
||||
|
||||
/* This message not applicable unless pass_final */
|
||||
return (severity & ERR_PASS2) && !pass_final();
|
||||
/*
|
||||
* This message not applicable unless it is the last pass we are going
|
||||
* to execute; this can be either the final code-generation pass or
|
||||
* the single pass executed in preproc-only mode.
|
||||
*/
|
||||
return (severity & ERR_PASS2) && !pass_final_or_preproc();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1284,6 +1284,7 @@ struct optimization {
|
||||
*/
|
||||
enum pass_type {
|
||||
PASS_INIT, /* Initialization, not doing anything yet */
|
||||
PASS_PREPROC, /* Preprocess-only mode (similar to PASS_FIRST) */
|
||||
PASS_FIRST, /* The very first pass over the code */
|
||||
PASS_OPT, /* Optimization pass */
|
||||
PASS_STAB, /* Stabilization pass (original pass 1) */
|
||||
@ -1319,6 +1320,11 @@ static inline bool pass_final(void)
|
||||
{
|
||||
return pass_type() >= PASS_FINAL;
|
||||
}
|
||||
/* True for code generation *or* preprocess-only mode */
|
||||
static inline bool pass_final_or_preproc(void)
|
||||
{
|
||||
return pass_type() >= PASS_FINAL || pass_type() == PASS_PREPROC;
|
||||
}
|
||||
|
||||
/*
|
||||
* The actual pass number. 0 is used during initialization, the very
|
||||
|
Loading…
Reference in New Issue
Block a user