aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMark Mitchell <mark@markmitchell.com>1998-09-03 19:42:09 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>1998-09-03 19:42:09 +0000
commit75d587eb19b80a345745bccdc7e8b87a0e9975c7 (patch)
tree34b7a018e23a5ba57226abd16b8e942c28c7a568 /gcc
parent51c10c4e057033f7adc2fba96c549575e30d81c2 (diff)
downloadgcc-75d587eb19b80a345745bccdc7e8b87a0e9975c7.zip
gcc-75d587eb19b80a345745bccdc7e8b87a0e9975c7.tar.gz
gcc-75d587eb19b80a345745bccdc7e8b87a0e9975c7.tar.bz2
cp-tree.h (finish_globally_qualified_member_call_expr): Rename to ...
* cp-tree.h (finish_globally_qualified_member_call_expr): Rename to ... (finish_qualified_call_expr). * semantics.c: Likewise. * parse.y (primary): Use it. * method.c (hack_identifier): Remove redundant code. * init.c (resolve_offset_ref): Call convert_from_reference to handle members of reference type. Improve error recovery. From-SVN: r22222
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog12
-rw-r--r--gcc/cp/cp-tree.h2
-rw-r--r--gcc/cp/method.c2
-rw-r--r--gcc/cp/parse.y4
-rw-r--r--gcc/cp/semantics.c2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.other/crash5.C21
6 files changed, 38 insertions, 5 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 482f14a..d497b2c 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,15 @@
+1998-09-03 Mark Mitchell <mark@markmitchell.com>
+
+ * cp-tree.h (finish_globally_qualified_member_call_expr):
+ Rename to ...
+ (finish_qualified_call_expr).
+ * semantics.c: Likewise.
+ * parse.y (primary): Use it.
+ * method.c (hack_identifier): Remove redundant code.
+
+ * init.c (resolve_offset_ref): Call convert_from_reference to
+ handle members of reference type. Improve error recovery.
+
1998-09-03 Benjamin Kosnik <bkoz@cygnus.com>
* cp-tree.h: Declare warn_nontemplate_friend.
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index bbca6bb..ebd0686 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -2932,7 +2932,7 @@ extern tree finish_this_expr PROTO((void));
extern tree finish_object_call_expr PROTO((tree, tree, tree));
extern tree finish_qualified_object_call_expr PROTO((tree, tree, tree));
extern tree finish_pseudo_destructor_call_expr PROTO((tree, tree, tree));
-extern tree finish_globally_qualified_member_call_expr PROTO ((tree, tree));
+extern tree finish_qualified_call_expr PROTO ((tree, tree));
extern tree finish_label_address_expr PROTO((tree));
extern tree finish_unary_op_expr PROTO((enum tree_code, tree));
extern tree finish_id_expr PROTO((tree));
diff --git a/gcc/cp/method.c b/gcc/cp/method.c
index bf8cbaf..0b7260c 100644
--- a/gcc/cp/method.c
+++ b/gcc/cp/method.c
@@ -1954,7 +1954,7 @@ hack_identifier (value, name)
return value;
}
- if (TREE_CODE (type) == REFERENCE_TYPE && ! processing_template_decl)
+ if (! processing_template_decl)
value = convert_from_reference (value);
return value;
}
diff --git a/gcc/cp/parse.y b/gcc/cp/parse.y
index 6c66a55..5bc8cb0 100644
--- a/gcc/cp/parse.y
+++ b/gcc/cp/parse.y
@@ -1491,9 +1491,9 @@ primary:
| overqualified_id %prec HYPERUNARY
{ $$ = build_offset_ref (OP0 ($$), OP1 ($$)); }
| overqualified_id '(' nonnull_exprlist ')'
- { $$ = finish_globally_qualified_member_call_expr ($1, $3); }
+ { $$ = finish_qualified_call_expr ($1, $3); }
| overqualified_id LEFT_RIGHT
- { $$ = finish_globally_qualified_member_call_expr ($1, NULL_TREE); }
+ { $$ = finish_qualified_call_expr ($1, NULL_TREE); }
| object object_template_id %prec UNARY
{
$$ = build_x_component_ref ($$, $2, NULL_TREE, 1);
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 10ffe19..89aca96 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -995,7 +995,7 @@ finish_pseudo_destructor_call_expr (object, scope, destructor)
ARGS. Returns an expression for the call. */
tree
-finish_globally_qualified_member_call_expr (fn, args)
+finish_qualified_call_expr (fn, args)
tree fn;
tree args;
{
diff --git a/gcc/testsuite/g++.old-deja/g++.other/crash5.C b/gcc/testsuite/g++.old-deja/g++.other/crash5.C
new file mode 100644
index 0000000..761ec0d
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.other/crash5.C
@@ -0,0 +1,21 @@
+// Build don't link:
+
+class TecMesh {};
+
+extern TecMesh& m;
+
+struct X {
+ X(TecMesh&);
+};
+
+struct D {
+ D();
+ TecMesh& Mesh;
+};
+
+
+D::D ()
+ : Mesh(m)
+{
+ X x(D::Mesh);
+}