From b07aa00d5cfda645978747d25c20643b7cc1ee7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20K=C4=85dzio=C5=82ka?= Date: Mon, 12 Oct 2020 12:27:06 +0200 Subject: [PATCH] Don't overwrite symbol when it's not allowed When a user tried to overwrite a builtin symbol, it would change its type despite the error, making the second try succeed. This is problematic, as the location of a builtin symbol cannot be updated. --- src/asm/symbol.c | 1 + test/asm/narg-overwrite.asm | 2 ++ test/asm/narg-overwrite.err | 5 +++++ test/asm/narg-overwrite.out | 0 4 files changed, 8 insertions(+) create mode 100644 test/asm/narg-overwrite.asm create mode 100644 test/asm/narg-overwrite.err create mode 100644 test/asm/narg-overwrite.out diff --git a/src/asm/symbol.c b/src/asm/symbol.c index 59c77541..ceb96bdc 100644 --- a/src/asm/symbol.c +++ b/src/asm/symbol.c @@ -426,6 +426,7 @@ struct Symbol *sym_AddSet(char const *symName, int32_t value) symName, sym->type == SYM_LABEL ? "label" : "constant"); dumpFilename(sym); putc('\n', stderr); + return sym; } else { /* TODO: can the scope be incorrect when taking over refs? */ updateSymbolFilename(sym); diff --git a/test/asm/narg-overwrite.asm b/test/asm/narg-overwrite.asm new file mode 100644 index 00000000..5a60b8e0 --- /dev/null +++ b/test/asm/narg-overwrite.asm @@ -0,0 +1,2 @@ +_NARG = 0 +_NARG = 0 diff --git a/test/asm/narg-overwrite.err b/test/asm/narg-overwrite.err new file mode 100644 index 00000000..033298ce --- /dev/null +++ b/test/asm/narg-overwrite.err @@ -0,0 +1,5 @@ +ERROR: narg-overwrite.asm(1): + '_NARG' already defined as constant at +ERROR: narg-overwrite.asm(2): + '_NARG' already defined as constant at +error: Assembly aborted (2 errors)! diff --git a/test/asm/narg-overwrite.out b/test/asm/narg-overwrite.out new file mode 100644 index 00000000..e69de29b