On 18/08/2006, at 5:42 PM, Ian Lance Taylor wrote:
...
We could change CSA so that when it combines a prologue instruction with a non-prologue instruction it sets a new flag on the instruction, and uses a table on the side to record the original values in the instruction.
I guess that would work; but wouldn't it be easier to just have calls.c tell the dwarf output code what the right offset is?
We could avoid nesting memcpy calls on ACCUMULATE_OUTGOING_ARGS machines, in which case I think Alex's patch is unnecessary. I'm not sure about your option 1--Alex didn't say that he couldn't reproduce the bug in mainline, he said he didn't have a test case for the specific case of memcpy popping the arguments off the stack on return.
I'm not sure how memcpy gets involved here. memcpy doesn't throw, so there's no need for any args_size data for it---in fact, it's a small optimization bug that such data gets reflected in the EH information at all.
Alex said that he couldn't find a case that didn't involve memcpy. Maybe an appropriate 'fix' is to revert the patch and put an assert in calls.c to ensure that a nested function call must be nothrow?
smime.p7s
Description: S/MIME cryptographic signature