From d8ac7ccaae01986d60935469941eaf8f0003d43b Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Sat, 19 Jun 2021 20:22:39 +0200 Subject: [PATCH] interp: fix a bug in pointer cast workaround This was triggered by the following code: var smallPrimesProduct = new(big.Int).SetUint64(16294579238595022365) It is part of the new TinyGo version of the crypto/rand package. --- interp/interp.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/interp/interp.go b/interp/interp.go index 58be2c86..8da27705 100644 --- a/interp/interp.go +++ b/interp/interp.go @@ -129,7 +129,7 @@ func Run(mod llvm.Module, debug bool) error { // Update all global variables in the LLVM module. mem := memoryView{r: r} - for _, obj := range r.objects { + for i, obj := range r.objects { if obj.llvmGlobal.IsNil() { continue } @@ -159,6 +159,12 @@ func Run(mod llvm.Module, debug bool) error { name := obj.llvmGlobal.Name() obj.llvmGlobal.EraseFromParentAsGlobal() newGlobal.SetName(name) + + // Update interp-internal references. + delete(r.globals, obj.llvmGlobal) + obj.llvmGlobal = newGlobal + r.globals[newGlobal] = i + r.objects[i] = obj continue } if err != nil {