aboutsummaryrefslogtreecommitdiff
path: root/tests/pp/17.c
diff options
context:
space:
mode:
authorMichael Matz <matz@suse.de>2016-10-31 03:59:31 +0100
committerMichael Matz <matz@suse.de>2016-12-15 17:49:56 +0100
commit3e77bfb6e9b286bbb53377fb5d7343e58ba34127 (patch)
treef8798307b10322c629c01217dafb36b3ab013a84 /tests/pp/17.c
parent3db037387c16c7e582f76167d32d5c29ac32fb15 (diff)
downloadtinycc-3e77bfb6e9b286bbb53377fb5d7343e58ba34127.tar.gz
tinycc-3e77bfb6e9b286bbb53377fb5d7343e58ba34127.tar.bz2
tccpp: Fix token pasting
See testcase. We must always paste tokens (at least if not currently substing a normal argument, which is a speed optimization only now) but at the same time must not regard a ## token coming from argument expansion as the token-paste operator, nor if we constructed a ## token due to pasting itself (that was already checked by pp/01.c).
Diffstat (limited to 'tests/pp/17.c')
-rw-r--r--tests/pp/17.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/tests/pp/17.c b/tests/pp/17.c
new file mode 100644
index 0000000..f12196f
--- /dev/null
+++ b/tests/pp/17.c
@@ -0,0 +1,14 @@
+#define STR1(u) # u
+#define pass(a) a
+#define __ASM_REG(reg) STR1(one##reg)
+#define _ASM_DX __ASM_REG(tok)
+X162 pass(__ASM_REG(tok))
+X161 pass(_ASM_DX)
+X163 pass(STR1(one##tok))
+
+X170 pass(x ## y)
+X171 pass(x pass(##) y)
+
+#define Y(x) Z(x)
+#define X Y
+X180 return X(X(1));