From ejc@gargoyle.bazzle.com  Fri Nov 15 13:51:01 1996
Received: from gargoyle.bazzle.com (gargoyle.bazzle.com [206.103.246.190])
          by freefall.freebsd.org (8.7.5/8.7.3) with ESMTP id NAA19604
          for <FreeBSD-gnats-submit@freebsd.org>; Fri, 15 Nov 1996 13:50:58 -0800 (PST)
Received: (from ejc@localhost) by gargoyle.bazzle.com (8.8.2/8.6.12) id QAA15864; Fri, 15 Nov 1996 16:50:55 -0500 (EST)
Message-Id: <199611152150.QAA15864@gargoyle.bazzle.com>
Date: Fri, 15 Nov 1996 16:50:55 -0500 (EST)
From: ejci@gargoyle.bazzle.com
Reply-To: ejc@gargoyle.bazzle.com, dob@nasvr1.cb.lucent.com
To: FreeBSD-gnats-submit@freebsd.org
Subject: STL deque bug 
X-Send-Pr-Version: 3.2

>Number:         2035
>Category:       gnu
>Synopsis:       deque bug, local gnu changes to deque header improperly applied
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    peter
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Nov 15 14:00:02 PST 1996
>Closed-Date:    Thu Apr 30 10:31:38 PDT 1998
>Last-Modified:  Thu Apr 30 10:33:41 PDT 1998
>Originator:     Eric J. Chet
>Release:        FreeBSD 3.0-CURRENT i386
>Organization:
>Environment:
	-current as of 11/14/96

>Description:

I found the bug in FreeBSD GNU STL version of deque.h.  Looks like a source 
file maintenance error.   

>How-To-Repeat:

#include <iostream.h>
#include <deque.h>

int
main()
{
	deque<double> a;

	for ( int i = 0 ; i < 8000 ; i++ ) 
	{
		a.push_front( i );
	}
	return 1;
}

>Fix:
	
*** deque.h.ORG	Fri Nov  8 15:36:38 1996
--- deque.h	Fri Nov  8 15:36:46 1996
*************** void deque<T>::allocate_at_begin() {
*** 437,444 ****
  	    finish = iterator(finish.current, map + map_size / 4 + i + 1);
  	} else {
  #ifdef __GNUG__
! 	map_size = map_allocator_type::init_page_size();
! 	map = map_allocator_type::allocate(map_size);
  #else
  	    *--start.node = p;
  	    start = iterator(p + __dq_buffer_size, start.node);
--- 437,446 ----
  	    finish = iterator(finish.current, map + map_size / 4 + i + 1);
  	} else {
  #ifdef __GNUG__
! //	map_size = map_allocator_type::init_page_size();
! //	map = map_allocator_type::allocate(map_size);
! 	    *--start.node = p;
! 	    start = iterator(p + __dq_buffer_size, start.node);
  #else
  	    *--start.node = p;
  	    start = iterator(p + __dq_buffer_size, start.node);


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->peter 
Responsible-Changed-By: mpp 
Responsible-Changed-When: Sat Feb 22 19:49:05 PST 1997 
Responsible-Changed-Why:  
Peter imported it. 

State-Changed-From-To: open->closed 
State-Changed-By: peter 
State-Changed-When: Thu Apr 30 10:31:38 PDT 1998 
State-Changed-Why:  
Somebody "fixed" the original #ifdef typo, the code depended on the 
original mistake.  It should now be fixed by un-"fix"ing it in rev 1.3. 
>Unformatted:
