[gnu.g++.bug] fix to a fix

tiemann@sun.com (Michael Tiemann) (09/12/89)

The last bugfix I posted for expr.c was *WRONG*.  The following diff
undoes it, if you have already installed it.  In any event, the fixes
for cplus-init.c do solve the problem.

teacake% diff -c2 expr.c~ expr.c
*** expr.c~	Mon Sep 11 18:06:27 1989
--- expr.c	Mon Sep 11 18:05:55 1989
***************
*** 2306,2310 ****
        if (RTL_EXPR_SEQUENCE (exp) == const0_rtx)
  	abort ();
!       emit_insn (RTL_EXPR_SEQUENCE (exp));
        RTL_EXPR_SEQUENCE (exp) = const0_rtx;
        return RTL_EXPR_RTL (exp);
--- 2306,2310 ----
        if (RTL_EXPR_SEQUENCE (exp) == const0_rtx)
  	abort ();
!       emit_insns (RTL_EXPR_SEQUENCE (exp));
        RTL_EXPR_SEQUENCE (exp) = const0_rtx;
        return RTL_EXPR_RTL (exp);
teacake% diff -c2 cplus-init.c~ cplus-init.c
*** cplus-init.c~	Mon Sep 11 10:42:53 1989
--- cplus-init.c	Mon Sep 11 18:09:40 1989
***************
*** 1023,1030 ****
  				CLASSTYPE_AS_LIST (for_type), flags);
        /* Private, protected, or otherwise unavailable.  */
!       if (rval == error_mark_node)
  	error_with_aggr_type (for_type, "in base initialization for class `%s'");
        /* A valid initialization using constructor.  */
!       else if (rval != NULL_TREE)
  	{
  	  if (alias_this == 0
--- 1023,1030 ----
  				CLASSTYPE_AS_LIST (for_type), flags);
        /* Private, protected, or otherwise unavailable.  */
!       if (rval == error_mark_node && protect > 0)
  	error_with_aggr_type (for_type, "in base initialization for class `%s'");
        /* A valid initialization using constructor.  */
!       else if (rval != error_mark_node && rval != NULL_TREE)
  	{
  	  if (alias_this == 0
***************
*** 1137,1141 ****
  	  else
  	    {
! 	      error_with_aggr_type (for_type, "invalid initializer to constructor for type `%s'");
  	      return;
  	    }
--- 1137,1142 ----
  	  else
  	    {
! 	      error_with_aggr_type (for_type, "in base initialization for class `%s',");
! 	      error_with_aggr_type (type, "invalid initializer to constructor for type `%s'");
  	      return;
  	    }
***************
*** 1145,1148 ****
--- 1146,1150 ----
  	  if (init == NULL_TREE)
  	    assert (parms == NULL_TREE);
+ 	  error_with_aggr_type (for_type, "in base initialization for class `%s',");
  	  /* This will make an error message for us.  */
  	  build_method_call (exp, DECL_NAME (TYPE_NAME (type)), parms,
***************
*** 3188,3194 ****
  	return build (NOP_EXPR, void_type_node, integer_zero_node);
  
!       rval = build (RTL_EXPR, void_type_node);
  
!       head = start_sequence ();
        expand_vec_delete (base, maxindex, elt_size,
  			 dtor_dummy, auto_delete_vec,
--- 3190,3197 ----
  	return build (NOP_EXPR, void_type_node, integer_zero_node);
  
!       rval = make_node (RTL_EXPR);
!       TREE_TYPE (rval) = void_type_node;
  
!       start_sequence ();
        expand_vec_delete (base, maxindex, elt_size,
  			 dtor_dummy, auto_delete_vec,
***************
*** 3195,3199 ****
  			 auto_delete);
        TREE_VOLATILE (rval) = 1;
!       RTL_EXPR_SEQUENCE (rval) = gen_sequence ();
        end_sequence ();
        return rval;
--- 3198,3203 ----
  			 auto_delete);
        TREE_VOLATILE (rval) = 1;
!       emit_insn (gen_sequence ());
!       RTL_EXPR_SEQUENCE (rval) = get_insns ();
        end_sequence ();
        return rval;
teacake% 

Michael