Fix format_pieces selftest on Windows
authorTom Tromey <tromey@adacore.com>
Wed, 29 Sep 2021 18:51:15 +0000 (12:51 -0600)
committerTom Tromey <tromey@adacore.com>
Tue, 19 Oct 2021 19:14:48 +0000 (13:14 -0600)
The format_pieces selftest currently fails on Windows hosts.

The selftest doesn't handle the "%ll" -> "%I64" rewrite that the
formatter may perform, but also gdbsupport was missing a configure
check for PRINTF_HAS_LONG_LONG.  This patch fixes both issues.

gdb/configure
gdb/configure.ac
gdb/unittests/format_pieces-selftests.c
gdbsupport/common.m4
gdbsupport/config.in
gdbsupport/configure

index 1876cbfefa43090eca2c9cfce9899fe4ce7a9a6b..d5c1883c25be0a9826fbfab2402dfed2d9501742 100755 (executable)
     fi
   fi
 
+  # Check if the compiler and runtime support printing long longs.
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long support in printf" >&5
+$as_echo_n "checking for long long support in printf... " >&6; }
+if ${gdb_cv_printf_has_long_long+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  gdb_cv_printf_has_long_long=no
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+char buf[32];
+    long long l = 0;
+    l = (l << 16) + 0x0123;
+    l = (l << 16) + 0x4567;
+    l = (l << 16) + 0x89ab;
+    l = (l << 16) + 0xcdef;
+    sprintf (buf, "0x%016llx", l);
+    return (strcmp ("0x0123456789abcdef", buf));
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gdb_cv_printf_has_long_long=yes
+else
+  gdb_cv_printf_has_long_long=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_printf_has_long_long" >&5
+$as_echo "$gdb_cv_printf_has_long_long" >&6; }
+  if test "$gdb_cv_printf_has_long_long" = yes; then
+
+$as_echo "#define PRINTF_HAS_LONG_LONG 1" >>confdefs.h
+
+  fi
+
 
 $as_echo "#define _STRUCTURED_PROC 1" >>confdefs.h
 
@@ -16176,52 +16222,6 @@ if test "$gdb_cv_c_long_long" != yes; then
   as_fn_error $? "Compiler must support long long for GDB." "$LINENO" 5
 fi
 
-# Check if the compiler and runtime support printing long longs.
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long support in printf" >&5
-$as_echo_n "checking for long long support in printf... " >&6; }
-if ${gdb_cv_printf_has_long_long+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  gdb_cv_printf_has_long_long=no
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$ac_includes_default
-int
-main ()
-{
-char buf[32];
-  long long l = 0;
-  l = (l << 16) + 0x0123;
-  l = (l << 16) + 0x4567;
-  l = (l << 16) + 0x89ab;
-  l = (l << 16) + 0xcdef;
-  sprintf (buf, "0x%016llx", l);
-  return (strcmp ("0x0123456789abcdef", buf));
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  gdb_cv_printf_has_long_long=yes
-else
-  gdb_cv_printf_has_long_long=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_printf_has_long_long" >&5
-$as_echo "$gdb_cv_printf_has_long_long" >&6; }
-if test "$gdb_cv_printf_has_long_long" = yes; then
-
-$as_echo "#define PRINTF_HAS_LONG_LONG 1" >>confdefs.h
-
-fi
-
 # Check if the compiler and runtime support printing decfloats.
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for decfloat support in printf" >&5
index 0d91be59cd6159fba8c1e961bac231c48055c583..d4cfb6a7624176eb017039c9787c06f5210eae7c 100644 (file)
@@ -1513,27 +1513,6 @@ if test "$gdb_cv_c_long_long" != yes; then
   AC_MSG_ERROR([Compiler must support long long for GDB.])
 fi
 
-# Check if the compiler and runtime support printing long longs.
-
-AC_CACHE_CHECK([for long long support in printf],
-               gdb_cv_printf_has_long_long,
-               [AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
-[[char buf[32];
-  long long l = 0;
-  l = (l << 16) + 0x0123;
-  l = (l << 16) + 0x4567;
-  l = (l << 16) + 0x89ab;
-  l = (l << 16) + 0xcdef;
-  sprintf (buf, "0x%016llx", l);
-  return (strcmp ("0x0123456789abcdef", buf));]])],
-                              gdb_cv_printf_has_long_long=yes,
-                              gdb_cv_printf_has_long_long=no,
-                              gdb_cv_printf_has_long_long=no)])
-if test "$gdb_cv_printf_has_long_long" = yes; then
-  AC_DEFINE(PRINTF_HAS_LONG_LONG, 1,
-            [Define to 1 if the "%ll" format works to print long longs.])
-fi
-
 # Check if the compiler and runtime support printing decfloats.
 
 AC_CACHE_CHECK([for decfloat support in printf],
index f8df687c02894434eafeeed42a1afd6e32a7c234..6a15b5e29ef9c43a8020c4259c2fcc2cd0c95d8a 100644 (file)
 #include "gdbsupport/format.h"
 #include "gdbsupport/selftest.h"
 
+#if USE_PRINTF_I64
+#define LL "I64"
+#else
+#define LL "ll"
+#endif
+
 namespace selftests {
 namespace format_pieces {
 
@@ -55,7 +61,7 @@ test_format_specifier ()
     {
       format_piece ("Hello\t ", literal_piece, 0),
       format_piece ("%d", int_arg, 0),
-      format_piece ("%llx", long_long_arg, 0), /* ARI: %ll */
+      format_piece ("%" LL "x", long_long_arg, 0),
       format_piece ("%%d", literal_piece, 0),
       format_piece ("%d", int_arg, 0),
     });
@@ -87,7 +93,7 @@ test_format_int_sizes ()
       format_piece ("Hello\t ", literal_piece, 0),
       format_piece ("%hu", int_arg, 0),
       format_piece ("%lu", long_arg, 0),
-      format_piece ("%llu", long_long_arg, 0), /* ARI: %ll */
+      format_piece ("%" LL "u", long_long_arg, 0),
       format_piece ("%zu", size_t_arg, 0)
     });
 
