Re: [HACKERS] snprintf causes regression tests to fail - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: [HACKERS] snprintf causes regression tests to fail
Date
Msg-id 200502282035.j1SKZIn21122@candle.pha.pa.us
Whole thread Raw
Responses Re: [HACKERS] snprintf causes regression tests to fail
List pgsql-patches
Tom Lane wrote:
> pgsql@mohawksoft.com writes:
> > Do we have any idea about what format string causes the regression failure?
>
> I'll bet the problem is that configure.in is doing things in the wrong
> order: it computes INT64_FORMAT against the system printf before
> deciding we should use our own printf.

Ah, the problem was introduced here:

    revision 1.401
    date: 2005/02/24 02:12:15;  author: tgl;  state: Exp;  lines: +13 -12
    We aren't supposed to try to run test programs until after we've
    verified that AC_TRY_RUN works.

The problem is that the PGAC_FUNC_PRINTF_ARG_CONTROL call was moved
below the printf 64-bit tests.  This commited patch moves
PGAC_FUNC_PRINTF_ARG_CONTROL which is after we know AC_TRY_RUN works and
just before printf 64-bit args are tested.

--
  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
Index: configure
===================================================================
RCS file: /cvsroot/pgsql/configure,v
retrieving revision 1.428
diff -c -c -r1.428 configure
*** configure    24 Feb 2005 02:12:14 -0000    1.428
--- configure    28 Feb 2005 20:33:41 -0000
***************
*** 14809,14814 ****
--- 14809,14876 ----
  # snprintfs that use %lld, %qd, or %I64d as the format.  If none of these
  # work, fall back to our own snprintf emulation (which we know uses %lld).

+ # Also force use of our snprintf if system's doesn't do arg control
+ if test $pgac_need_repl_snprintf = no; then
+   echo "$as_me:$LINENO: checking whether printf supports argument control" >&5
+ echo $ECHO_N "checking whether printf supports argument control... $ECHO_C" >&6
+ if test "${pgac_cv_printf_arg_control+set}" = set; then
+   echo $ECHO_N "(cached) $ECHO_C" >&6
+ else
+   if test "$cross_compiling" = yes; then
+   pgac_cv_printf_arg_control=cross
+ else
+   cat >conftest.$ac_ext <<_ACEOF
+ #line $LINENO "configure"
+ #include "confdefs.h"
+ #include <stdio.h>
+ #include <string.h>
+
+ int main()
+ {
+   char buf[100];
+
+   /* can it swap arguments? */
+   snprintf(buf, 100, "%2\$d %1\$d", 3, 4);
+   if (strcmp(buf, "4 3") != 0)
+     return 1;
+   return 0;
+ }
+ _ACEOF
+ rm -f conftest$ac_exeext
+ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+   (eval $ac_link) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+   (eval $ac_try) 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }; }; then
+   pgac_cv_printf_arg_control=yes
+ else
+   echo "$as_me: program exited with status $ac_status" >&5
+ echo "$as_me: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ ( exit $ac_status )
+ pgac_cv_printf_arg_control=no
+ fi
+ rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+ fi
+
+ fi
+ echo "$as_me:$LINENO: result: $pgac_cv_printf_arg_control" >&5
+ echo "${ECHO_T}$pgac_cv_printf_arg_control" >&6
+
+   if test $pgac_cv_printf_arg_control != yes ; then
+     pgac_need_repl_snprintf=yes
+   fi
+ fi
+
+ if test $pgac_need_repl_snprintf = yes; then
+   LIBOBJS="$LIBOBJS snprintf.$ac_objext"
+ fi
+
  if test "$HAVE_LONG_LONG_INT_64" = yes ; then
    if test $pgac_need_repl_snprintf = no; then
      echo "$as_me:$LINENO: checking snprintf format for long long int" >&5
***************
*** 14911,14978 ****
  _ACEOF


