Thread: UW 713UP3 patch

UW 713UP3 patch

From
Larry Rosenman
Date:
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

Re: UW 713UP3 patch

From
Peter Eisentraut
Date:
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


Re: UW 713UP3 patch

From
Larry Rosenman
Date:

--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

Re: UW 713UP3 patch

From
Peter Eisentraut
Date:
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


Re: UW 713UP3 patch

From
Larry Rosenman
Date:

--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

Re: UW 713UP3 patch

From
Larry Rosenman
Date:

--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

Re: UW 713UP3 patch

From
Tom Lane
Date:
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

Re: UW 713UP3 patch

From
Larry Rosenman
Date:

--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

Re: UW 713UP3 patch

From
Larry Rosenman
Date:

--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

Re: UW 713UP3 patch

From
Peter Eisentraut
Date:
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


Re: UW 713UP3 patch

From
Larry Rosenman
Date:

--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

Re: UW 713UP3 patch

From
Larry Rosenman
Date:

--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

Re: UW 713UP3 patch

From
Peter Eisentraut
Date:
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


Re: UW 713UP3 patch

From
Bruce Momjian
Date:
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

Re: UW 713UP3 patch

From
Larry Rosenman
Date:

--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

Attachment