+2007-01-24 Douglas Gregor <dgregor@osl.iu.edu>
+
+ * lex.c (D_CPP0X): Rename.
+ (D_CXX0X): To this.
+ (reswords): D_CPP0X -> D_CXX0X.
+ (init_reswords): Ditto.
+ * parser.c (cp_lexer_get_preprocessor_token): Warn about the use
+ of C++0x keywords as identifiers.
+
2007-01-23 Simon Martin <simartin@users.sourceforge.net>
PR c++/27492
#define D_EXT 0x01 /* GCC extension */
#define D_ASM 0x02 /* in C99, but has a switch to turn it off */
#define D_OBJC 0x04 /* Objective C++ only */
-#define D_CPP0X 0x08 /* C++0x only */
+#define D_CXX0X 0x08 /* C++0x only */
CONSTRAINT(ridbits_fit, RID_LAST_MODIFIER < sizeof(unsigned long) * CHAR_BIT);
{ "signed", RID_SIGNED, 0 },
{ "sizeof", RID_SIZEOF, 0 },
{ "static", RID_STATIC, 0 },
- { "static_assert", RID_STATIC_ASSERT, D_CPP0X },
+ { "static_assert", RID_STATIC_ASSERT, D_CXX0X },
{ "static_cast", RID_STATCAST, 0 },
{ "struct", RID_STRUCT, 0 },
{ "switch", RID_SWITCH, 0 },
int mask = ((flag_no_asm ? D_ASM : 0)
| D_OBJC
| (flag_no_gnu_keywords ? D_EXT : 0)
- | (flag_cpp0x ? 0 : D_CPP0X));
+ | (flag_cpp0x ? 0 : D_CXX0X));
ridpointers = GGC_CNEWVEC (tree, (int) RID_MAX);
for (i = 0; i < ARRAY_SIZE (reswords); i++)
}
else
{
+ if (warn_cxx0x_compat
+ && C_RID_CODE (token->u.value) >= RID_FIRST_CXX0X
+ && C_RID_CODE (token->u.value) <= RID_LAST_CXX0X)
+ {
+ /* Warn about the C++0x keyword (but still treat it as
+ an identifier). */
+ warning (0, "identifier %<%s%> will become a keyword in C++0x",
+ IDENTIFIER_POINTER (token->u.value));
+
+ /* Clear out the C_RID_CODE so we don't warn about this
+ particular identifier-turned-keyword again. */
+ C_RID_CODE (token->u.value) = RID_MAX;
+ }
+
token->ambiguous_p = false;
token->keyword = RID_MAX;
}