Re: BUG #6760: make check fails on strings SQL T581 regex test - Mailing list pgsql-bugs
| From | Jez Wain |
|---|---|
| Subject | Re: BUG #6760: make check fails on strings SQL T581 regex test |
| Date | |
| Msg-id | 4E77610B-C50D-4AD9-854C-7C67CC297962@bull.net Whole thread Raw |
| In response to | Re: BUG #6760: make check fails on strings SQL T581 regex test (Tom Lane <tgl@sss.pgh.pa.us>) |
| List | pgsql-bugs |
This problem has been resolved; following a couple of suggestions from Tom =
Lane, it became apparent that the cause was due to the xlc compiler. This =
mail summarizes the steps and findings, in the hope that it might be useful=
to someone else.
My server environment is AIXv7.1 running on POWER7, with xlcV11.1.0.0. I u=
sed the following configure command:
LDFLAGS=3D"-L/usr/local/lib" LIBS=3D"-lmass" CC=3Dxlc_r CFLAGS=3D"-qtune=3D=
auto -qarch=3Dauto -qcache=3Dauto -O2 -I/u
sr/local/include" ./configure --with-openssl --disable-nls
After editing src/include/pg_config.h to comment out the HAVE_WCSTOMBS_L (w=
hich configure incorrectly detects on AIX) I ran make check. This produced=
the regex error described in the initial report.
I edited the src/Makefile.global to remove all optimization and ran "make c=
lean check", to find that I no longer had the regex error.
As this behaviour pointed to a compiler issue, I updated the compiler to x=
lcV12.1.0.0 and reran the "make clean check" and the result was no regex er=
ror even with the O2 optimization.
As you may have noticed, I stipulated the use of IBM high-performance maths=
library, lmass, in the configure command. Unfortunately, the configure sc=
ript places the -lm in front of -lmass in Makefile.global, which as most of=
the APIs in lmass are duplicates of those in lm, the lmass routines never =
get called. Swapping the order of lm and lmass, such that the LIBS line re=
ads:
LIBS =3D -lssl -lcrypto -lz -lreadline -lcurses -lld -lmass -lm
Has not only made the maths faster, but has also removed the float8 roundin=
g error, so the end of the make check now prints:
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D shutting down postmaster =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
All 126 tests passed.=20
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
Jez Wain
On 25 Jul 2012, at 19:10, Tom Lane wrote:
> jez.wain@bull.net writes:
>> ***************
>> *** 347,354 ****
>> three | f1 | exp_ln_f1=20=20=20=20=20=20=20
>> -------+----------------------+-----------------------
>> | 1004.3 | 1004.3
>> ! | 1.2345678901234e+200 | 1.23456789012338e+200
>> ! | 1.2345678901234e-200 | 1.23456789012339e-200
>> (3 rows)
>=20
>> -- cube root
>> --- 347,354 ----
>> three | f1 | exp_ln_f1=20=20=20=20=20=20=20
>> -------+----------------------+-----------------------
>> | 1004.3 | 1004.3
>> ! | 1.2345678901234e+200 | 1.23456789012337e+200
>> ! | 1.2345678901234e-200 | 1.2345678901234e-200
>> (3 rows)
>=20
> This doesn't seem terribly surprising as a platform-specific difference.
>=20
>> -- T581 regular expression substring (with SQL99's bizarre regexp synta=
x)
>> SELECT SUBSTRING('abcdefg' FROM 'a#"(b_d)#"%' FOR '#') AS "bcd";
>> ! ERROR: invalid regular expression: parentheses () not balanced
>> ! CONTEXT: SQL function "substring" statement 1
>=20
> This however isn't too good. It suggests a platform-specific issue in
> the regex library, but hard to say what. Can you dig a little deeper,
> maybe get a stack trace back from the call to errfinish()? Does
> compiling with -O0 change the behavior?
>=20
> regards, tom lane
pgsql-bugs by date: