From e3e18063c657428dd9043bd631595a38be2f4d7c Mon Sep 17 00:00:00 2001 From: ISSOtm Date: Tue, 27 Aug 2019 21:07:42 +0200 Subject: [PATCH] Prevent `SET` from overriding constant symbols Fixes #341 --- CONTRIBUTORS.rst | 2 ++ src/asm/symbol.c | 5 +++++ test/asm/symbol-override.asm | 14 ++++++++++++++ test/asm/symbol-override.out | 8 ++++++++ test/asm/symbol-override.out.pipe | 8 ++++++++ 5 files changed, 37 insertions(+) create mode 100644 test/asm/symbol-override.asm create mode 100644 test/asm/symbol-override.out create mode 100644 test/asm/symbol-override.out.pipe diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index f9efc062..5c399656 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -30,6 +30,8 @@ Other contributors - David Brotz +- Eldred Habert + - The Musl C library - obskyr diff --git a/src/asm/symbol.c b/src/asm/symbol.c index 60431c0a..4874624a 100644 --- a/src/asm/symbol.c +++ b/src/asm/symbol.c @@ -553,6 +553,11 @@ void sym_AddSet(char *tzSym, int32_t value) tzSym, nsym->tzFileName, nsym->nFileLine); + else if (!(nsym->nType & SYMF_SET)) + yyerror("'%s' already defined as constant at %s(%u)", + tzSym, + nsym->tzFileName, + nsym->nFileLine); } else if (nsym->nType & SYMF_REF) { yyerror("'%s' already referenced at %s(%u)", tzSym, diff --git a/test/asm/symbol-override.asm b/test/asm/symbol-override.asm new file mode 100644 index 00000000..80d4f0f7 --- /dev/null +++ b/test/asm/symbol-override.asm @@ -0,0 +1,14 @@ +V set 0 +V set 1 + PRINTT "V={V}\n" + +W equ 1 +W set 0 + +rsset 1 +X rb 0 +X set 0 + +SECTION "Test", ROM0[1] +Y: +Y set 0 diff --git a/test/asm/symbol-override.out b/test/asm/symbol-override.out new file mode 100644 index 00000000..551d2819 --- /dev/null +++ b/test/asm/symbol-override.out @@ -0,0 +1,8 @@ +ERROR: symbol-override.asm(6): + 'W' already defined as constant at symbol-override.asm(5) +ERROR: symbol-override.asm(10): + 'X' already defined as constant at symbol-override.asm(9) +ERROR: symbol-override.asm(14): + 'Y' already defined as non-constant at symbol-override.asm(13) +error: Assembly aborted (3 errors)! +V=$1 diff --git a/test/asm/symbol-override.out.pipe b/test/asm/symbol-override.out.pipe new file mode 100644 index 00000000..3daa163b --- /dev/null +++ b/test/asm/symbol-override.out.pipe @@ -0,0 +1,8 @@ +ERROR: -(6): + 'W' already defined as constant at -(5) +ERROR: -(10): + 'X' already defined as constant at -(9) +ERROR: -(14): + 'Y' already defined as non-constant at -(13) +error: Assembly aborted (3 errors)! +V=$1