@@ -489,9 +489,12 @@ extension UnsafeRawPointer {
489
489
@inlinable
490
490
@_alwaysEmitIntoClient
491
491
public func alignedUp( toMultipleOf alignment: Int ) -> Self {
492
- let mask = alignment &- 1
493
- _debugPrecondition ( alignment & mask == 0 )
494
- let bits = ( Int ( Builtin . ptrtoint_Word ( _rawValue) ) &+ mask) & ~ mask
492
+ let mask = UInt ( alignment. _builtinWordValue) &- 1
493
+ _debugPrecondition (
494
+ alignment > 0 && UInt ( alignment. _builtinWordValue) & mask == 0 ,
495
+ " alignment must be a whole power of 2. "
496
+ )
497
+ let bits = ( UInt ( Builtin . ptrtoint_Word ( _rawValue) ) &+ mask) & ~ mask
495
498
return . init( Builtin . inttoptr_Word ( bits. _builtinWordValue) )
496
499
}
497
500
@@ -507,9 +510,12 @@ extension UnsafeRawPointer {
507
510
@inlinable
508
511
@_alwaysEmitIntoClient
509
512
public func alignedDown( toMultipleOf alignment: Int ) -> Self {
510
- let mask = alignment &- 1
511
- _debugPrecondition ( alignment & mask == 0 )
512
- let bits = Int ( Builtin . ptrtoint_Word ( _rawValue) ) & ~ mask
513
+ let mask = UInt ( alignment. _builtinWordValue) &- 1
514
+ _debugPrecondition (
515
+ alignment > 0 && UInt ( alignment. _builtinWordValue) & mask == 0 ,
516
+ " alignment must be a whole power of 2. "
517
+ )
518
+ let bits = UInt ( Builtin . ptrtoint_Word ( _rawValue) ) & ~ mask
513
519
return . init( Builtin . inttoptr_Word ( bits. _builtinWordValue) )
514
520
}
515
521
}
@@ -1260,9 +1266,12 @@ extension UnsafeMutableRawPointer {
1260
1266
@inlinable
1261
1267
@_alwaysEmitIntoClient
1262
1268
public func alignedUp( toMultipleOf alignment: Int ) -> Self {
1263
- let mask = alignment &- 1
1264
- _debugPrecondition ( alignment & mask == 0 )
1265
- let bits = ( Int ( Builtin . ptrtoint_Word ( _rawValue) ) &+ mask) & ~ mask
1269
+ let mask = UInt ( alignment. _builtinWordValue) &- 1
1270
+ _debugPrecondition (
1271
+ alignment > 0 && UInt ( alignment. _builtinWordValue) & mask == 0 ,
1272
+ " alignment must be a whole power of 2. "
1273
+ )
1274
+ let bits = ( UInt ( Builtin . ptrtoint_Word ( _rawValue) ) &+ mask) & ~ mask
1266
1275
return . init( Builtin . inttoptr_Word ( bits. _builtinWordValue) )
1267
1276
}
1268
1277
@@ -1278,9 +1287,12 @@ extension UnsafeMutableRawPointer {
1278
1287
@inlinable
1279
1288
@_alwaysEmitIntoClient
1280
1289
public func alignedDown( toMultipleOf alignment: Int ) -> Self {
1281
- let mask = alignment &- 1
1282
- _debugPrecondition ( alignment & mask == 0 )
1283
- let bits = Int ( Builtin . ptrtoint_Word ( _rawValue) ) & ~ mask
1290
+ let mask = UInt ( alignment. _builtinWordValue) &- 1
1291
+ _debugPrecondition (
1292
+ alignment > 0 && UInt ( alignment. _builtinWordValue) & mask == 0 ,
1293
+ " alignment must be a whole power of 2. "
1294
+ )
1295
+ let bits = UInt ( Builtin . ptrtoint_Word ( _rawValue) ) & ~ mask
1284
1296
return . init( Builtin . inttoptr_Word ( bits. _builtinWordValue) )
1285
1297
}
1286
1298
}
0 commit comments