about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2021-03-12 14:16:01 +0000
committerbors <bors@rust-lang.org>2021-03-12 14:16:01 +0000
commit215ebc364e790f6727754e5b83bf47c3696bade7 (patch)
tree529732b982db3676a1684c05ad8b20f7a0ca26b0
parent338647db73028aca0198f5330b15bf4bb769a1ea (diff)
parentef269ac4fcf62e9fa39f4d6d28ccae6eeebda4c4 (diff)
downloadrust-215ebc364e790f6727754e5b83bf47c3696bade7.tar.gz
rust-215ebc364e790f6727754e5b83bf47c3696bade7.zip
Auto merge of #83030 - nikic:update-llvm, r=nagisa
Update llvm-project submodule

Fixes #82833. Fixes #82859. Probably also `fixes` #83025. This also merges in the current upstream 12.x branch.

r? `@nagisa`
m---------src/llvm-project0
-rw-r--r--src/test/ui/issues/issue-82833-slice-miscompile.rs17
-rw-r--r--src/test/ui/issues/issue-82859-slice-miscompile.rs19
3 files changed, 36 insertions, 0 deletions
diff --git a/src/llvm-project b/src/llvm-project
-Subproject 5f958e150d377e608d2f1f208b86110218d5da3
+Subproject 62a1ddde22c267249eda72184520a21ad2052f0
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 00000000000..b14e5f6fb12
--- /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 00000000000..b64eb499071
--- /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);
+}