aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2005-11-02 23:36:05 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2005-11-02 23:36:05 +0000
commite4ba253407edf4067221ca445fc41abfc0610827 (patch)
treee203341615c2dd042f26ced48f1ce60d7852d3d7 /gcc
parentfb530c72edd80bfdb02dd3a2f17e8df61b097859 (diff)
downloadgcc-e4ba253407edf4067221ca445fc41abfc0610827.zip
gcc-e4ba253407edf4067221ca445fc41abfc0610827.tar.gz
gcc-e4ba253407edf4067221ca445fc41abfc0610827.tar.bz2
re PR c++/24560 ("insufficient contextual information to determine type" is not a helpful error message)
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. From-SVN: r106408
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/parser.c8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/parse/dot1.C4
4 files changed, 20 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 3df7901..8d2ab78 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 94ce45f..9821981 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 058fcb3..e71f25c 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 0000000..3b027d7
--- /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" }