#include <stdio.h>
#include <stdint.h>

int main()
{ 
  uint64_t ui4 = ~((1ULL << 63ULL) >> 3ULL);
  union {
   uint64_t i64;
   struct {
     uint32_t lo;
     uint32_t hi;
   } i32;
  } ui5;

  ui5.i64 = ui4;

  printf( "%llx %x\n", ui4, ui5.i32.hi );

  return 0;
}

Return efffffffffffffff efffffff
(instead of 7fffffffffffffff 7fffffff). Appropriate expression for 32bit
constant give expected result.


-- 
           Summary: wrong 64bit constant calculation
           Product: gcc
           Version: 4.1.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: hidden_peak at mail dot ru
 GCC build triplet: i686-pc-linux-gnu
  GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31007

Reply via email to