OSDN Git Service

* cp-tree.h (finish_globally_qualified_member_call_expr):
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 3 Sep 1998 19:42:09 +0000 (19:42 +0000)
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 3 Sep 1998 19:42:09 +0000 (19:42 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@22222 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/method.c
gcc/cp/parse.y
gcc/cp/semantics.c
gcc/testsuite/g++.old-deja/g++.other/crash5.C [new file with mode: 0644]

index 482f14a..d497b2c 100644 (file)
@@ -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.
index bbca6bb..ebd0686 100644 (file)
@@ -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));
index bf8cbaf..0b7260c 100644 (file)
@@ -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;
 }
index 6c66a55..5bc8cb0 100644 (file)
@@ -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); 
index 10ffe19..89aca96 100644 (file)
@@ -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 (file)
index 0000000..761ec0d
--- /dev/null
@@ -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);
+}