Skip to content

Commit 888ca4a

Browse files
aykevldeadprogram
authored andcommitted
interp: fix sync/atomic.Value load/store methods
These methods do some unsafe pointer casting but can be assumed to not have significant side effects. Simply call these functions at runtime instead of compile time. This is a partial fix for importing image/png.
1 parent 903bebd commit 888ca4a

File tree

1 file changed

+4
-0
lines changed

1 file changed

+4
-0
lines changed

interp/scan.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ func (e *evalPackage) hasSideEffects(fn llvm.Value) (*sideEffectResult, *Error)
6262
return &sideEffectResult{severity: sideEffectNone}, nil
6363
case name == "llvm.dbg.value":
6464
return &sideEffectResult{severity: sideEffectNone}, nil
65+
case name == "(*sync/atomic.Value).Load" || name == "(*sync/atomic.Value).Store":
66+
// These functions do some unsafe pointer loading/storing but are
67+
// otherwise safe.
68+
return &sideEffectResult{severity: sideEffectLimited}, nil
6569
case strings.HasPrefix(name, "llvm.lifetime."):
6670
return &sideEffectResult{severity: sideEffectNone}, nil
6771
}

0 commit comments

Comments
 (0)