From d9be71a5b829756aa7aab3cff587efe88d2893cd Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 11 Mar 2021 22:04:10 +0100 Subject: [PATCH 1/2] Update llvm-project submodule --- src/llvm-project | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/llvm-project b/src/llvm-project index 5f958e150d377..62a1ddde22c26 160000 --- a/src/llvm-project +++ b/src/llvm-project @@ -1 +1 @@ -Subproject commit 5f958e150d377e608d2f1f208b86110218d5da3c +Subproject commit 62a1ddde22c267249eda72184520a21ad2052f0b From ef269ac4fcf62e9fa39f4d6d28ccae6eeebda4c4 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 11 Mar 2021 22:55:11 +0100 Subject: [PATCH 2/2] Add tests for issues #82833 and #82859 --- .../ui/issues/issue-82833-slice-miscompile.rs | 17 +++++++++++++++++ .../ui/issues/issue-82859-slice-miscompile.rs | 19 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 src/test/ui/issues/issue-82833-slice-miscompile.rs create mode 100644 src/test/ui/issues/issue-82859-slice-miscompile.rs diff --git a/src/test/ui/issues/issue-82833-slice-miscompile.rs b/src/test/ui/issues/issue-82833-slice-miscompile.rs new file mode 100644 index 0000000000000..b14e5f6fb12fa --- /dev/null +++ b/src/test/ui/issues/issue-82833-slice-miscompile.rs @@ -0,0 +1,17 @@ +// run-pass +// compile-flags: -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Copt-level=0 -Cdebuginfo=2 +// ignore-tidy-linelength + +// Make sure LLVM does not miscompile this. + +fn make_string(ch: char) -> String { + let mut bytes = [0u8; 4]; + ch.encode_utf8(&mut bytes).into() +} + +fn main() { + let ch = '😃'; + dbg!(ch); + let string = make_string(ch); + dbg!(string); +} diff --git a/src/test/ui/issues/issue-82859-slice-miscompile.rs b/src/test/ui/issues/issue-82859-slice-miscompile.rs new file mode 100644 index 0000000000000..b64eb49907139 --- /dev/null +++ b/src/test/ui/issues/issue-82859-slice-miscompile.rs @@ -0,0 +1,19 @@ +// run-pass +// compile-flags: -Copt-level=0 -Cdebuginfo=2 + +// Make sure LLVM does not miscompile this. + +fn indirect_get_slice() -> &'static [usize] { + &[] +} + +#[inline(always)] +fn get_slice() -> &'static [usize] { + let ret = indirect_get_slice(); + ret +} + +fn main() { + let output = get_slice().len(); + assert_eq!(output, 0); +}