// Copyright (C) 2020-2023 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library.  This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.

// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING3.  If not see
// <http://www.gnu.org/licenses/>.

// { dg-do compile { target x86_64-*-linux* } }
// { dg-add-options no_pch }

// Names taken from coding_style.bad_identifiers in the libstdc++ manual.
// We can't test this on all targets, because these names are used in
// non-GCC system headers. Test on x86_64-linux where we know these particular
// names aren't used.

// For Solaris:
#define _B		_B is a BADNAME
#define _C		_C is a BADNAME
#define _L		_L is a BADNAME
#define _N		_N is a BADNAME
#define _P		_P is a BADNAME
#define _S		_S is a BADNAME
#define _U		_U is a BADNAME
#define _X		_X is a BADNAME
#define _E1		_E1 is a BADNAME
#define _E2		_E2 is a BADNAME
#define _E3		_E3 is a BADNAME
#define _E4		_E4 is a BADNAME
#define _E5		_E5 is a BADNAME
#define _E6		_E6 is a BADNAME
#define _E7		_E7 is a BADNAME
#define _E8		_E8 is a BADNAME
#define _E9		_E9 is a BADNAME
#define _E10		_E10 is a BADNAME
#define _E11		_E11 is a BADNAME
#define _E12		_E12 is a BADNAME
#define _E13		_E13 is a BADNAME
#define _E14		_E14 is a BADNAME
#define _E15		_E15 is a BADNAME
#define _E16		_E16 is a BADNAME
#define _E17		_E17 is a BADNAME
#define _E18		_E18 is a BADNAME
#define _E19		_E19 is a BADNAME
#define _E20		_E20 is a BADNAME
#define _E21		_E21 is a BADNAME
#define _E22		_E22 is a BADNAME
#define _E23		_E23 is a BADNAME
#define _E24		_E24 is a BADNAME

// Irix adds:
#define _A		_A is a BADNAME
#define _G		_G is a BADNAME

// MS adds:
#define _T		_T is a BADNAME
#define __deref		__deref is a BADNAME

// BSD adds:
#define __used		__used is a BADNAME
#define __unused	__unused is a BADNAME
        // __inline	(glibc uses this so can't test here)
        // _Complex	(glibc uses this so can't test here)
#define __istype	__istype is a BADNAME
#define __maskrune	__maskrune is a BADNAME
#define __tolower	__tolower is a BADNAME
#define __toupper	__toupper is a BADNAME
#define __wchar_t	__wchar_t is a BADNAME
#define __wint_t	__wint_t is a BADNAME
        // _res
        // _res_ext
	// __tg_*

// VxWorks adds:
#define _C2		_C2 is a BADNAME


#include <bits/stdc++.h>
