| www.delorie.com/archives/browse.cgi | search |
| 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--
| webmaster | delorie software privacy |
| Copyright © 2019 by DJ Delorie | Updated Jul 2019 |