拡張リータン構文はどうやって使うの?
return ... do 〜 end return;内とそれが帰った先の両方で
system.address_image 使って変数のアドレスが同じ(= return 時のコピーが行われない)ようだということは確認できたけど
↓のようにしたらアドレスは同じでも中身のデータが壊れてましたよ?
俺使い方間違ってる?

function test return string is
str:string(1..10):=(others=>'n');
begin
return ret_str:string(str'range) do
for i in str'range loop
ret_str(i):=str(i);
end loop;
end return;
end test;