aboutsummaryrefslogtreecommitdiff
path: root/src/llvm.cff
diff options
context:
space:
mode:
Diffstat (limited to 'src/llvm.cff')
-rw-r--r--src/llvm.cff10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/llvm.cff b/src/llvm.cff
index e8c7dad..0ce97c8 100644
--- a/src/llvm.cff
+++ b/src/llvm.cff
@@ -555,7 +555,7 @@ fn genexpr(f *Fn, ex *Expr) Value {
let lhs0 = genload(f, ref);
let tmp = gentmp(ex.ty, "%s %t %v, %v", inst, ex.ty, lhs0, rhs);
genstore(f, ref, tmp);
- tmp;
+ genload(f, ref); // load again because value could have overflowed when storing it
)
]
switch b.op {
@@ -588,7 +588,7 @@ fn genexpr(f *Fn, ex *Expr) Value {
let ref = genref(f, b.lhs);
let rhs = convert(f, b.lhs.ty, b.rhs);
genstore(f, ref, rhs);
- return rhs;
+ return genload(f, ref); // load again because value could have overflowed when storing it
case '+=';
let ref = genref(f, b.lhs);
@@ -596,7 +596,7 @@ fn genexpr(f *Fn, ex *Expr) Value {
let lhs0 = genload(f, ref);
let tmp = genadd(ex.ty, lhs0, rhs);
genstore(f, ref, tmp);
- return tmp;
+ return genload(f, ref); // load again because value could have overflowed when storing it
case '-=';
let ref = genref(f, b.lhs);
@@ -604,7 +604,7 @@ fn genexpr(f *Fn, ex *Expr) Value {
let lhs0 = genload(f, ref);
let tmp = gensub(ex.ty, lhs0, rhs);
genstore(f, ref, tmp);
- return tmp;
+ return genload(f, ref); // load again because value could have overflowed when storing it
case '*=';
return genassignop(ex.ty->is(:Flo) ? "fdiv" : "mul", ex.ty, b.lhs, b.rhs);
@@ -715,7 +715,7 @@ fn genexpr(f *Fn, ex *Expr) Value {
gen("\t%v = add %t %v, %v\n", val, ex.ty, var, one);
}
genstore(f, ref, val);
- return val;
+ return genload(f, ref); // load again because value could have overflowed when storing it
case :postinc, :postdec;
let one = Value{ex.ty, :IImm(un.op == :postinc ? 1 : -1)};