From e3efb139d4c7135eacfe2a7060254da8d33c8e5a Mon Sep 17 00:00:00 2001
From: mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Wed, 2 Nov 2005 23:36:05 +0000
Subject: [PATCH] 	PR c++/24560 	* parser.c
 (cp_parser_postfix_dot_deref_expression): Improve error 	message for
 use of overloaded functions on LHS of "." operator. 	PR c++/24560 	*
 g++.dg/parse/dot1.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@106408 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/cp/ChangeLog                  | 4 ++++
 gcc/cp/parser.c                   | 8 +++++++-
 gcc/testsuite/ChangeLog           | 5 +++++
 gcc/testsuite/g++.dg/parse/dot1.C | 4 ++++
 4 files changed, 20 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/g++.dg/parse/dot1.C

diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 3df790125ee9..8d2ab78a2140 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,9 @@
 2005-11-02  Mark Mitchell  <mark@codesourcery.com>
 
+	PR c++/24560
+	* parser.c (cp_parser_postfix_dot_deref_expression): Improve error
+	message for use of overloaded functions on LHS of "." operator.
+
 	PR c++/19253
 	* parser.c (cp_parser_postfix_expression): Use
 	cp_parser_elaborated_type_specifier to handle typename-types in
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index 94ce45f5f2d3..9821981f310f 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -4363,7 +4363,13 @@ cp_parser_postfix_dot_deref_expression (cp_parser *parser,
 	 underlying type here.  */
       scope = non_reference (scope);
       /* The type of the POSTFIX_EXPRESSION must be complete.  */
-      scope = complete_type_or_else (scope, NULL_TREE);
+      if (scope == unknown_type_node)
+	{
+	  error ("%qE does not have class type", postfix_expression);
+	  scope = NULL_TREE;
+	}
+      else
+	scope = complete_type_or_else (scope, NULL_TREE);
       /* Let the name lookup machinery know that we are processing a
 	 class member access expression.  */
       parser->context->object_type = scope;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 058fcb30e3e8..e71f25cbdc8d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2005-11-02  Mark Mitchell  <mark@codesourcery.com>
+
+	PR c++/24560
+	* g++.dg/parse/dot1.C: New test.
+
 2005-11-02  Jan Hubicka  <jh@suse.cz>
 
 	PR target/23303
diff --git a/gcc/testsuite/g++.dg/parse/dot1.C b/gcc/testsuite/g++.dg/parse/dot1.C
new file mode 100644
index 000000000000..3b027d7c1f0d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/dot1.C
@@ -0,0 +1,4 @@
+// PR c++/24560
+
+struct A { void f(); };
+void g() { A().f.a; } // { dg-error "class" }
-- 
GitLab