On Fri, Nov 10, 2023 at 11:10 AM HAO CHEN GUI <guih...@linux.ibm.com> wrote: > > 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.
I don't think they have to be aligned - they have to adhere to the ABI which __builtin_apply_args ensures. But others might know more details here. > Thanks > Gui Haochen > > > > > Richard. > > > >> > >> Thanks > >> Gui Haochen