diff options
author | dgregor <dgregor@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-01-25 04:02:36 +0000 |
---|---|---|
committer | dgregor <dgregor@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-01-25 04:02:36 +0000 |
commit | ae49e4a6ba6f33430696f3ec4f06c0e66f2b5393 (patch) | |
tree | 8719ff17fe366c09f62ada22587f82ead23564a7 /gcc | |
parent | 7559fcaedfeace1ba91bd45d16eda8a3424dcc96 (diff) | |
download | gcc-ae49e4a6ba6f33430696f3ec4f06c0e66f2b5393.tar.gz |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@121161 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/cp/lex.c | 6 | ||||
-rw-r--r-- | gcc/cp/parser.c | 14 |
3 files changed, 26 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index afc66a88d31..e04ee5a4cc5 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 27a17c3d3fe..db78a474e5d 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 40009c218bf..fa18e20b99e 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; } |