File tree Expand file tree Collapse file tree 2 files changed +69
-0
lines changed Expand file tree Collapse file tree 2 files changed +69
-0
lines changed Original file line number Diff line number Diff line change 1+ // RUN: %target-run-simple-swift(-parse-as-library -enable-experimental-feature Volatile) | %FileCheck %s
2+
3+ // REQUIRES: executable_test
4+
5+ import _Volatile
6+
7+ @main
8+ struct Main {
9+ static func main( ) {
10+ var byte : UInt8 = 42
11+ withUnsafePointer ( to: & byte) { p in
12+ let volatilePointer = VolatileMappedRegister < UInt8 > ( unsafeBitPattern: UInt ( bitPattern: p) )
13+ print ( " byte = \( volatilePointer. load ( ) ) " )
14+ // CHECK: byte = 42
15+ volatilePointer. store ( 77 )
16+ }
17+ print ( " byte = \( byte) " )
18+ // CHECK: byte = 77
19+
20+ var heapPointer = UnsafeMutablePointer< UInt8> . allocate( capacity: 16 ) // uninitialized content
21+ for i in 0 ..< 16 {
22+ let pointerWithOffset = heapPointer. advanced ( by: i)
23+ let volatilePointer = VolatileMappedRegister < UInt8 > ( unsafeBitPattern: UInt ( bitPattern: pointerWithOffset) )
24+ volatilePointer. store ( UInt8 ( 0x61 + i) )
25+ }
26+ heapPointer [ 15 ] = 0
27+ print ( String ( cString: heapPointer) )
28+ // CHECK: abcdefghijklmno
29+ }
30+ }
Original file line number Diff line number Diff line change 1+ // RUN: %target-run-simple-swift(-parse-as-library -enable-experimental-feature Embedded -wmo -runtime-compatibility-version none) | %FileCheck %s
2+
3+ // REQUIRES: swift_in_compiler
4+ // REQUIRES: executable_test
5+ // REQUIRES: optimized_stdlib
6+ // REQUIRES: OS=macosx || OS=linux-gnu
7+
8+ import _Volatile
9+
10+ @_silgen_name ( " putchar " )
11+ @discardableResult
12+ func putchar( _: CInt ) -> CInt
13+
14+ @main
15+ struct Main {
16+ static func main( ) {
17+ var byte : UInt8 = 42
18+ withUnsafePointer ( to: & byte) { p in
19+ let volatilePointer = VolatileMappedRegister < UInt8 > ( unsafeBitPattern: UInt ( bitPattern: p) )
20+ print ( " byte = " , terminator: " " )
21+ print ( volatilePointer. load ( ) )
22+ // CHECK: byte = 42
23+ volatilePointer. store ( 77 )
24+ }
25+ print ( " byte = " , terminator: " " )
26+ print ( byte)
27+ // CHECK: byte = 77
28+
29+ var heapPointer = UnsafeMutablePointer< UInt8> . allocate( capacity: 16 ) // uninitialized content
30+ for i in 0 ..< 16 {
31+ let pointerWithOffset = heapPointer. advanced ( by: i)
32+ let volatilePointer = VolatileMappedRegister < UInt8 > ( unsafeBitPattern: UInt ( bitPattern: pointerWithOffset) )
33+ volatilePointer. store ( UInt8 ( 0x61 + i) )
34+ }
35+ for i in 0 ..< 16 { putchar ( CInt ( heapPointer [ i] ) ) }
36+ putchar ( CInt ( ( " \n " as Unicode . Scalar) . value) )
37+ // CHECK: abcdefghijklmnop
38+ }
39+ }
You can’t perform that action at this time.
0 commit comments