public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c++/9982: placement new returns wrong value
@ 2003-03-06 19:41 bangerth
  0 siblings, 0 replies; 3+ messages in thread
From: bangerth @ 2003-03-06 19:41 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, kunert, nobody

Synopsis: placement new returns wrong value

State-Changed-From-To: open->closed
State-Changed-By: bangerth
State-Changed-When: Thu Mar  6 19:41:07 2003
State-Changed-Why:
    This is not a bug. For array expressions, the compiler puts
    the number of array elements into the first slot (pointed to
    by the placement argument), and only then the elements of the
    array. This is so because delete[] needs this information.
    
    This behavior seems allowed by reading 5.3.4, clauses 6, 11
    and 12.
    
    W.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=9982


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: c++/9982: placement new returns wrong value
@ 2003-03-07 13:26 Thomas Kunert
  0 siblings, 0 replies; 3+ messages in thread
From: Thomas Kunert @ 2003-03-07 13:26 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/9982; it has been noted by GNATS.

From: Thomas Kunert <kunert@physik.tu-dresden.de>
To: bangerth@dealii.org, gcc-bugs@gcc.gnu.org, gcc-prs@gcc.gnu.org,
        kunert@physik.tu-dresden.de, nobody@gcc.gnu.org, gcc-gnats@gcc.gnu.org
Cc:  
Subject: Re: c++/9982: placement new returns wrong value
Date: Fri, 07 Mar 2003 14:21:54 +0100

 bangerth@dealii.org wrote:
 > Synopsis: placement new returns wrong value
 > 
 > State-Changed-From-To: open->closed
 > State-Changed-By: bangerth
 > State-Changed-When: Thu Mar  6 19:41:07 2003
 > State-Changed-Why:
 >     This is not a bug. For array expressions, the compiler puts
 >     the number of array elements into the first slot (pointed to
 >     by the placement argument), and only then the elements of the
 >     array. This is so because delete[] needs this information.
 >     
 
 There is no delete[] corresponding to the placement new[], hence this is 
 useless. In many cases the compiler actually seems to figure that out:
 changing the line
 
      A  * b = new(a) A[3];
 
 to
 
      A  * b = new((void*)a) A[3];
 
 makes a and b pointing to the same position. Why is the difference here?
 
 But you are right, the standard seems to allow any behavior. However, 
 this makes operator new(a)[] pretty much useless, since the final 
 position of the new array is undefined and one does not even know the 
 necessary size of the provided memory region.
 
 Thomas
 
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=9982
 
 
 


^ permalink raw reply	[flat|nested] 3+ messages in thread

* c++/9982: placement new returns wrong value
@ 2003-03-06 18:46 kunert
  0 siblings, 0 replies; 3+ messages in thread
From: kunert @ 2003-03-06 18:46 UTC (permalink / raw)
  To: gcc-gnats


>Number:         9982
>Category:       c++
>Synopsis:       placement new returns wrong value
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          wrong-code
>Submitter-Id:   net
>Arrival-Date:   Thu Mar 06 18:46:01 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     kunert@physik.tu-dresden.de
>Release:        3.4 20030304
>Organization:
>Environment:
Reading specs from /opt/lib/gcc-lib/i686-pc-linux-gnu/3.4/specs
Configured with: ../configure --enable-shared --program-suffix= --prefix=/opt --enable-languages=c,c++,f77 --enable-__cxa_atexit
Thread model: posix
gcc version 3.4 20030304 (experimental)
>Description:
#include<iostream>
using namespace std;

struct A {
    ~A(){}
};

int main()
{
    A * a = (A*) new char[20];
    A  * b = new(a) A[3];
    cout << a << ' ' << b << endl;
}

a and b should be identical, but
running this program shows different velues.

3.2.1 has the same bug.
>How-To-Repeat:

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2003-03-07 13:26 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-03-06 19:41 c++/9982: placement new returns wrong value bangerth
  -- strict thread matches above, loose matches on Subject: below --
2003-03-07 13:26 Thomas Kunert
2003-03-06 18:46 kunert

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).