Обсуждение: 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
Вложения
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
Вложения
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
Вложения
--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
Вложения
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
Вложения
--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
Вложения
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
Вложения
--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
Вложения
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