delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2003/11/28/10:16:20

Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sources.redhat.com/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
From: "Tom Scott" <tscott AT StorageMatrix DOT com>
To: <cygwin AT cygwin DOT com>
Subject: RE: Code generation bug for operator new[] when -fcheck-new in GCC 3.3.1
Date: Fri, 28 Nov 2003 10:17:24 -0500
Organization: Storage Matrix, Inc.
Message-ID: <000001c3b5c2$bad46370$6400a8c0@DELL2K>
MIME-Version: 1.0
X-Priority: 3 (Normal)
X-MSMail-Priority: Normal
In-Reply-To: <000c01c3b462$94729dc0$6400a8c0@DELL2K>
Importance: Normal
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165

This bug is more properly a bug with GCC and not with cygwin - it shows up
in GCC 3.2.2 (i386-redhat-linux) as well. So I've submitted the problem to
GCC Bugzilla.  It's Bug 13215. - Tom

-----Original Message-----
From: Tom Scott [mailto:tscott AT StorageMatrix DOT com] 
Sent: Wednesday, November 26, 2003 4:17 PM
To: cygwin AT cygwin DOT com
Subject: Code generation bug for operator new[] when -fcheck-new in GCC
3.3.1


I've found that the following sample, which uses nothrow memory allocation
semantics, generates a segmentation violation:

// g++ -g -fcheck-new -fno-exceptions -fno-rtti sample.cpp #include
<stdlib.h>
 
class foo {
public:
    int v;
    foo(){ v = 0; }
    ~foo() {}
    void* operator new[](size_t size) {
        return 0;   // simulated memory failure
    }
    void operator delete[](void* p, size_t size) { }
};
 
main()
{
    foo *p = new foo[2];
    // p==4 here
    if (p) delete [] p;
    return 0;
}

The segmentation violation results from a bug in the code that is generated
to call operator new[].  The return of operator new[] is correctly checked
for non-zero before calling the ctor ("-fcheck-new" semantics), but this
return value is subsequently incremented by 4.  As a result, p is set to 4
(not 0) when memory runs out.
 
A work around is to modify applications so that the return value of "new
class[]" is checked and to treat a return of 4 the same as 0.
 
Tom


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019