@@ -44,7 +44,7 @@ cfg_if! {
44
44
// until the upstream rust issue is resolved, but this at least lets us make
45
45
// progress on platforms where this type is important.
46
46
//
47
- // The supported architectures and OSes is intentionally very restricted,
47
+ // The list of supported architectures and OSes is intentionally very restricted,
48
48
// as careful work needs to be done to verify that a particular platform
49
49
// has a conformant ABI.
50
50
//
@@ -60,35 +60,39 @@ cfg_if! {
60
60
pub type __uint128_t = u128 ;
61
61
62
62
cfg_if! {
63
- if #[ cfg( libc_const_assert) ] {
63
+ if #[ cfg( libc_underscore_const_names) ] {
64
+ macro_rules! static_assert_eq {
65
+ ( $a: expr, $b: expr) => {
66
+ const _: [ ( ) ; $a] = [ ( ) ; $b] ;
67
+ } ;
68
+ }
69
+
64
70
// NOTE: if you add more platforms to here, you may need to cfg
65
71
// these consts. They should always match the platform's values
66
72
// for `sizeof(__int128)` and `_Alignof(__int128)`.
67
73
const _SIZE_128: usize = 16 ;
68
74
const _ALIGN_128: usize = 16 ;
69
75
70
- /// Since Rust doesn't officially guarantee that these types
71
- /// have compatible ABIs, we const assert that these values have the
72
- /// known size/align of the target platform's libc. If rustc ever
73
- /// tries to regress things, it will cause a compilation error.
74
- ///
75
- /// This isn't a bullet-proof solution because e.g. it doesn't
76
- /// catch the fact that llvm and gcc disagree on how x64 __int128
77
- /// is actually *passed* on the stack (clang underaligns it for
78
- /// the same reason that rustc *never* properly aligns it).
79
- const _ASSERT_128_COMPAT: ( ) = {
80
- assert!( core:: mem:: size_of:: <__int128>( ) == _SIZE_128) ;
81
- assert!( core:: mem:: align_of:: <__int128>( ) == _ALIGN_128) ;
76
+ // Since Rust doesn't officially guarantee that these types
77
+ // have compatible ABIs, we const assert that these values have the
78
+ // known size/align of the target platform's libc. If rustc ever
79
+ // tries to regress things, it will cause a compilation error.
80
+ //
81
+ // This isn't a bullet-proof solution because e.g. it doesn't
82
+ // catch the fact that llvm and gcc disagree on how x64 __int128
83
+ // is actually *passed* on the stack (clang underaligns it for
84
+ // the same reason that rustc *never* properly aligns it).
85
+ static_assert_eq!( core:: mem:: size_of:: <__int128>( ) , _SIZE_128) ;
86
+ static_assert_eq!( core:: mem:: align_of:: <__int128>( ) , _ALIGN_128) ;
82
87
83
- assert !( core:: mem:: size_of:: <__uint128>( ) == _SIZE_128) ;
84
- assert !( core:: mem:: align_of:: <__uint128>( ) == _ALIGN_128) ;
88
+ static_assert_eq !( core:: mem:: size_of:: <__uint128>( ) , _SIZE_128) ;
89
+ static_assert_eq !( core:: mem:: align_of:: <__uint128>( ) , _ALIGN_128) ;
85
90
86
- assert !( core:: mem:: size_of:: <__int128_t>( ) == _SIZE_128) ;
87
- assert !( core:: mem:: align_of:: <__int128_t>( ) == _ALIGN_128) ;
91
+ static_assert_eq !( core:: mem:: size_of:: <__int128_t>( ) , _SIZE_128) ;
92
+ static_assert_eq !( core:: mem:: align_of:: <__int128_t>( ) , _ALIGN_128) ;
88
93
89
- assert!( core:: mem:: size_of:: <__uint128_t>( ) == _SIZE_128) ;
90
- assert!( core:: mem:: align_of:: <__uint128_t>( ) == _ALIGN_128) ;
91
- } ;
94
+ static_assert_eq!( core:: mem:: size_of:: <__uint128_t>( ) , _SIZE_128) ;
95
+ static_assert_eq!( core:: mem:: align_of:: <__uint128_t>( ) , _ALIGN_128) ;
92
96
}
93
97
}
94
98
}
0 commit comments