Dne 10.02.2009 (tor) ob 17:14 -0800 je Ian Lance Taylor zapisal(a):
> I don't quite see it.  highest_outgoing_args_in_use is at least as large
> as args_size.constant, and that counts the locate.size for each
> argument.  So it should always include the extra padding.
> 
> That said, it would not be shocking if there were a bug in this code.
> It's not particularly common to use emit_library_call_value_1 with code
> that passes parameters on the stack.  And it's even less common to use
> it with parameters that require padding when they are pushed on the
> stack.  So a miscalculation in such a scenario could survive for quite
> along time.
consider stack slots of 8 bytes, two parameters, one 8-byte, one 4-byte
(padded below), all arranged on the stack like this (low addresses at
the bottom):

16 
8       [ P2 ]
0  [   P1    ]

P1: offset = slot_offset = 0, size = 8
P2: offset = 12, slot_offset = 8, size = 8
highest_outgoing_args_in_use = 16 (sum of sizes)

buffer is allocated 16 bytes.

lower bound for P2 is 12 (P2.offset).

upper bound for P2 is 20 (12 + 8).

the loop indexes interval [12, 20) of the buffer, but only 16 bytes were
allocated.

hopefully this clarifies the issue.

that said, this probably belongs to gcc bugzilla: I don't have an exact
way to reproduce it with a mainline gcc version, though, as I haven't
really tried other targets, while mine is well ... not merged in the
mainline ... 

regards,
  jaKa

-- 
email: j...@xlab.si
w3:    http://www.gmajna.net/svojat/jaka

Reply via email to