aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/ChangeLog9
-rw-r--r--gcc/cp/lex.c6
-rw-r--r--gcc/cp/parser.c14
3 files changed, 26 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index afc66a8..e04ee5a 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,12 @@
+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
diff --git a/gcc/cp/lex.c b/gcc/cp/lex.c
index 27a17c3..db78a47 100644
--- a/gcc/cp/lex.c
+++ b/gcc/cp/lex.c
@@ -176,7 +176,7 @@ struct resword
#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);
@@ -260,7 +260,7 @@ static const struct resword reswords[] =
{ "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 },
@@ -317,7 +317,7 @@ init_reswords (void)
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++)
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 40009c2..fa18e20 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -443,6 +443,20 @@ cp_lexer_get_preprocessor_token (cp_lexer *lexer ATTRIBUTE_UNUSED ,
}
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;
}