mirror of
https://github.com/netwide-assembler/nasm.git
synced 2025-02-17 17:19:35 +08:00
BR 3392668: preproc: test for macro in TOK_LOCAL_SYMBOL
TOK_LOCAL_SYMBOL is only applicable inside a macro; otherwise error out just like we do for TOK_MMACRO_PARAM. This *partially* addresses BR 3392668. Reported-by: <puppet@zju.edu.cn> Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
This commit is contained in:
parent
941c75a2b2
commit
a762cd4e54
@ -4756,6 +4756,7 @@ static Token *expand_mmac_params(Token * tline)
|
||||
|
||||
while (tline) {
|
||||
bool change;
|
||||
bool err_not_mac = false;
|
||||
Token *t = tline;
|
||||
const char *text = tok_text(t);
|
||||
int type = t->type;
|
||||
@ -4765,9 +4766,15 @@ static Token *expand_mmac_params(Token * tline)
|
||||
|
||||
switch (type) {
|
||||
case TOK_LOCAL_SYMBOL:
|
||||
change = true;
|
||||
|
||||
if (!mac) {
|
||||
err_not_mac = true;
|
||||
break;
|
||||
}
|
||||
|
||||
type = TOK_ID;
|
||||
text = nasm_asprintf("..@%"PRIu64".%s", mac->unique, text+2);
|
||||
change = true;
|
||||
break;
|
||||
case TOK_MMACRO_PARAM:
|
||||
{
|
||||
@ -4776,8 +4783,7 @@ static Token *expand_mmac_params(Token * tline)
|
||||
change = true;
|
||||
|
||||
if (!mac) {
|
||||
nasm_nonfatal("`%s': not in a macro call", text);
|
||||
text = NULL;
|
||||
err_not_mac = true;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -4910,6 +4916,12 @@ static Token *expand_mmac_params(Token * tline)
|
||||
break;
|
||||
}
|
||||
|
||||
if (err_not_mac) {
|
||||
nasm_nonfatal("`%s': not in a macro call", text);
|
||||
text = NULL;
|
||||
change = true;
|
||||
}
|
||||
|
||||
if (change) {
|
||||
if (!text) {
|
||||
delete_Token(t);
|
||||
|
BIN
test/br3392668-3.asm
Normal file
BIN
test/br3392668-3.asm
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user