@@ -489,9 +489,12 @@ extension UnsafeRawPointer {
489489 @inlinable
490490 @_alwaysEmitIntoClient
491491 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
495498 return . init( Builtin . inttoptr_Word ( bits. _builtinWordValue) )
496499 }
497500
@@ -507,9 +510,12 @@ extension UnsafeRawPointer {
507510 @inlinable
508511 @_alwaysEmitIntoClient
509512 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
513519 return . init( Builtin . inttoptr_Word ( bits. _builtinWordValue) )
514520 }
515521}
@@ -1260,9 +1266,12 @@ extension UnsafeMutableRawPointer {
12601266 @inlinable
12611267 @_alwaysEmitIntoClient
12621268 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
12661275 return . init( Builtin . inttoptr_Word ( bits. _builtinWordValue) )
12671276 }
12681277
@@ -1278,9 +1287,12 @@ extension UnsafeMutableRawPointer {
12781287 @inlinable
12791288 @_alwaysEmitIntoClient
12801289 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
12841296 return . init( Builtin . inttoptr_Word ( bits. _builtinWordValue) )
12851297 }
12861298}
0 commit comments