This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

A patch for g++.jason/crash6.C


Please ignore my last patch. This patch seems to fix g++.jason/crash6.C.

Thanks.


-- 
H.J. Lu (hjl@gnu.org)
---
Wed May 27 18:42:01 1998  H.J. Lu  (hjl@gnu.org)

	* call.c (build_scoped_method_call): Check if return from
	get_type_value (name) is NULL.
	(build_method_call): Likewise.

Index: call.c
===================================================================
RCS file: /home/work/cvs/gnu/egcs/gcc/cp/call.c,v
retrieving revision 1.1.1.43
diff -u -p -r1.1.1.43 call.c
--- call.c	1998/05/26 14:41:01	1.1.1.43
+++ call.c	1998/05/27 22:54:24
@@ -389,13 +389,16 @@ build_scoped_method_call (exp, basetype,
      and template parms.  */
   if (TREE_CODE (name) == BIT_NOT_EXPR && ! IS_AGGR_TYPE (basetype))
     {
+      tree tv;
+
       if (TYPE_MAIN_VARIANT (type) != TYPE_MAIN_VARIANT (basetype))
 	cp_error ("type of `%E' does not match destructor type `%T' (type was `%T')",
 		  exp, basetype, type);
       name = TREE_OPERAND (name, 0);
       if (TYPE_MAIN_VARIANT (basetype) != name 
-	  && (TYPE_MAIN_VARIANT (basetype)
-	      != TYPE_MAIN_VARIANT (get_type_value (name))))
+	  && (!(tv = get_type_value (name))
+	      || (TYPE_MAIN_VARIANT (basetype)
+		  != TYPE_MAIN_VARIANT (tv))))
 	cp_error ("qualified type `%T' does not match destructor name `~%T'",
 		  basetype, name);
       return cp_convert (void_type_node, exp);
@@ -632,6 +635,8 @@ build_method_call (instance, name, parms
 
   if (TREE_CODE (name) == BIT_NOT_EXPR)
     {
+      tree tv;
+
       flags |= LOOKUP_DESTRUCTOR;
       name = TREE_OPERAND (name, 0);
       if (parms)
@@ -642,8 +647,9 @@ build_method_call (instance, name, parms
       if (! (name == TYPE_MAIN_VARIANT (basetype)
 	     || (IS_AGGR_TYPE (basetype)
 		 && name == constructor_name (basetype))
-	     || (TYPE_MAIN_VARIANT (basetype)
-		 == TYPE_MAIN_VARIANT (get_type_value (name)))))
+	     || ((tv = get_type_value (name))
+		 && (TYPE_MAIN_VARIANT (basetype)
+		     == TYPE_MAIN_VARIANT (tv)))))
 	{
 	  cp_error ("destructor name `~%D' does not match type `%T' of expression",
 		    name, basetype);


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]