From 3f23e487f38e56a3daa66ad22dc2216fa17db885 Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Mon, 20 May 2019 06:59:06 +0000 Subject: [PATCH] [PATCH] Fix PR 81721: ICE with PCH and Pragma warning and C++ operator libcpp/ChangeLog: 2019-05-19 Andrew Pinski PR pch/81721 * lex.c (cpp_token_val_index ): If tok->flags has NAMED_OP set, then return CPP_TOKEN_FLD_NODE. gcc/testsuite/ChangeLog: 2019-05-19 Andrew Pinski PR pch/81721 * g++.dg/pch/operator-1.C: New testcase. * g++.dg/pch/operator-1.Hs: New file. From-SVN: r271395 --- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/g++.dg/pch/operator-1.C | 2 ++ gcc/testsuite/g++.dg/pch/operator-1.Hs | 9 +++++++++ libcpp/ChangeLog | 6 ++++++ libcpp/lex.c | 6 +++++- 5 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/pch/operator-1.C create mode 100644 gcc/testsuite/g++.dg/pch/operator-1.Hs diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fe971aa85d3..bb03a9b8442 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2019-05-19 Andrew Pinski + + PR pch/81721 + * g++.dg/pch/operator-1.C: New testcase. + * g++.dg/pch/operator-1.Hs: New file. + 2019-05-19 Paul Thomas PR fortran/90498 diff --git a/gcc/testsuite/g++.dg/pch/operator-1.C b/gcc/testsuite/g++.dg/pch/operator-1.C new file mode 100644 index 00000000000..290b5f7ab21 --- /dev/null +++ b/gcc/testsuite/g++.dg/pch/operator-1.C @@ -0,0 +1,2 @@ +#include "operator-1.H" +int main(void){ major(0);} /* { dg-warning "Did not Work" } */ diff --git a/gcc/testsuite/g++.dg/pch/operator-1.Hs b/gcc/testsuite/g++.dg/pch/operator-1.Hs new file mode 100644 index 00000000000..657dae1da3b --- /dev/null +++ b/gcc/testsuite/g++.dg/pch/operator-1.Hs @@ -0,0 +1,9 @@ +# define __glibc_macro_warning1(message) _Pragma (#message) +# define __glibc_macro_warning(message) \ + __glibc_macro_warning1 (GCC warning message) +#define __SYSMACROS_DM1(...) __glibc_macro_warning (#__VA_ARGS__) + +#define __SYSMACROS_DM(symbol) __SYSMACROS_DM1 \ + (Did not Work) + +# define major(dev) __SYSMACROS_DM (major) (dev+0) diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index 317d1bdd208..71a09495440 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,9 @@ +2019-05-19 Andrew Pinski + + PR pch/81721 + * lex.c (cpp_token_val_index ): If tok->flags + has NAMED_OP set, then return CPP_TOKEN_FLD_NODE. + 2019-05-14 Martin Liska PR preprocessor/90382 diff --git a/libcpp/lex.c b/libcpp/lex.c index eedfcbb3146..16ded6e9b05 100644 --- a/libcpp/lex.c +++ b/libcpp/lex.c @@ -3756,7 +3756,11 @@ cpp_token_val_index (const cpp_token *tok) case SPELL_LITERAL: return CPP_TOKEN_FLD_STR; case SPELL_OPERATOR: - if (tok->type == CPP_PASTE) + /* Operands which were originally spelled as ident keep around + the node for the exact spelling. */ + if (tok->flags & NAMED_OP) + return CPP_TOKEN_FLD_NODE; + else if (tok->type == CPP_PASTE) return CPP_TOKEN_FLD_TOKEN_NO; else return CPP_TOKEN_FLD_NONE; -- 2.30.2