[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