delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2006/04/07/20:34:27

X-Spam-Check-By: sourceware.org
To: cygwin AT cygwin DOT com
From: Steven Brown <swbrown AT ucsd DOT edu>
Subject: Reproducible, simple bug; g++ toolchain / std::string bug?
Date: Fri, 07 Apr 2006 17:34:09 -0700
Lines: 86
Message-ID: <e170di$ut0$1@sea.gmane.org>
Mime-Version: 1.0
User-Agent: Thunderbird 1.5 (Windows/20051201)
X-IsSubscribed: yes
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/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

--------------010208010209000003050604
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

I've run into what appears to be a bug in the g++ toolchain or the STL's 
std::string using the latest Cygwin dist (up to date as of right now). 
Minimal test case attached.

If my shared library does a callback to a function returning 
std::string, and only if the std::string is empty, I get an abort when 
that std::string is destroyed.

The attached files will show this bug - run make and the xxx-cygwin.exe 
that's produced and it will abort.  The same will happen if you use 
libtool to build it the right way - the autoconf/ dir in the bug's 
repository[1] can be used for that if you want to see it (copy it into 
the main dir, ./autogen.sh && make).

Any ideas as to where the problem lies or how to further identify it?


[1] https://svn.variadic.org/public/trunk/weirdbug/

--------------010208010209000003050604
Content-Type: text/plain;
 name="Makefile"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="Makefile"

all: xxx-cygwin

xxx-cygwin: testit.cc xxx.cc
	g++ -g -O2 -shared testit.cc -o testit-cygwin.dll && g++ -g -O2 xxx.cc testit-cygwin.dll -o xxx-cygwin.exe

clean:
	rm -f testit-cygwin.dll xxx-cygwin.exe

--------------010208010209000003050604
Content-Type: text/plain;
 name="testit.cc"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="testit.cc"

#include "testit.hpp"
#include <iostream>
using namespace std;

void testit(std::string (*contentGet)()) {
  contentGet();
}

--------------010208010209000003050604
Content-Type: text/plain;
 name="testit.hpp"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="testit.hpp"

#include <string>

void testit(std::string (*contentGet)());

--------------010208010209000003050604
Content-Type: text/plain;
 name="xxx.cc"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="xxx.cc"

#include "testit.hpp"
#include <iostream>
using namespace std;

std::string contentGet() {
  return string(""); // Anything other than empty string works.
}

int main() {
  testit(&contentGet);
  return 0;
}


--------------010208010209000003050604
Content-Type: text/plain; charset=us-ascii

--
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/
--------------010208010209000003050604--

- Raw text -


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