From dg-rtp!uunet!tut.cis.ohio-state.edu!gzilla.eng.sun.com!tiemann Mon Jun  4 13:53:54 EDT 1990
Article 1949 of gnu.g++.bug:
Path: dg-rtp!uunet!tut.cis.ohio-state.edu!gzilla.eng.sun.com!tiemann
>From: tiemann@gzilla.eng.sun.com (Michael Tiemann)
Newsgroups: gnu.g++.bug
Subject: obscure operator new bug in g++1.36.2.
Message-ID: <9006030458.AA05657@gzilla.Eng.Sun.COM>
Date: 3 Jun 90 04:58:01 GMT
References: <9005240118.AA15191@boris.local>
Sender: daemon@tut.cis.ohio-state.edu
Reply-To: tiemann@cygnus.com
Distribution: gnu
Organization: Cygnus Support (+1 415 322 3811)
Lines: 62

Here's the fix for this obscure bug:

gzilla% diff -c2 cplus-init.c~ cplus-init.c
*** cplus-init.c~	Mon May 21 09:02:58 1990
--- cplus-init.c	Sat Jun  2 21:56:01 1990
***************
*** 2631,2636 ****
      {
        if (alignment)
! 	rval = build (BIT_AND_EXPR, TYPE_POINTER_TO (type),
! 		      rval, build1 (BIT_NOT_EXPR, integer_type_node, alignment));
        return rval;
      }
--- 2631,2639 ----
      {
        if (alignment)
! 	{
! 	  rval = build (PLUS_EXPR, TYPE_POINTER_TO (type), rval, alignment);
! 	  rval = build (BIT_AND_EXPR, TYPE_POINTER_TO (type),
! 			rval, build1 (BIT_NOT_EXPR, integer_type_node, alignment));
! 	}
        return rval;
      }
***************
*** 2647,2652 ****
  		    BIN, build_tree_list (NULL_TREE, size), 0);
        if (alignment)
! 	rval = build (BIT_AND_EXPR, TYPE_POINTER_TO (type),
! 		      rval, build1 (BIT_NOT_EXPR, integer_type_node, alignment));
        TREE_CALLS_NEW (rval) = 1;
        TREE_VOLATILE (rval) = 1;
--- 2650,2658 ----
  		    BIN, build_tree_list (NULL_TREE, size), 0);
        if (alignment)
! 	{
! 	  rval = build (PLUS_EXPR, TYPE_POINTER_TO (type), rval, alignment);
! 	  rval = build (BIT_AND_EXPR, TYPE_POINTER_TO (type),
! 			rval, build1 (BIT_NOT_EXPR, integer_type_node, alignment));
! 	}
        TREE_CALLS_NEW (rval) = 1;
        TREE_VOLATILE (rval) = 1;
***************
*** 2677,2682 ****
  			BIN, build_tree_list (NULL_TREE, size), 0);
  	  if (alignment)
! 	    rval = build (BIT_AND_EXPR, TYPE_POINTER_TO (type),
! 			  rval, build1 (BIT_NOT_EXPR, integer_type_node, alignment));
  	  TREE_CALLS_NEW (rval) = 1;
  	  TREE_VOLATILE (rval) = 1;
--- 2683,2691 ----
  			BIN, build_tree_list (NULL_TREE, size), 0);
  	  if (alignment)
! 	    {
! 	      rval = build (PLUS_EXPR, TYPE_POINTER_TO (type), rval, alignment);
! 	      rval = build (BIT_AND_EXPR, TYPE_POINTER_TO (type),
! 			    rval, build1 (BIT_NOT_EXPR, integer_type_node, alignment));
! 	    }
  	  TREE_CALLS_NEW (rval) = 1;
  	  TREE_VOLATILE (rval) = 1;
gzilla% 

Michael