- # Also force use of our snprintf if system's doesn't do arg control
- if test $pgac_need_repl_snprintf = no; then
-   echo "$as_me:$LINENO: checking whether printf supports argument control" >&5
- echo $ECHO_N "checking whether printf supports argument control... $ECHO_C" >&6
- if test "${pgac_cv_printf_arg_control+set}" = set; then
-   echo $ECHO_N "(cached) $ECHO_C" >&6
- else
-   if test "$cross_compiling" = yes; then
-   pgac_cv_printf_arg_control=cross
- else
-   cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
- #include "confdefs.h"
- #include <stdio.h>
- #include <string.h>
-
- int main()
- {
-   char buf[100];
-
-   /* can it swap arguments? */
-   snprintf(buf, 100, "%2\$d %1\$d", 3, 4);
-   if (strcmp(buf, "4 3") != 0)
-     return 1;
-   return 0;
- }
- _ACEOF
- rm -f conftest$ac_exeext
- if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-   (eval $ac_link) 2>&5
-   ac_status=$?
-   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-   (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-   { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-   (eval $ac_try) 2>&5
-   ac_status=$?
-   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-   (exit $ac_status); }; }; then
-   pgac_cv_printf_arg_control=yes
- else
-   echo "$as_me: program exited with status $ac_status" >&5
- echo "$as_me: failed program was:" >&5
- cat conftest.$ac_ext >&5
- ( exit $ac_status )
- pgac_cv_printf_arg_control=no
- fi
- rm -f core core.* *.core conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
- fi
-
- fi
- echo "$as_me:$LINENO: result: $pgac_cv_printf_arg_control" >&5
- echo "${ECHO_T}$pgac_cv_printf_arg_control" >&6
-
-   if test $pgac_cv_printf_arg_control != yes ; then
-     pgac_need_repl_snprintf=yes
-   fi
- fi
-
- if test $pgac_need_repl_snprintf = yes; then
-   LIBOBJS="$LIBOBJS snprintf.$ac_objext"
- fi
-
  # Need a #define for the size of Datum (unsigned long)
  echo "$as_me:$LINENO: checking for unsigned long" >&5
  echo $ECHO_N "checking for unsigned long... $ECHO_C" >&6
--- 14973,14978 ----
Index: configure.in
===================================================================
RCS file: /cvsroot/pgsql/configure.in,v
retrieving revision 1.401
diff -c -c -r1.401 configure.in
*** configure.in    24 Feb 2005 02:12:15 -0000    1.401
--- configure.in    28 Feb 2005 20:33:44 -0000
***************
*** 1104,1109 ****
--- 1104,1121 ----
  # snprintfs that use %lld, %qd, or %I64d as the format.  If none of these
  # work, fall back to our own snprintf emulation (which we know uses %lld).

+ # Also force use of our snprintf if system's doesn't do arg control
+ if test $pgac_need_repl_snprintf = no; then
+   PGAC_FUNC_PRINTF_ARG_CONTROL
+   if test $pgac_cv_printf_arg_control != yes ; then
+     pgac_need_repl_snprintf=yes
+   fi
+ fi
+
+ if test $pgac_need_repl_snprintf = yes; then
+   AC_LIBOBJ(snprintf)
+ fi
+
  if test "$HAVE_LONG_LONG_INT_64" = yes ; then
    if test $pgac_need_repl_snprintf = no; then
      PGAC_FUNC_SNPRINTF_LONG_LONG_INT_FORMAT
***************
*** 1131,1148 ****
  AC_DEFINE_UNQUOTED(UINT64_FORMAT, $UINT64_FORMAT,
                     [Define to the appropriate snprintf format for unsigned 64-bit ints, if any.])

- # Also force use of our snprintf if system's doesn't do arg control
- if test $pgac_need_repl_snprintf = no; then
-   PGAC_FUNC_PRINTF_ARG_CONTROL
-   if test $pgac_cv_printf_arg_control != yes ; then
-     pgac_need_repl_snprintf=yes
-   fi
- fi
-
- if test $pgac_need_repl_snprintf = yes; then
-   AC_LIBOBJ(snprintf)
- fi
-
  # Need a #define for the size of Datum (unsigned long)
  AC_CHECK_SIZEOF([unsigned long])

--- 1143,1148 ----

pgsql-patches by date:

Previous
From: Tom Lane
Date:
Subject: Re: int4 <-> bool casts
Next
From: Tom Lane
Date:
Subject: Re: [HACKERS] snprintf causes regression tests to fail