diff options
author | Joseph Myers <joseph@codesourcery.com> | 2009-04-19 18:10:56 +0100 |
---|---|---|
committer | Joseph Myers <jsm28@gcc.gnu.org> | 2009-04-19 18:10:56 +0100 |
commit | aa50850225d70521ace3948a8e5858425a918f6a (patch) | |
tree | 311d607f4a7b5f177b00f2193802a219b80ccc5e /libcpp/include/cpplib.h | |
parent | b6fa5b01018ac42682f8d69fff9e48f50b87c910 (diff) | |
download | gcc-aa50850225d70521ace3948a8e5858425a918f6a.zip gcc-aa50850225d70521ace3948a8e5858425a918f6a.tar.gz gcc-aa50850225d70521ace3948a8e5858425a918f6a.tar.bz2 |
re PR preprocessor/20078 (Gcc doesn't complain about non-benign macro definitions)
libcpp:
PR preprocessor/20078
* include/cpp-id-data.h (struct cpp_macro): Add extra_tokens
field.
* include/cpplib.h (SP_DIGRAPH, SP_PREV_WHITE): Define.
(struct cpp_token): Change flags to unsigned short.
* lex.c (_cpp_lex_direct): Initialize arg_no for CPP_PASTE tokens.
(_cpp_equiv_tokens): Check arg_no for CPP_PASTE tokens.
(cpp_token_val_index): Return CPP_TOKEN_FLD_ARG_NO for CPP_PASTE
tokens.
* macro.c (macro_real_token_count): New.
(enter_macro_context, replace_args): Use macro_real_token_count.
(create_iso_definition): Record whitespace surrounding and digraph
spelling of # and ## tokens using SP_PREV_WHITE and SP_DIGRAPH.
Set extra_tokens and save CPP_PASTE tokens with arg_no set for
multiple consecutive ## tokens.
(_cpp_create_definition): Initialize extra_tokens.
(cpp_macro_definition): Use macro_real_token_count.
gcc/testsuite:
* gcc.dg/cpp/paste16.c, gcc.dg/cpp/redef4.c: New tests.
From-SVN: r146352
Diffstat (limited to 'libcpp/include/cpplib.h')
-rw-r--r-- | libcpp/include/cpplib.h | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/libcpp/include/cpplib.h b/libcpp/include/cpplib.h index 434308b..3aeb035 100644 --- a/libcpp/include/cpplib.h +++ b/libcpp/include/cpplib.h @@ -178,6 +178,10 @@ struct cpp_string GTY(()) #define BOL (1 << 6) /* Token at beginning of line. */ #define PURE_ZERO (1 << 7) /* Single 0 digit, used by the C++ frontend, set in c-lex.c. */ +#define SP_DIGRAPH (1 << 8) /* # or ## token was a digraph. */ +#define SP_PREV_WHITE (1 << 9) /* If whitespace before a ## + operator, or before this token + after a # operator. */ /* Specify which field, if any, of the cpp_token union is used. */ @@ -196,7 +200,7 @@ struct cpp_token GTY(()) { source_location src_loc; /* Location of first char of token. */ ENUM_BITFIELD(cpp_ttype) type : CHAR_BIT; /* token type */ - unsigned char flags; /* flags - see above */ + unsigned short flags; /* flags - see above */ union cpp_token_u { |