Skip to content

Commit 514922b

Browse files
authored
Merge pull request #1492 from housel/fix-empty-stack-vector
Fix empty <stack-vector> computations
2 parents 3f72e26 + 8c35585 commit 514922b

File tree

1 file changed

+16
-9
lines changed

1 file changed

+16
-9
lines changed

sources/dfmc/llvm-back-end/llvm-emit-computation.dylan

+16-9
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,12 @@ end function;
115115
define method emit-reference
116116
(back-end :: <llvm-back-end>, m :: <llvm-module>, o :: <stack-vector-temporary>)
117117
=> (reference :: <llvm-value>);
118-
ins--bitcast(back-end, temporary-value(o), $llvm-object-pointer-type)
118+
if (o.number-values ~= 0)
119+
ins--bitcast(back-end, temporary-value(o), $llvm-object-pointer-type)
120+
else
121+
// Return the canonical empty vector
122+
emit-reference(back-end, m, dylan-value(#"%empty-vector"))
123+
end if
119124
end method;
120125

121126
// Local temporary definitions
@@ -1080,14 +1085,16 @@ end method;
10801085

10811086
define method emit-computation
10821087
(back-end :: <llvm-back-end>, m :: <llvm-module>, c :: <stack-vector>) => ()
1083-
let word-size = back-end-word-size(back-end);
1084-
let class :: <&class> = dylan-value(#"<simple-object-vector>");
1085-
let tmp = temporary-value(c.temporary);
1086-
for (argument in c.arguments, i from 0)
1087-
let ptr = op--getslotptr(back-end, tmp, class, #"vector-element", i);
1088-
ins--store(back-end, emit-reference(back-end, m, argument), ptr,
1089-
alignment: word-size);
1090-
end for;
1088+
unless (c.arguments.empty?)
1089+
let word-size = back-end-word-size(back-end);
1090+
let class :: <&class> = dylan-value(#"<simple-object-vector>");
1091+
let tmp = temporary-value(c.temporary);
1092+
for (argument in c.arguments, i from 0)
1093+
let ptr = op--getslotptr(back-end, tmp, class, #"vector-element", i);
1094+
ins--store(back-end, emit-reference(back-end, m, argument), ptr,
1095+
alignment: word-size);
1096+
end for;
1097+
end unless;
10911098
end method;
10921099

10931100
define method repeated-slot-type-alignment

0 commit comments

Comments
 (0)