End of function return: not live long enough

Thanks! I'm using memory pointed by x, which is destructed before returned?

It seems I'm doing things like below?

return x.borrow().val

is translated into

x.drop();
return x.borrow().val

?

Intuitively (from assembly level), rust would drop or clean up before return call ret.