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).
		
			
				
	
	
		
			14 lines
		
	
	
	
		
			289 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			14 lines
		
	
	
	
		
			289 B
		
	
	
	
		
			C
		
	
	
	
	
	
#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));
 |