summaryrefslogtreecommitdiff
path: root/asm
diff options
context:
space:
mode:
authorH. Peter Anvin (Intel) <hpa@zytor.com>2020-06-01 11:49:08 -0700
committerH. Peter Anvin (Intel) <hpa@zytor.com>2020-06-01 11:49:08 -0700
commita762cd4e5402a3605c4962567c47c36c2bd3accf (patch)
treeee3bd32f0313a17dc939fbb2010cefa7327d4096 /asm
parent941c75a2b2b674e88bff25ad8f6333097306dcb0 (diff)
downloadnasm-a762cd4e5402a3605c4962567c47c36c2bd3accf.tar.gz
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>
Diffstat (limited to 'asm')
-rw-r--r--asm/preproc.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/asm/preproc.c b/asm/preproc.c
index 9ab05765..c7b2e7d4 100644
--- a/asm/preproc.c
+++ b/asm/preproc.c
@@ -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);