1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -Eonly -verify -pedantic %s
25f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer// pasting ""x"" and ""+"" does not give a valid preprocessing token
38c0d8a2cc4844ebed87842821930a0ebd3dc8924Chris Lattner#define XYZ  x ## +
48c0d8a2cc4844ebed87842821930a0ebd3dc8924Chris LattnerXYZ   // expected-error {{pasting formed 'x+', an invalid preprocessing token}}
58c0d8a2cc4844ebed87842821930a0ebd3dc8924Chris Lattner#define XXYZ  . ## test
68c0d8a2cc4844ebed87842821930a0ebd3dc8924Chris LattnerXXYZ   // expected-error {{pasting formed '.test', an invalid preprocessing token}}
75f016e2cb5d11daeb237544de1c5d59f20fe1a6eReid Spencer
8db56df6e5ed0353767f8d3911b2c8648d75c8a55Chris Lattner// GCC PR 20077
9db56df6e5ed0353767f8d3911b2c8648d75c8a55Chris Lattner
10db56df6e5ed0353767f8d3911b2c8648d75c8a55Chris Lattner#define a   a ## ## // expected-error {{'##' cannot appear at end of macro expansion}}
11db56df6e5ed0353767f8d3911b2c8648d75c8a55Chris Lattner#define b() b ## ## // expected-error {{'##' cannot appear at end of macro expansion}}
12db56df6e5ed0353767f8d3911b2c8648d75c8a55Chris Lattner#define c   c ##    // expected-error {{'##' cannot appear at end of macro expansion}}
13db56df6e5ed0353767f8d3911b2c8648d75c8a55Chris Lattner#define d() d ##    // expected-error {{'##' cannot appear at end of macro expansion}}
14db56df6e5ed0353767f8d3911b2c8648d75c8a55Chris Lattner
15db56df6e5ed0353767f8d3911b2c8648d75c8a55Chris Lattner
16db56df6e5ed0353767f8d3911b2c8648d75c8a55Chris Lattner#define e   ## ## e // expected-error {{'##' cannot appear at start of macro expansion}}
17db56df6e5ed0353767f8d3911b2c8648d75c8a55Chris Lattner#define f() ## ## f // expected-error {{'##' cannot appear at start of macro expansion}}
18db56df6e5ed0353767f8d3911b2c8648d75c8a55Chris Lattner#define g   ## g    // expected-error {{'##' cannot appear at start of macro expansion}}
19db56df6e5ed0353767f8d3911b2c8648d75c8a55Chris Lattner#define h() ## h    // expected-error {{'##' cannot appear at start of macro expansion}}
20db56df6e5ed0353767f8d3911b2c8648d75c8a55Chris Lattner#define i   ##      // expected-error {{'##' cannot appear at start of macro expansion}}
21db56df6e5ed0353767f8d3911b2c8648d75c8a55Chris Lattner#define j() ##      // expected-error {{'##' cannot appear at start of macro expansion}}
22db56df6e5ed0353767f8d3911b2c8648d75c8a55Chris Lattner
23332ee08e2fe78fde281e0868ec039b546cb6e0f4Chris Lattner// Invalid token pasting.
24332ee08e2fe78fde281e0868ec039b546cb6e0f4Chris Lattner// PR3918
25332ee08e2fe78fde281e0868ec039b546cb6e0f4Chris Lattner
26332ee08e2fe78fde281e0868ec039b546cb6e0f4Chris Lattner// When pasting creates poisoned identifiers, we error.
27332ee08e2fe78fde281e0868ec039b546cb6e0f4Chris Lattner#pragma GCC poison BLARG
28332ee08e2fe78fde281e0868ec039b546cb6e0f4Chris LattnerBLARG  // expected-error {{attempt to use a poisoned identifier}}
29332ee08e2fe78fde281e0868ec039b546cb6e0f4Chris Lattner#define XX BL ## ARG
30332ee08e2fe78fde281e0868ec039b546cb6e0f4Chris LattnerXX     // expected-error {{attempt to use a poisoned identifier}}
31332ee08e2fe78fde281e0868ec039b546cb6e0f4Chris Lattner
32332ee08e2fe78fde281e0868ec039b546cb6e0f4Chris Lattner#define VA __VA_ ## ARGS__
33332ee08e2fe78fde281e0868ec039b546cb6e0f4Chris Lattnerint VA;   // expected-warning {{__VA_ARGS__ can only appear in the expansion of a C99 variadic macro}}
34332ee08e2fe78fde281e0868ec039b546cb6e0f4Chris Lattner
35