diff options
author | Mark Mitchell <mark@markmitchell.com> | 1998-09-03 19:42:09 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 1998-09-03 19:42:09 +0000 |
commit | 75d587eb19b80a345745bccdc7e8b87a0e9975c7 (patch) | |
tree | 34b7a018e23a5ba57226abd16b8e942c28c7a568 | |
parent | 51c10c4e057033f7adc2fba96c549575e30d81c2 (diff) | |
download | gcc-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
-rw-r--r-- | gcc/cp/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/cp/cp-tree.h | 2 | ||||
-rw-r--r-- | gcc/cp/method.c | 2 | ||||
-rw-r--r-- | gcc/cp/parse.y | 4 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.other/crash5.C | 21 |
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); +} |