PR24392, Clang warning Wtautological-constant-out-of-range-compare
authorAlan Modra <amodra@gmail.com>
Thu, 28 Mar 2019 06:23:32 +0000 (16:53 +1030)
committerAlan Modra <amodra@gmail.com>
Thu, 28 Mar 2019 06:40:31 +0000 (17:10 +1030)
PR 24392
* configure.ac: Invoke AC_CHECK_SIZEOF(int).
* configure: Regenerate.
* coffgen.c (coff_get_reloc_upper_bound): Replace gcc diagnostic
workaround with SIZEOF_LONG vs. SIZEOF_INT check.
* elf.c (_bfd_elf_get_reloc_upper_bound): Likewise.
* elf64-sparc.c (elf64_sparc_get_reloc_upper_bound): Likewise.
* mach-o.c (bfd_mach_o_get_reloc_upper_bound): Likewise.

bfd/ChangeLog
bfd/coffgen.c
bfd/configure
bfd/configure.ac
bfd/elf.c
bfd/elf64-sparc.c
bfd/mach-o.c

index 1225e3cad8fef2ddd7d9e5bf4adf6cb37c59bf9c..4dd3f27a31d935273613325360bc9a787414954c 100644 (file)
@@ -1,3 +1,14 @@
+2019-03-28  Alan Modra  <amodra@gmail.com>
+
+       PR 24392
+       * configure.ac: Invoke AC_CHECK_SIZEOF(int).
+       * configure: Regenerate.
+       * coffgen.c (coff_get_reloc_upper_bound): Replace gcc diagnostic
+       workaround with SIZEOF_LONG vs. SIZEOF_INT check.
+       * elf.c (_bfd_elf_get_reloc_upper_bound): Likewise.
+       * elf64-sparc.c (elf64_sparc_get_reloc_upper_bound): Likewise.
+       * mach-o.c (bfd_mach_o_get_reloc_upper_bound): Likewise.
+
 2019-03-21  Jim Wilson  <jimw@sifive.com>
 
        PR 24365
index ccf4b4302c5dd81f0e732e718dc3ce0b1d18fac9..139ff9749a6186dbdf28b3b79042680f125e2894 100644 (file)
@@ -2007,10 +2007,6 @@ coff_get_normalized_symtab (bfd *abfd)
   return internal;
 }
 
-#if GCC_VERSION >= 4003
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wtype-limits"
-#endif
 long
 coff_get_reloc_upper_bound (bfd *abfd, sec_ptr asect)
 {
@@ -2019,16 +2015,15 @@ coff_get_reloc_upper_bound (bfd *abfd, sec_ptr asect)
       bfd_set_error (bfd_error_invalid_operation);
       return -1;
     }
+#if SIZEOF_LONG == SIZEOF_INT
   if (asect->reloc_count >= LONG_MAX / sizeof (arelent *))
     {
       bfd_set_error (bfd_error_file_too_big);
       return -1;
     }
+#endif
   return (asect->reloc_count + 1) * sizeof (arelent *);
 }
-#if GCC_VERSION >= 4003
-# pragma GCC diagnostic pop
-#endif
 
 asymbol *
 coff_make_empty_symbol (bfd *abfd)
index 8d6c94aef2e619743e8270e1e6d3277b55672809..202ef205ec6ff331942f0ebeecbaac2f6dbfa332 100755 (executable)
@@ -13367,6 +13367,39 @@ cat >>confdefs.h <<_ACEOF
 _ACEOF
 
 
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
+$as_echo_n "checking size of int... " >&6; }
+if ${ac_cv_sizeof_int+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int"        "$ac_includes_default"; then :
+
+else
+  if test "$ac_cv_type_int" = yes; then
+     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (int)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_int=0
+   fi
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
+$as_echo "$ac_cv_sizeof_int" >&6; }
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT $ac_cv_sizeof_int
+_ACEOF
+
+
 
 if test "x${ac_cv_sizeof_void_p}" = "x8"; then
   host64=true
index 5f02c41520eb1e542e8da418924795227ae3148a..4cd946db00e9a095e16bc0dc7a7c82372d0dbc60 100644 (file)
@@ -189,6 +189,7 @@ AC_TYPE_LONG_DOUBLE
 AC_CHECK_TYPES([long long], [AC_CHECK_SIZEOF(long long)])
 AC_CHECK_SIZEOF(void *)
 AC_CHECK_SIZEOF(long)
+AC_CHECK_SIZEOF(int)
 
 if test "x${ac_cv_sizeof_void_p}" = "x8"; then
   host64=true
index 73fb86971f3dcc0461ba17d5d24d3cf7add41761..13f96e8840e69bccedb71e16e60b20df72f18bb1 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -8268,25 +8268,19 @@ _bfd_elf_get_dynamic_symtab_upper_bound (bfd *abfd)
   return symtab_size;
 }
 
-#if GCC_VERSION >= 4003
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wtype-limits"
-#endif
 long
 _bfd_elf_get_reloc_upper_bound (bfd *abfd ATTRIBUTE_UNUSED,
                                sec_ptr asect)
 {
-
+#if SIZEOF_LONG == SIZEOF_INT
   if (asect->reloc_count >= LONG_MAX / sizeof (arelent *))
     {
       bfd_set_error (bfd_error_file_too_big);
       return -1;
     }
+#endif
   return (asect->reloc_count + 1) * sizeof (arelent *);
 }
-#if GCC_VERSION >= 4003
-# pragma GCC diagnostic pop
-#endif
 
 /* Canonicalize the relocs.  */
 
index f523ce7f84688b5cfb74150bd1c8643bc335e0a9..55a1db911e9aa4072b2a8421e72621ce02738722 100644 (file)
    section can represent up to two relocs, we must tell the user to allocate
    more space.  */
 
-#if GCC_VERSION >= 4003
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wtype-limits"
-#endif
 static long
 elf64_sparc_get_reloc_upper_bound (bfd *abfd ATTRIBUTE_UNUSED, asection *sec)
 {
+#if SIZEOF_LONG == SIZEOF_INT
   if (sec->reloc_count >= LONG_MAX / 2 / sizeof (arelent *))
     {
       bfd_set_error (bfd_error_file_too_big);
       return -1;
     }
+#endif
   return (sec->reloc_count * 2 + 1) * sizeof (arelent *);
 }
-#if GCC_VERSION >= 4003
-# pragma GCC diagnostic pop
-#endif
 
 static long
 elf64_sparc_get_dynamic_reloc_upper_bound (bfd *abfd)
index a9ca313501e5f447ef99e79950d6a7a72b8b36d4..122a0c26ccc1144d161d2c96063629c9245949b8 100644 (file)
@@ -1417,24 +1417,19 @@ bfd_mach_o_write_dyld_info (bfd *abfd, bfd_mach_o_load_command *command)
   return TRUE;
 }
 
-#if GCC_VERSION >= 4003
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wtype-limits"
-#endif
 long
 bfd_mach_o_get_reloc_upper_bound (bfd *abfd ATTRIBUTE_UNUSED,
                                  asection *asect)
 {
+#if SIZEOF_LONG == SIZEOF_INT
    if (asect->reloc_count >= LONG_MAX / sizeof (arelent *))
     {
       bfd_set_error (bfd_error_file_too_big);
       return -1;
     }
+#endif
  return (asect->reloc_count + 1) * sizeof (arelent *);
 }
-#if GCC_VERSION >= 4003
-# pragma GCC diagnostic pop
-#endif
 
 /* In addition to the need to byte-swap the symbol number, the bit positions
    of the fields in the relocation information vary per target endian-ness.  */