Thread: UW 713UP3 patch
Since peter objects to my methods, what is an ACCEPTABLE way to detect the 7.1.3UP3 compiler? I'd like to get this fixed for RC1. LER -- Larry Rosenman http://www.lerctr.org/~ler Phone: +1 972-414-9812 E-Mail: ler@lerctr.org US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749
Attachment
Larry Rosenman writes: > Since peter objects to my methods, what is an ACCEPTABLE way to detect > the 7.1.3UP3 compiler? One POSSIBLE way to do this properly is to write a test that 1) Uses $CC, $CFLAGS, and related variables rather than hardcoding 'cc -O'. 2) Names any test files conftest.*, so configure cleans up automatically. 3) Doesn't execute any compiled programs. See the __FAST_MATH__ test for an example. However, I still think that we should not bother testing for this. Considering that the condition first occurred a couple of months ago and is already fixed, this isn't a big issue. Think about what would happen if we had to develop and maintain fixes for every buggy GCC compiler every released. -- Peter Eisentraut peter_e@gmx.net
--On Sunday, November 02, 2003 22:26:40 +0100 Peter Eisentraut <peter_e@gmx.net> wrote: > Larry Rosenman writes: > >> Since peter objects to my methods, what is an ACCEPTABLE way to detect >> the 7.1.3UP3 compiler? > > One POSSIBLE way to do this properly is to write a test that > > 1) Uses $CC, $CFLAGS, and related variables rather than hardcoding 'cc > -O'. > > 2) Names any test files conftest.*, so configure cleans up automatically. > > 3) Doesn't execute any compiled programs. See the __FAST_MATH__ test for > an example. > > However, I still think that we should not bother testing for this. > Considering that the condition first occurred a couple of months ago and > is already fixed, this isn't a big issue. Think about what would happen > if we had to develop and maintain fixes for every buggy GCC compiler every > released. The problem is MOST people will **NOT** be able to get the fixed compiler as it's on the Upgrade Pack path (PAY FOR), and **NOT** the Maintenance Pack path (Free). I'll try and write the patch as you suggest. > -- > Peter Eisentraut peter_e@gmx.net -- Larry Rosenman http://www.lerctr.org/~ler Phone: +1 972-414-9812 E-Mail: ler@lerctr.org US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749
Attachment
Larry Rosenman writes: > The problem is MOST people will **NOT** be able to get the fixed compiler > as it's on the Upgrade Pack path (PAY FOR), and **NOT** the Maintenance > Pack path (Free). Why did they upgrade to the broken compiler in the first place, and why doesn't SCO provide free fixes for broken products? -- Peter Eisentraut peter_e@gmx.net
--On Sunday, November 02, 2003 23:05:21 +0100 Peter Eisentraut <peter_e@gmx.net> wrote: > Larry Rosenman writes: > >> The problem is MOST people will **NOT** be able to get the fixed compiler >> as it's on the Upgrade Pack path (PAY FOR), and **NOT** the Maintenance >> Pack path (Free). > > Why did they upgrade to the broken compiler in the first place, and why > doesn't SCO provide free fixes for broken products? The "Broken Compiler" is in EVERY version prior to the UP3 compiler. We just started tripping it with the changes in 7.4. I don't know why they didn't/haven't put this fix in the MP path, and I can't change that decision, therefore, we need to work around it. It's not that big of a deal. See the patch I posted that SHOULD meet your requirements. > > -- > Peter Eisentraut peter_e@gmx.net -- Larry Rosenman http://www.lerctr.org/~ler Phone: +1 972-414-9812 E-Mail: ler@lerctr.org US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749
Attachment
--On Sunday, November 02, 2003 15:29:37 -0600 Larry Rosenman <ler@lerctr.org> wrote: > I'll try and write the patch as you suggest. Here's a patch as you suggested: Index: src/template/unixware =================================================================== RCS file: /projects/cvsroot/pgsql-server/src/template/unixware,v retrieving revision 1.27 diff -u -r1.27 unixware --- src/template/unixware 25 Oct 2003 15:32:11 -0000 1.27 +++ src/template/unixware 2 Nov 2003 21:53:33 -0000 @@ -1,13 +1,27 @@ if test "$GCC" = yes; then THREAD_CPPFLAGS="-pthread" else -# the -Kno_host is temporary for a bug in the compiler. See -hackers +# the -Kno_host is for a bug in the compiler. See -hackers # discussion on 7-8/Aug/2003. -# when the 7.1.3UP3 or later compiler is out, we can do a version check. - CFLAGS="-O -Kinline,no_host" +# version check for the 7.1.3UP3 compiler (version 401200310): +cat >conftest.c <<__EOF__ +int main(int argc, char **argv) +#if __SCO_VERSION__ >= 401200310 +#error good compiler +#else +#error bad compiler +#endif +__EOF__ + $CC conftest.c 2>conftest.err 1>&2 + grep -q good conftest.err + if test $? = 0; then + CFLAGS="-O -Kinline" + else + CFLAGS="-O -Kinline,no_host" + fi + rm conftest.* THREAD_CPPFLAGS="-K pthread" fi - THREAD_SUPPORT=yes NEED_REENTRANT_FUNCS=no # verified 7.1.3 2003-09-03 THREAD_CPPFLAGS="$THREAD_CPPFLAGS -D_REENTRANT" -- Larry Rosenman http://www.lerctr.org/~ler Phone: +1 972-414-9812 E-Mail: ler@lerctr.org US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749
Attachment
Larry Rosenman <ler@lerctr.org> writes: > +# version check for the 7.1.3UP3 compiler (version 401200310): > +cat >conftest.c <<__EOF__ > +int main(int argc, char **argv) > +#if __SCO_VERSION__ >=3D 401200310 > +#error good compiler > +#else > +#error bad compiler > +#endif > +__EOF__ > + $CC conftest.c 2>conftest.err 1>&2 > + grep -q good conftest.err > + if test $? =3D 0; then > + CFLAGS=3D"-O -Kinline" > + else > + CFLAGS=3D"-O -Kinline,no_host" > + fi Couldn't this be simplified to +cat >conftest.c <<__EOF__ +int main(int argc, char **argv) +{ +#if __SCO_VERSION__ < 401200310 +#error bad compiler +#endif +} +__EOF__ + $CC conftest.c >/dev/null 2>&1 + if test $? = 0; then + CFLAGS="-O -Kinline" + else + CFLAGS="-O -Kinline,no_host" + fi regards, tom lane
--On Sunday, November 02, 2003 18:17:26 -0500 Tom Lane <tgl@sss.pgh.pa.us> wrote: > Larry Rosenman <ler@lerctr.org> writes: >> +# version check for the 7.1.3UP3 compiler (version 401200310): >> +cat >conftest.c <<__EOF__ >> +int main(int argc, char **argv) >> +#if __SCO_VERSION__ >=3D 401200310 >> +#error good compiler >> +#else >> +#error bad compiler >> +#endif >> +__EOF__ >> + $CC conftest.c 2>conftest.err 1>&2 >> + grep -q good conftest.err >> + if test $? =3D 0; then >> + CFLAGS=3D"-O -Kinline" >> + else >> + CFLAGS=3D"-O -Kinline,no_host" >> + fi > > Couldn't this be simplified to > > +cat >conftest.c <<__EOF__ > +int main(int argc, char **argv) > +{ > +#if __SCO_VERSION__ < 401200310 > +#error bad compiler > +#endif > +} > +__EOF__ > + $CC conftest.c >/dev/null 2>&1 > + if test $? = 0; then > + CFLAGS="-O -Kinline" > + else > + CFLAGS="-O -Kinline,no_host" > + fi > > regards, tom lane How about this? ( I needed to make it valid C): Index: src/template/unixware =================================================================== RCS file: /projects/cvsroot/pgsql-server/src/template/unixware,v retrieving revision 1.27 diff -u -r1.27 unixware --- src/template/unixware 25 Oct 2003 15:32:11 -0000 1.27 +++ src/template/unixware 2 Nov 2003 23:22:21 -0000 @@ -1,13 +1,27 @@ if test "$GCC" = yes; then THREAD_CPPFLAGS="-pthread" else -# the -Kno_host is temporary for a bug in the compiler. See -hackers +# the -Kno_host is for a bug in the compiler. See -hackers # discussion on 7-8/Aug/2003. -# when the 7.1.3UP3 or later compiler is out, we can do a version check. - CFLAGS="-O -Kinline,no_host" +# version check for the 7.1.3UP3 compiler (version 401200310): +cat >conftest.c <<__EOF__ +#if __SCO_VERSION__ < 401200310 +#error bad compiler +#endif +int main(int argc,char **argv) +{ +} + +__EOF__ + $CC conftest.c >/dev/null 2>&1 + if test $? = 0; then + CFLAGS="-O -Kinline" + else + CFLAGS="-O -Kinline,no_host" + fi + rm conftest.* THREAD_CPPFLAGS="-K pthread" fi - THREAD_SUPPORT=yes NEED_REENTRANT_FUNCS=no # verified 7.1.3 2003-09-03 THREAD_CPPFLAGS="$THREAD_CPPFLAGS -D_REENTRANT" -- Larry Rosenman http://www.lerctr.org/~ler Phone: +1 972-414-9812 E-Mail: ler@lerctr.org US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749
Attachment
--On Sunday, November 02, 2003 17:23:59 -0600 Larry Rosenman <ler@lerctr.org> wrote: > > > --On Sunday, November 02, 2003 18:17:26 -0500 Tom Lane > <tgl@sss.pgh.pa.us> wrote: > >> Larry Rosenman <ler@lerctr.org> writes: >>> +# version check for the 7.1.3UP3 compiler (version 401200310): >>> +cat >conftest.c <<__EOF__ >>> +int main(int argc, char **argv) >>> +#if __SCO_VERSION__ >=3D 401200310 >>> +#error good compiler >>> +#else >>> +#error bad compiler >>> +#endif >>> +__EOF__ >>> + $CC conftest.c 2>conftest.err 1>&2 >>> + grep -q good conftest.err >>> + if test $? =3D 0; then >>> + CFLAGS=3D"-O -Kinline" >>> + else >>> + CFLAGS=3D"-O -Kinline,no_host" >>> + fi >> >> Couldn't this be simplified to >> >> +cat >conftest.c <<__EOF__ >> +int main(int argc, char **argv) >> +{ >> +#if __SCO_VERSION__ < 401200310 >> +#error bad compiler >> +#endif >> +} >> +__EOF__ >> + $CC conftest.c >/dev/null 2>&1 >> + if test $? = 0; then >> + CFLAGS="-O -Kinline" >> + else >> + CFLAGS="-O -Kinline,no_host" >> + fi >> >> regards, tom lane > How about this? ( I needed to make it valid C): OOOPPPSS. Yes, Tom, yours will work just fine. I missed the fact that you put the #if inside the braces. -- Larry Rosenman http://www.lerctr.org/~ler Phone: +1 972-414-9812 E-Mail: ler@lerctr.org US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749
Attachment
Larry Rosenman writes: > > I'll try and write the patch as you suggest. > Here's a patch as you suggested: Isn't there a way to write a test that actually triggers the bug we're trying to work around? -- Peter Eisentraut peter_e@gmx.net
--On Monday, November 03, 2003 23:24:19 +0100 Peter Eisentraut <peter_e@gmx.net> wrote: > Larry Rosenman writes: > >> > I'll try and write the patch as you suggest. >> Here's a patch as you suggested: > > Isn't there a way to write a test that actually triggers the bug we're > trying to work around? Not that I'm aware of (it was the following entry from SCO's fix list: 141. A bug was repaired in which an inlined function call, having been passed a null pointer, would trigger an internal C compiler error when this parameter was the target of a strcpy() or strncpy() call. fz528141 If you want to write a test, fine, but I think I've done my part which is report the bug to SCO, get a fix released, and then change our stuff to detect it. See the discussion referenced in the template file (7-8/AUG/2003 on -Hackers). > > -- > Peter Eisentraut peter_e@gmx.net -- Larry Rosenman http://www.lerctr.org/~ler Phone: +1 972-414-9812 E-Mail: ler@lerctr.org US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749
Attachment
--On Monday, November 03, 2003 23:24:19 +0100 Peter Eisentraut <peter_e@gmx.net> wrote: > Larry Rosenman writes: > >> > I'll try and write the patch as you suggest. >> Here's a patch as you suggested: > > Isn't there a way to write a test that actually triggers the bug we're > trying to work around? Here is what the SCO Folks said when I reported this back in August: You can reduce the example down to extern char *strcpy(char *, const char *); static void f(char *p, int n){ strcpy(p+n,""); } void g(void){ f(0, 0); } compile with cc -O -Kinline that will trip it. I still think that using the __SCO_VERSION__ preprocessor symbol is the better idea. > > -- > Peter Eisentraut peter_e@gmx.net -- Larry Rosenman http://www.lerctr.org/~ler Phone: +1 972-414-9812 E-Mail: ler@lerctr.org US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749
Attachment
Larry Rosenman writes: > You can reduce the example down to > > extern char *strcpy(char *, const char *); > > static void f(char *p, int n){ > strcpy(p+n,""); > } > void g(void){ > f(0, 0); > } > > compile with cc -O -Kinline I've installed a test based on this and checked off UnixWare on the supported platforms list. -- Peter Eisentraut peter_e@gmx.net
Peter Eisentraut wrote: > Larry Rosenman writes: > > > You can reduce the example down to > > > > extern char *strcpy(char *, const char *); > > > > static void f(char *p, int n){ > > strcpy(p+n,""); > > } > > void g(void){ > > f(0, 0); > > } > > > > compile with cc -O -Kinline > > I've installed a test based on this and checked off UnixWare on the > supported platforms list. Another idea would have been to just grep the include file for the version define. :-) -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073
--On Wednesday, November 05, 2003 04:23:35 -0500 Bruce Momjian <pgman@candle.pha.pa.us> wrote: > Peter Eisentraut wrote: >> Larry Rosenman writes: >> >> > You can reduce the example down to >> > >> > extern char *strcpy(char *, const char *); >> > >> > static void f(char *p, int n){ >> > strcpy(p+n,""); >> > } >> > void g(void){ >> > f(0, 0); >> > } >> > >> > compile with cc -O -Kinline >> >> I've installed a test based on this and checked off UnixWare on the >> supported platforms list. > > Another idea would have been to just grep the include file for the > version define. :-) > It's not in an include, it's done automagiclly by the compiler. LER > -- > Bruce Momjian | http://candle.pha.pa.us > pgman@candle.pha.pa.us | (610) 359-1001 > + If your life is a hard drive, | 13 Roberts Road > + Christ can be your backup. | Newtown Square, Pennsylvania > 19073 -- Larry Rosenman http://www.lerctr.org/~ler Phone: +1 972-414-9812 E-Mail: ler@lerctr.org US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749