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