------- Comment #5 from rguenth at gcc dot gnu dot org  2005-10-24 10:46 -------
We are trying to copy 16 bits of

$5 = {id = 8, name = 0x896d7d0 "D.1877", decl = 0x4019ae18, offset = 8, 
  size = 8, fullsize = 16, next = 0x0, node = 8, address_taken = 0, 
  indirect_target = 0, is_artificial_var = 0, is_special_var = 0, 
  is_unknown_size_var = 0, has_union = 0, is_heap_var = 0, 
  solution = 0x8999708, variables = 0x8999718, complex = 0x0}

to

$1 = {id = 6, name = 0x898aaf7 "a", decl = 0x4019a7e8, offset = 8, size = 8, 
  fullsize = 24, next = 0x899ca54, node = 6, address_taken = 1, 
  indirect_target = 0, is_artificial_var = 0, is_special_var = 0, 
  is_unknown_size_var = 0, has_union = 0, is_heap_var = 0, 
  solution = 0x89996c8, variables = 0x89996d8, complex = 0x0}
$2 = {id = 7, name = 0x896d7c4 "a.bound_", decl = 0x4019a7e8, offset = 16, 
  size = 8, fullsize = 24, next = 0x0, node = 7, address_taken = 1, 
  indirect_target = 0, is_artificial_var = 0, is_special_var = 0, 
  is_unknown_size_var = 0, has_union = 0, is_heap_var = 0, 
  solution = 0x89996e8, variables = 0x89996f8, complex = 0x0}

not counting the non-existant 8 bits padding(?)

static void
do_simple_structure_copy (const struct constraint_expr lhs,
                          const struct constraint_expr rhs,
                          const unsigned HOST_WIDE_INT size)
{
  varinfo_t p = get_varinfo (lhs.var);
  unsigned HOST_WIDE_INT pstart, last;
  pstart = p->offset;
  last = p->offset + size;
  for (; p && p->offset < last; p = p->next)


not adding p->offset to last would fix that.  Hmm, too obvious?


-- 


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

Reply via email to