Skip to content

Commit 7ea9eff

Browse files
aykevldeadprogram
authored andcommitted
interp: implement binary operators in markExternal* functions
This is necessary for the next commit. The next commit would otherwise cause an issue with the following constant operation: i64 add (i64 ptrtoint (%runtime.machHeader* @_mh_execute_header to i64), i64 32)
1 parent 80d9411 commit 7ea9eff

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

interp/memory.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,16 @@ func (mv *memoryView) markExternal(llvmValue llvm.Value, mark uint8) error {
190190
if err != nil {
191191
return err
192192
}
193+
case llvm.Add, llvm.Sub, llvm.Mul, llvm.UDiv, llvm.SDiv, llvm.URem, llvm.SRem, llvm.Shl, llvm.LShr, llvm.AShr, llvm.And, llvm.Or, llvm.Xor:
194+
// Integer binary operators. Mark both operands.
195+
err := mv.markExternal(llvmValue.Operand(0), mark)
196+
if err != nil {
197+
return err
198+
}
199+
err = mv.markExternal(llvmValue.Operand(1), mark)
200+
if err != nil {
201+
return err
202+
}
193203
default:
194204
return fmt.Errorf("interp: unknown constant expression '%s'", instructionNameMap[llvmValue.Opcode()])
195205
}

0 commit comments

Comments
 (0)