From 3e77bfb6e9b286bbb53377fb5d7343e58ba34127 Mon Sep 17 00:00:00 2001 From: Michael Matz Date: Mon, 31 Oct 2016 03:59:31 +0100 Subject: 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). --- tests/pp/17.c | 14 ++++++++++++++ tests/pp/17.expect | 6 ++++++ 2 files changed, 20 insertions(+) create mode 100644 tests/pp/17.c create mode 100644 tests/pp/17.expect (limited to 'tests') 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)); diff --git a/tests/pp/17.expect b/tests/pp/17.expect new file mode 100644 index 0000000..e95aafe --- /dev/null +++ b/tests/pp/17.expect @@ -0,0 +1,6 @@ +X162 "onetok" +X161 "onetok" +X163 "one##tok" +X170 x ## y +X171 x ## y +X180 return Z(Z(1)); -- cgit v1.3.1