Hi Richard, 在 2023/11/10 17:06, Richard Biener 写道: > On Fri, Nov 10, 2023 at 8:52 AM HAO CHEN GUI <guih...@linux.ibm.com> wrote: >> >> Hi Richard, >> Thanks so much for your comments. >> >> 在 2023/11/9 19:41, Richard Biener 写道: >>> I'm not sure if the testcase is valid though? >>> >>> @defbuiltin{{void} __builtin_return (void *@var{result})} >>> This built-in function returns the value described by @var{result} from >>> the containing function. You should specify, for @var{result}, a value >>> returned by @code{__builtin_apply}. >>> @enddefbuiltin >>> >>> I don't see __builtin_apply being used here? >> >> The prototype of the test case is from "__objc_block_forward" in >> libobjc/sendmsg.c. >> >> void *args, *res; >> >> args = __builtin_apply_args (); >> res = __objc_forward (rcv, op, args); >> if (res) >> __builtin_return (res); >> else >> ... >> >> The __builtin_apply_args puts the return values on stack by the alignment. >> But the forward function can do anything and return a void* pointer. >> IMHO the alignment might be broken. So I just simplified it to use a >> void* pointer as the input argument of "__builtin_return" and skip >> "__builtin_apply_args". > > But doesn't __objc_forward then break the contract between > __builtin_apply_args and __builtin_return? > > That said, __builtin_return is a very special function, it's not supposed > to deal with what you are fixing. At least I think so. > > IMHO the bug is in __objc_block_forward.
If so, can we document that the memory objects pointed by input argument of __builtin_return have to be aligned? Then we can force the alignment in __builtin_return. The customer function can do anything if gcc doesn't state that. Thanks Gui Haochen > > Richard. > >> >> Thanks >> Gui Haochen