Skip to content

Commit

Permalink
Bug 7458: Fix returns in C-callable IEPs
Browse files Browse the repository at this point in the history
Should fix dylan-lang#1045.

* sources/dfmc/llvm-back-end/llvm-emit-computation.dylan
  (emit-computation): Dispatch on the <return> operand type without
   assuming that it is a <temporary>.
  (do-emit-return on <object-reference>): New method.
  (do-emit-return on <temporary>): New method.
  (do-emit-return-temporary): Renamed from the former do-emit-return.
  • Loading branch information
housel committed Feb 23, 2016
1 parent fd7cdb8 commit 1577219
Showing 1 changed file with 15 additions and 3 deletions.
18 changes: 15 additions & 3 deletions sources/dfmc/llvm-back-end/llvm-emit-computation.dylan
Original file line number Diff line number Diff line change
Expand Up @@ -1670,17 +1670,29 @@ end method;
define method emit-computation
(back-end :: <llvm-back-end>, m :: <llvm-module>, c :: <return>) => ();
let value = c.computation-value;
do-emit-return(back-end, m, value, temporary-value(value));
do-emit-return(back-end, m, value);
end method;

define method do-emit-return
(back-end :: <llvm-back-end>, m :: <llvm-module>, o :: <object-reference>)
=> ();
ins--ret(back-end, emit-reference(back-end, m, o));
end method;

define method do-emit-return
(back-end :: <llvm-back-end>, m :: <llvm-module>, temp :: <temporary>)
=> ();
do-emit-return-temporary(back-end, m, temp, temporary-value(temp));
end method;

define method do-emit-return-temporary
(back-end :: <llvm-back-end>, m :: <llvm-module>,
temp :: <multiple-value-temporary>, mv :: <llvm-global-mv>)
=> ();
ins--ret(back-end, mv.llvm-mv-struct);
end method;

define method do-emit-return
define method do-emit-return-temporary
(back-end :: <llvm-back-end>, m :: <llvm-module>,
temp :: <multiple-value-temporary>, mv :: <llvm-local-mv>)
=> ();
Expand Down Expand Up @@ -1729,7 +1741,7 @@ define method do-emit-return
end if;
end method;

define method do-emit-return
define method do-emit-return-temporary
(back-end :: <llvm-back-end>, m :: <llvm-module>,
temp :: <temporary>, value :: <llvm-value>)
=> ();
Expand Down

0 comments on commit 1577219

Please sign in to comment.