FAQ
Hi,

It's no big deal, but current Strawberry Perl 32-bit and 64-bit compilers
create executables that crash when expq() is called.

Here's the minimalistic demo script:

####################
#include <quadmath.h>

int main (void) {
   __float128 r;

   r = expq(2.0Q);
   r = sqrtq(2.0Q);
   r = fabsq(2.0Q);
   r = sinq(2.0Q);
   r = logq(2.0Q);
   r = cosq(2.0Q);

   return 0;
}

####################

The resultant executable crashes when run, but remove the expq() call and
there's no problem. (Link to -lquadmath when building the above program.)

It's not just MinGW64's gcc-4.6.3 compilers that are affected. I find the
same with their 64-bit gcc-4.7.0, and 4.8.1 compilers. (I haven't tested any
other MinGW64 compilers.)

I've also found that mingw.org's gcc-4.7.0 does *not* suffer this problem;
nor does Ubuntu's gcc-4.6.3 ... so I guess I probably should report this to
the mingw64 project.

BTW, the perl relevance here is that, because of this bug, Math::Float128
crashes its test suite when expq() gets called. But I don't think that
there's a high demand for this module, so I wouldn't be too concerned about
that aspect.

Also of slight relevance to Strawberry Perl is the fact that
c/lib/gcc/[whatever]-w64-mingw32/4.6.3 is not in $Config{libpth}.
As a consequence perl does not automatically find -lquadmath when the
Math::Float128 Makefile.PL is run, and perl therefore removes the link. (The
gcc linker can find -lquadmath without any help at all ... but it won't look
for that library if perl has removed the link.)

Cheers,
Rob

Search Discussions

  • Kmx at Nov 24, 2013 at 9:41 pm
    Hi Rob,
    On 5.10.2013 17:06, sisyphus1@optusnet.com.au wrote:
    Hi,

    It's no big deal, but current Strawberry Perl 32-bit and 64-bit compilers
    create executables that crash when expq() is called.

    Here's the minimalistic demo script:

    ####################
    #include <quadmath.h>

    int main (void) {
    __float128 r;

    r = expq(2.0Q);
    r = sqrtq(2.0Q);
    r = fabsq(2.0Q);
    r = sinq(2.0Q);
    r = logq(2.0Q);
    r = cosq(2.0Q);

    return 0;
    }

    ####################

    The resultant executable crashes when run, but remove the expq() call and
    there's no problem. (Link to -lquadmath when building the above program.)

    It's not just MinGW64's gcc-4.6.3 compilers that are affected. I find the
    same with their 64-bit gcc-4.7.0, and 4.8.1 compilers. (I haven't tested
    any other MinGW64 compilers.)

    I've also found that mingw.org's gcc-4.7.0 does *not* suffer this
    problem; nor does Ubuntu's gcc-4.6.3 ... so I guess I probably should
    report this to the mingw64 project.

    BTW, the perl relevance here is that, because of this bug, Math::Float128
    crashes its test suite when expq() gets called. But I don't think that
    there's a high demand for this module, so I wouldn't be too concerned
    about that aspect.
    I am afraid I cannot do much about expq crash unless there is newer version
    of gcc and/or mingw-w64 runtime which does not suffer from this.

    Also of slight relevance to Strawberry Perl is the fact that
    c/lib/gcc/[whatever]-w64-mingw32/4.6.3 is not in $Config{libpth}.
    As a consequence perl does not automatically find -lquadmath when the
    Math::Float128 Makefile.PL is run, and perl therefore removes the link.
    (The gcc linker can find -lquadmath without any help at all ... but it
    won't look for that library if perl has removed the link.)
    As for this part you mean using something like this:

    libpth='C:\strawberry\c\lib C:\strawberry\c\x86_64-w64-mingw32\lib
    C:\strawberry\c\lib\gcc\x86_64-w64-mingw32\4.7.3'

    right?

    --
    kmx
  • Sisyphus1 at Nov 25, 2013 at 2:01 am

    -----Original Message-----
    From: kmx Sent: Monday, November 25, 2013 8:41 AM To:
    win32-vanilla@perl.org Subject: Re: FYI: quadmath.h's expq() crashes at
    runtime
    Hi Rob,
    On 5.10.2013 17:06, sisyphus1@optusnet.com.au wrote:
    Hi,

    It's no big deal, but current Strawberry Perl 32-bit and 64-bit
    compilers create executables that crash when expq() is called.

    Here's the minimalistic demo script:

    ####################
    #include <quadmath.h>

    int main (void) {
    __float128 r;

    r = expq(2.0Q);
    r = sqrtq(2.0Q);
    r = fabsq(2.0Q);
    r = sinq(2.0Q);
    r = logq(2.0Q);
    r = cosq(2.0Q);

    return 0;
    }

    ####################

    The resultant executable crashes when run, but remove the expq() call
    and there's no problem. (Link to -lquadmath when building the above
    program.)

    It's not just MinGW64's gcc-4.6.3 compilers that are affected. I find
    the same with their 64-bit gcc-4.7.0, and 4.8.1 compilers. (I haven't
    tested any other MinGW64 compilers.)

    I've also found that mingw.org's gcc-4.7.0 does *not* suffer this
    problem; nor does Ubuntu's gcc-4.6.3 ... so I guess I probably should
    report this to the mingw64 project.

    BTW, the perl relevance here is that, because of this bug,
    Math::Float128 crashes its test suite when expq() gets called. But I
    don't think that there's a high demand for this module, so I wouldn't be
    too concerned about that aspect.
    I am afraid I cannot do much about expq crash unless there is newer
    version of gcc and/or mingw-w64 runtime which does not suffer from this.
    Yes - I subsequently reported the problem to the mingw64 mailing list, where
    it was confirmed as a bug in their compilers.
    I don't know when/if it will be fixed. I didn't actually file a bug report
    anywhere - mainly because I don't know offhand where to file such a report,
    and no-one replied when I asked about that on the mailing list.

    In the meantime, I've changed the relevant XS code so that if
    __MINGW64_VERSION_MAJOR is defined, instead of doing expq(p), it does
    powq(e,p) - and that works fine.
    Also of slight relevance to Strawberry Perl is the fact that
    c/lib/gcc/[whatever]-w64-mingw32/4.6.3 is not in $Config{libpth}.
    As a consequence perl does not automatically find -lquadmath when the
    Math::Float128 Makefile.PL is run, and perl therefore removes the link.
    (The gcc linker can find -lquadmath without any help at all ... but it
    won't look for that library if perl has removed the link.)
    As for this part you mean using something like this:

    libpth='C:\strawberry\c\lib C:\strawberry\c\x86_64-w64-mingw32\lib
    C:\strawberry\c\lib\gcc\x86_64-w64-mingw32\4.7.3'

    right?
    Yes - and similarly, for the 32-bit compiler, we want
    C:\strawberry\c\lib\gcc\i686-w64-mingw32\4.7.3 added to libpth. (Not sure if
    you're upgrading the compiler to "4.7.3" or whether you meant "4.6.3" ...
    I'll find out soon enough ;-)

    Cheers,
    Rob

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupwin32-vanilla @
categoriesperl
postedOct 5, '13 at 3:07p
activeNov 25, '13 at 2:01a
posts3
users2
websitestrawberryperl.com

2 users in discussion

Sisyphus1: 2 posts Kmx: 1 post

People

Translate

site design / logo © 2019 Grokbase