Date: Thu, 6 Nov 2014 09:36:52 +0000 From: David Chisnall <theraven@FreeBSD.org> To: Rui Paulo <rpaulo@me.com> Cc: svn-src-head@freebsd.org, Baptiste Daroussin <bapt@FreeBSD.org>, src-committers@freebsd.org, svn-src-all@freebsd.org Subject: Re: svn commit: r273382 - head/contrib/libcxxrt Message-ID: <9E81312A-E615-49C2-84C5-D4CF9EA96232@FreeBSD.org> In-Reply-To: <7819250D-0FE0-44E6-86DA-718AEA2B261C@me.com> References: <201410211252.s9LCq2R5053286@svn.freebsd.org> <7819250D-0FE0-44E6-86DA-718AEA2B261C@me.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On 6 Nov 2014, at 01:04, Rui Paulo <rpaulo@me.com> wrote: > I don't think the non-temporary fix was ever committed. What's the = problem? Is something else defining these methods? Yes, they're defined by libc++ too. The problem is that gcc 4.9 wants = to be able to throw bad_array_new_length exceptions when you do new = foo[x] and sizeof(foo) * x overflows. It does this by calling a support = function defined in the C++ runtime, but that means that the C++ runtime = must have the bad_array_new_length class defined there too. Having the = methods on those classes defined in libcxxrt and libc++ breaks things. The correct fix was to move a #endif in libc++ so that it didn't compile = those functions. There was some discussion about whether we needed to = support the case that old libc++ and new libcxxrt were used, but it's = probably not required. Bapt was going to check whether there were any = symbol versioning issues with code compiled against old libc++/libcxxrt = and dynamically linked against the new one. =20 David
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?9E81312A-E615-49C2-84C5-D4CF9EA96232>