File tree Expand file tree Collapse file tree 2 files changed +25
-0
lines changed
compiler/rustc_mir_transform/src Expand file tree Collapse file tree 2 files changed +25
-0
lines changed Original file line number Diff line number Diff line change @@ -15,6 +15,10 @@ pub struct CheckAlignment;
1515
1616impl < ' tcx > MirPass < ' tcx > for CheckAlignment {
1717 fn is_enabled ( & self , sess : & Session ) -> bool {
18+ // FIXME(#112480) MSVC and rustc disagree on minimum stack alignment on x86 Windows
19+ if sess. target . llvm_target == "i686-pc-windows-msvc" {
20+ return false ;
21+ }
1822 sess. opts . debug_assertions
1923 }
2024
Original file line number Diff line number Diff line change 1+ // run-pass
2+ // only-i686-pc-windows-msvc
3+ // compile-flags: -Copt-level=0 -Cdebug-assertions=yes
4+
5+ // MSVC isn't sure if on 32-bit Windows its u64 type is 8-byte-aligned or 4-byte-aligned.
6+ // So this test ensures that on i686-pc-windows-msvc, we do not insert a runtime check
7+ // that will fail on dereferencing of a pointer to u64 which is not 8-byte-aligned but is
8+ // 4-byte-aligned.
9+
10+ #![ feature( strict_provenance) ]
11+
12+ fn main ( ) {
13+ let mut x = [ 0u64 ; 2 ] ;
14+ let ptr: * mut u8 = x. as_mut_ptr ( ) . cast :: < u8 > ( ) ;
15+ unsafe {
16+ let misaligned = ptr. add ( 4 ) . cast :: < u64 > ( ) ;
17+ assert ! ( misaligned. addr( ) % 8 != 0 ) ;
18+ assert ! ( misaligned. addr( ) % 4 == 0 ) ;
19+ * misaligned = 42 ;
20+ }
21+ }
You can’t perform that action at this time.
0 commit comments