@@ -96,7 +102,7 @@ test_format_int_sizes ()
       format_piece ("Hello\t ", literal_piece, 0),
       format_piece ("%hx", int_arg, 0),
       format_piece ("%lx", long_arg, 0),
-      format_piece ("%llx", long_long_arg, 0), /* ARI: %ll */
+      format_piece ("%" LL "x", long_long_arg, 0),
       format_piece ("%zx", size_t_arg, 0)
     });
 
@@ -105,7 +111,7 @@ test_format_int_sizes ()
       format_piece ("Hello\t ", literal_piece, 0),
       format_piece ("%ho", int_arg, 0),
       format_piece ("%lo", long_arg, 0),
-      format_piece ("%llo", long_long_arg, 0), /* ARI: %ll */
+      format_piece ("%" LL "o", long_long_arg, 0),
       format_piece ("%zo", size_t_arg, 0)
     });
 
@@ -114,7 +120,7 @@ test_format_int_sizes ()
       format_piece ("Hello\t ", literal_piece, 0),
       format_piece ("%hd", int_arg, 0),
       format_piece ("%ld", long_arg, 0),
-      format_piece ("%lld", long_long_arg, 0), /* ARI: %ll */
+      format_piece ("%" LL "d", long_long_arg, 0),
       format_piece ("%zd", size_t_arg, 0)
     });
 }
index 901c454ea8cbbb9c3ecf7aa8ff2978d70738cbc3..07c7b2a9bec3635407d43b8c446afd6adf2a57bd 100644 (file)
@@ -163,6 +163,27 @@ AC_DEFUN([GDB_AC_COMMON], [
     fi
   fi
 
+  # Check if the compiler and runtime support printing long longs.
+
+  AC_CACHE_CHECK([for long long support in printf],
+                gdb_cv_printf_has_long_long,
+                [AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT],
+  [[char buf[32];
+    long long l = 0;
+    l = (l << 16) + 0x0123;
+    l = (l << 16) + 0x4567;
+    l = (l << 16) + 0x89ab;
+    l = (l << 16) + 0xcdef;
+    sprintf (buf, "0x%016llx", l);
+    return (strcmp ("0x0123456789abcdef", buf));]])],
+                               gdb_cv_printf_has_long_long=yes,
+                               gdb_cv_printf_has_long_long=no,
+                               gdb_cv_printf_has_long_long=no)])
+  if test "$gdb_cv_printf_has_long_long" = yes; then
+    AC_DEFINE(PRINTF_HAS_LONG_LONG, 1,
+             [Define to 1 if the "%ll" format works to print long longs.])
+  fi
+
   BFD_SYS_PROCFS_H
   if test "$ac_cv_header_sys_procfs_h" = yes; then
     BFD_HAVE_SYS_PROCFS_TYPE(gregset_t)
index e4e6fc062cce7b1dfd54e69713d9c1060536b285..f6b0159bd6269c06787caec24e2942cf22e1d5fb 100644 (file)
 /* Define to the version of this package. */
 #undef PACKAGE_VERSION
 
+/* Define to 1 if the "%ll" format works to print long longs. */
+#undef PRINTF_HAS_LONG_LONG
+
 /* Define to necessary symbol if this constant uses a non-standard name on
    your system. */
 #undef PTHREAD_CREATE_JOINABLE
index f13ae76641f99e3c6a88366830b7adb4463c4976..d22f225ef7e4361a1f6e0a260fba558a517be02f 100755 (executable)
@@ -9571,6 +9571,52 @@ fi
     fi
   fi
 
+  # Check if the compiler and runtime support printing long longs.
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long support in printf" >&5
+$as_echo_n "checking for long long support in printf... " >&6; }
+if ${gdb_cv_printf_has_long_long+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  gdb_cv_printf_has_long_long=no
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+char buf[32];
+    long long l = 0;
+    l = (l << 16) + 0x0123;
+    l = (l << 16) + 0x4567;
+    l = (l << 16) + 0x89ab;
+    l = (l << 16) + 0xcdef;
+    sprintf (buf, "0x%016llx", l);
+    return (strcmp ("0x0123456789abcdef", buf));
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gdb_cv_printf_has_long_long=yes
+else
+  gdb_cv_printf_has_long_long=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gdb_cv_printf_has_long_long" >&5
+$as_echo "$gdb_cv_printf_has_long_long" >&6; }
+  if test "$gdb_cv_printf_has_long_long" = yes; then
+
+$as_echo "#define PRINTF_HAS_LONG_LONG 1" >>confdefs.h
+
+  fi
+
 
 $as_echo "#define _STRUCTURED_PROC 1" >>confdefs.h