summaryrefslogtreecommitdiffstats
path: root/libcpp/include
diff options
context:
space:
mode:
authorjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>2009-04-19 17:10:56 +0000
committerjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>2009-04-19 17:10:56 +0000
commit941f2388c6654af085ec92de505bc6b53d90b5fa (patch)
tree311d607f4a7b5f177b00f2193802a219b80ccc5e /libcpp/include
parentecfab407adc29d593a981d8da42eb3095bf3a1ad (diff)
downloadppe42-gcc-941f2388c6654af085ec92de505bc6b53d90b5fa.tar.gz
ppe42-gcc-941f2388c6654af085ec92de505bc6b53d90b5fa.zip
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@146352 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libcpp/include')
-rw-r--r--libcpp/include/cpp-id-data.h5
-rw-r--r--libcpp/include/cpplib.h6
2 files changed, 10 insertions, 1 deletions
diff --git a/libcpp/include/cpp-id-data.h b/libcpp/include/cpp-id-data.h
index afe4edad99e..029d424d511 100644
--- a/libcpp/include/cpp-id-data.h
+++ b/libcpp/include/cpp-id-data.h
@@ -75,4 +75,9 @@ struct cpp_macro GTY(())
/* Indicate which field of 'exp' is in use. */
unsigned int traditional : 1;
+
+ /* Indicate whether the tokens include extra CPP_PASTE tokens at the
+ end to track invalid redefinitions with consecutive CPP_PASTE
+ tokens. */
+ unsigned int extra_tokens : 1;
};
diff --git a/libcpp/include/cpplib.h b/libcpp/include/cpplib.h
index 434308b64da..3aeb035f48f 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
{
OpenPOWER on IntegriCloud