aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Pinski <apinski@marvell.com>2019-05-20 06:59:06 +0000
committerAndrew Pinski <pinskia@gcc.gnu.org>2019-05-19 23:59:06 -0700
commit3f23e487f38e56a3daa66ad22dc2216fa17db885 (patch)
tree397fd7d94db61830bbfe735e6f8b5f0846098e48
parent55fd9fcd83baa4034d6a5e4a0ad6527c69b94668 (diff)
downloadgcc-3f23e487f38e56a3daa66ad22dc2216fa17db885.zip
gcc-3f23e487f38e56a3daa66ad22dc2216fa17db885.tar.gz
gcc-3f23e487f38e56a3daa66ad22dc2216fa17db885.tar.bz2
[PATCH] Fix PR 81721: ICE with PCH and Pragma warning and C++ operator
libcpp/ChangeLog: 2019-05-19 Andrew Pinski <apinski@marvell.com> PR pch/81721 * lex.c (cpp_token_val_index <case SPELL_OPERATOR>): If tok->flags has NAMED_OP set, then return CPP_TOKEN_FLD_NODE. gcc/testsuite/ChangeLog: 2019-05-19 Andrew Pinski <apinski@marvell.com> PR pch/81721 * g++.dg/pch/operator-1.C: New testcase. * g++.dg/pch/operator-1.Hs: New file. From-SVN: r271395
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/pch/operator-1.C2
-rw-r--r--gcc/testsuite/g++.dg/pch/operator-1.Hs9
-rw-r--r--libcpp/ChangeLog6
-rw-r--r--libcpp/lex.c6
5 files changed, 28 insertions, 1 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index fe971aa..bb03a9b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2019-05-19 Andrew Pinski <apinski@marvell.com>
+
+ PR pch/81721
+ * g++.dg/pch/operator-1.C: New testcase.
+ * g++.dg/pch/operator-1.Hs: New file.
+
2019-05-19 Paul Thomas <pault@gcc.gnu.org>
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 0000000..290b5f7
--- /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 0000000..657dae1
--- /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 317d1bd..71a0949 100644
--- a/libcpp/ChangeLog
+++ b/libcpp/ChangeLog
@@ -1,3 +1,9 @@
+2019-05-19 Andrew Pinski <apinski@marvell.com>
+
+ PR pch/81721
+ * lex.c (cpp_token_val_index <case SPELL_OPERATOR>): If tok->flags
+ has NAMED_OP set, then return CPP_TOKEN_FLD_NODE.
+
2019-05-14 Martin Liska <mliska@suse.cz>
PR preprocessor/90382
diff --git a/libcpp/lex.c b/libcpp/lex.c
index eedfcbb..16ded6e 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;