From: Mark Mitchell Date: Thu, 3 Sep 1998 19:42:09 +0000 (+0000) Subject: cp-tree.h (finish_globally_qualified_member_call_expr): Rename to ... X-Git-Tag: prereleases/libgcj-0.1~3223 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=75d587eb19b80a345745bccdc7e8b87a0e9975c7;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 482f14a762d5..d497b2cb2a9e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,15 @@ +1998-09-03 Mark Mitchell + + * 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 * cp-tree.h: Declare warn_nontemplate_friend. diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index bbca6bb93215..ebd0686db2c3 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 bf8cbaf37fc0..0b7260cf4902 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 6c66a55717a8..5bc8cb0bd93f 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 10ffe1987bfa..89aca96b8d94 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 000000000000..761ec0d960f8 --- /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); +}