Skip to content

Commit

Permalink
Bump LLVM for DeadArgElim fix
Browse files Browse the repository at this point in the history
  • Loading branch information
Aaron1011 committed Oct 22, 2020
1 parent a9cd294 commit d3369e6
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 1 deletion.
29 changes: 29 additions & 0 deletions src/test/ui/auxiliary/issue-76387.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// compile-flags: -C opt-level=3

pub struct FatPtr {
ptr: *mut u8,
len: usize,
}

impl FatPtr {
pub fn new(len: usize) -> FatPtr {
let ptr = Box::into_raw(vec![42u8; len].into_boxed_slice()) as *mut u8;

FatPtr { ptr, len }
}
}

impl std::ops::Deref for FatPtr {
type Target = [u8];

#[inline]
fn deref(&self) -> &[u8] {
unsafe { std::slice::from_raw_parts(self.ptr, self.len) }
}
}

impl std::ops::Drop for FatPtr {
fn drop(&mut self) {
println!("Drop");
}
}
22 changes: 22 additions & 0 deletions src/test/ui/issue-76387-llvm-miscompile.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// no-system-llvm
// compile-flags: -C opt-level=3
// aux-build: issue-76387.rs
// run-pass

// Regression test for issue #76387
// Tests that LLVM doesn't miscompile this

extern crate issue_76387;

use issue_76387::FatPtr;

fn print(data: &[u8]) {
println!("{:#?}", data);
}

fn main() {
let ptr = FatPtr::new(20);
let data = unsafe { std::slice::from_raw_parts(ptr.as_ptr(), ptr.len()) };

print(data);
}

0 comments on commit d3369e6

Please sign in to comment.