[patch] Workaround `shift count >= width of type'

Jan Kratochvil jan.kratochvil@redhat.com
Thu May 27 18:40:00 GMT 2010


Hi,

on i686 host (tested FSF GCC 4.4, 4.5 and HEAD with -m32) it errors out during
--enable-targets=all on:
vms-misc.c:590: error: right shift count >= width of type
vms-misc.c:591: error: right shift count >= width of type

It is in fact a GCC bug but even if it would get fixed these GCC versions are
too widespread to ignore.

OK to check-in?


Thanks,
Jan


bfd/
2010-05-27  Jan Kratochvil  <jan.kratochvil@redhat.com>

	Workaround GCC PR middle-end/4210.
	* vms-misc.c (vms_time_t_to_vms_time): Use ternary operator for val[2]
	and val[3].

--- a/bfd/vms-misc.c
+++ b/bfd/vms-misc.c
@@ -585,16 +585,8 @@ vms_time_t_to_vms_time (time_t ut, unsigned int *hi, unsigned int *lo)
   /* Put into val.  */
   val[0] = ut & 0xffff;
   val[1] = (ut >> 16) & 0xffff;
-  if (sizeof (ut) > 4)
-    {
-      val[2] = (ut >> 32) & 0xffff;
-      val[3] = (ut >> 48) & 0xffff;
-    }
-  else
-    {
-      val[2] = 0;
-      val[3] = 0;
-    }
+  val[2] = sizeof (ut) > 4 ? (ut >> 32) & 0xffff : 0;
+  val[3] = sizeof (ut) > 4 ? (ut >> 48) & 0xffff : 0;
 
   /* Add offset.  */
   tmp[0] = VMS_TIME_OFFSET & 0xffff;



More information about the Binutils mailing list