aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Soroka <gits@joesoroka.com>2011-07-08 00:55:34 -0700
committerJoe Soroka <gits@joesoroka.com>2011-07-08 00:55:34 -0700
commitd01f65ef935d4d9eb78d4b9442a7538346b1f0a9 (patch)
treeb2e84c9a162a9e8c966af7b447b40946daa1d3c6
parentf8656fbc3c3f9830b2c96b0d900bf8740cb5201f (diff)
downloadtinycc-d01f65ef935d4d9eb78d4b9442a7538346b1f0a9.tar.gz
tinycc-d01f65ef935d4d9eb78d4b9442a7538346b1f0a9.tar.bz2
fix end-of-scope for self-referential macros
-rw-r--r--tccpp.c2
-rw-r--r--tests/tcctest.c3
2 files changed, 3 insertions, 2 deletions
diff --git a/tccpp.c b/tccpp.c
index 6aa067f..33c65a4 100644
--- a/tccpp.c
+++ b/tccpp.c
@@ -2689,6 +2689,8 @@ static int macro_subst_tok(TokenString *tok_str,
ml->p = NULL;
*can_read_stream = ml -> prev;
}
+ /* also, end of scope for nested defined symbol */
+ (*nested_list)->v = -1;
goto redo;
}
} else {
diff --git a/tests/tcctest.c b/tests/tcctest.c
index 8d558e3..22f3fdb 100644
--- a/tests/tcctest.c
+++ b/tests/tcctest.c
@@ -290,13 +290,12 @@ static void print_num(char *fn, int line, int num) {
void recursive_macro_test(void)
{
-#if 0 /* doesnt work yet */
+
#define ELF32_ST_TYPE(val) ((val) & 0xf)
#define ELF32_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf))
#define STB_WEAK 2 /* Weak symbol */
#define ELFW(type) ELF##32##_##type
printf("%d\n", ELFW(ST_INFO)(STB_WEAK, ELFW(ST_TYPE)(123)));
-#endif
#define WRAP(x) x