[gcc/devel/omp/gcc-9] PR c++/91521 - wrong error with operator->.
Tobias Burnus
burnus@gcc.gnu.org
Thu Mar 5 13:57:00 GMT 2020
https://gcc.gnu.org/g:736257f74fa51f582832482fd8654f2cef8da891
commit 736257f74fa51f582832482fd8654f2cef8da891
Author: Marek Polacek <polacek@redhat.com>
Date: Fri Aug 23 23:26:17 2019 +0000
PR c++/91521 - wrong error with operator->.
* decl.c (grokdeclarator): Return error_mark_node for an invalid
trailing return type.
* g++.dg/parse/operator8.C: New test.
From-SVN: r274892
Diff:
---
gcc/cp/ChangeLog | 9 +++++++++
gcc/cp/decl.c | 2 ++
gcc/testsuite/g++.dg/parse/operator8.C | 13 +++++++++++++
3 files changed, 24 insertions(+)
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 512e4e7..adc0a83 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,12 @@
+2019-08-23 Marek Polacek <polacek@redhat.com>
+
+ Backported from mainline
+ 2019-08-23 Marek Polacek <polacek@redhat.com>
+
+ PR c++/91521 - wrong error with operator->.
+ * decl.c (grokdeclarator): Return error_mark_node for an invalid
+ trailing return type.
+
2019-08-16 Jason Merrill <jason@redhat.com>
PR c++/90393 - ICE with throw in ?:
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 92e58af..05ceda8 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -11436,6 +11436,8 @@ grokdeclarator (const cp_declarator *declarator,
else if (late_return_type
&& sfk != sfk_conversion)
{
+ if (late_return_type == error_mark_node)
+ return error_mark_node;
if (cxx_dialect < cxx11)
/* Not using maybe_warn_cpp0x because this should
always be an error. */
diff --git a/gcc/testsuite/g++.dg/parse/operator8.C b/gcc/testsuite/g++.dg/parse/operator8.C
new file mode 100644
index 0000000..c5ee3eb
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/operator8.C
@@ -0,0 +1,13 @@
+// PR c++/91521 - wrong error with operator->.
+// { dg-do compile }
+
+struct foo {
+ int bar() { return 0; }
+ foo* operator->() { return this; }
+};
+
+int main()
+{
+ int pt(foo()->bar());
+ return pt;
+}
More information about the Gcc-cvs
mailing list