compiler: really define runtime/volatile.* functions

This makes them available to deferred calls, among others.
This commit is contained in:
Ayke van Laethem
2022-06-20 14:56:55 +02:00
committed by Ron Evans
parent e1052f921c
commit 1ceb63d14c
5 changed files with 22 additions and 19 deletions
+6 -1
View File
@@ -3,6 +3,8 @@ package main
import (
"sync/atomic"
"unsafe"
"runtime/volatile"
)
func main() {
@@ -82,7 +84,7 @@ func main() {
testValue(int(3), int(-2))
testValue("", "foobar", "baz")
// Test atomic operations as deferred values.
// Test atomic and volatile operations as deferred values.
testDefer()
}
@@ -99,8 +101,11 @@ func testValue(values ...interface{}) {
func testDefer() {
n1 := int32(5)
n2 := uint32(6)
defer func() {
println("deferred atomic add:", n1)
println("deferred volatile store:", n2)
}()
defer atomic.AddInt32(&n1, 3)
defer volatile.StoreUint32(&n2, 22)
}
+1
View File
@@ -34,3 +34,4 @@ StoreUint64: 20
StoreUintptr: 20
StorePointer: true
deferred atomic add: 8
deferred volatile store: 22