From 218caa410aa38c29984be31a5229b9fa717560ee Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 14:19:13 +0200 Subject: Merging upstream version 1.68.2+dfsg1. Signed-off-by: Daniel Baumann --- .../debuginfo-box-with-large-allocator.rs | 23 +++++++++++++++++ .../debuginfo-emit-llvm-ir-and-split-debuginfo.rs | 8 ++++++ .../debuginfo-type-name-layout-ice-94961-1.rs | 16 ++++++++++++ .../debuginfo-type-name-layout-ice-94961-1.stderr | 4 +++ .../debuginfo-type-name-layout-ice-94961-2.rs | 20 +++++++++++++++ .../debuginfo-type-name-layout-ice-94961-2.stderr | 4 +++ ...buginfo_with_uninhabitable_field_and_unsized.rs | 29 ++++++++++++++++++++++ tests/ui/debuginfo/issue-105386-debuginfo-ub.rs | 20 +++++++++++++++ tests/ui/debuginfo/late-bound-projection.rs | 7 ++++++ 9 files changed, 131 insertions(+) create mode 100644 tests/ui/debuginfo/debuginfo-box-with-large-allocator.rs create mode 100644 tests/ui/debuginfo/debuginfo-emit-llvm-ir-and-split-debuginfo.rs create mode 100644 tests/ui/debuginfo/debuginfo-type-name-layout-ice-94961-1.rs create mode 100644 tests/ui/debuginfo/debuginfo-type-name-layout-ice-94961-1.stderr create mode 100644 tests/ui/debuginfo/debuginfo-type-name-layout-ice-94961-2.rs create mode 100644 tests/ui/debuginfo/debuginfo-type-name-layout-ice-94961-2.stderr create mode 100644 tests/ui/debuginfo/debuginfo_with_uninhabitable_field_and_unsized.rs create mode 100644 tests/ui/debuginfo/issue-105386-debuginfo-ub.rs create mode 100644 tests/ui/debuginfo/late-bound-projection.rs (limited to 'tests/ui/debuginfo') diff --git a/tests/ui/debuginfo/debuginfo-box-with-large-allocator.rs b/tests/ui/debuginfo/debuginfo-box-with-large-allocator.rs new file mode 100644 index 000000000..761539227 --- /dev/null +++ b/tests/ui/debuginfo/debuginfo-box-with-large-allocator.rs @@ -0,0 +1,23 @@ +// build-pass +// compile-flags: -Cdebuginfo=2 +// fixes issue #94725 + +#![feature(allocator_api)] + +use std::alloc::{AllocError, Allocator, Layout}; +use std::ptr::NonNull; + +struct ZST; + +unsafe impl Allocator for &ZST { + fn allocate(&self, layout: Layout) -> Result, AllocError> { + todo!() + } + unsafe fn deallocate(&self, ptr: NonNull, layout: Layout) { + todo!() + } +} + +fn main() { + let _ = Box::::new_in(43, &ZST); +} diff --git a/tests/ui/debuginfo/debuginfo-emit-llvm-ir-and-split-debuginfo.rs b/tests/ui/debuginfo/debuginfo-emit-llvm-ir-and-split-debuginfo.rs new file mode 100644 index 000000000..ff764015d --- /dev/null +++ b/tests/ui/debuginfo/debuginfo-emit-llvm-ir-and-split-debuginfo.rs @@ -0,0 +1,8 @@ +// build-pass +// only-linux +// +// compile-flags: -g --emit=llvm-ir -Csplit-debuginfo=unpacked +// +// Make sure that we don't explode with an error if we don't actually end up emitting any `dwo`s, +// as would be the case if we don't actually codegen anything. +#![crate_type="rlib"] diff --git a/tests/ui/debuginfo/debuginfo-type-name-layout-ice-94961-1.rs b/tests/ui/debuginfo/debuginfo-type-name-layout-ice-94961-1.rs new file mode 100644 index 000000000..78bda2848 --- /dev/null +++ b/tests/ui/debuginfo/debuginfo-type-name-layout-ice-94961-1.rs @@ -0,0 +1,16 @@ +// Make sure the compiler does not ICE when trying to generate the debuginfo name of a type that +// causes a layout error. See https://github.com/rust-lang/rust/issues/94961. + +// compile-flags:-C debuginfo=2 +// build-fail +// error-pattern: too big for the current architecture +// normalize-stderr-64bit "18446744073709551615" -> "SIZE" +// normalize-stderr-32bit "4294967295" -> "SIZE" + +#![crate_type = "rlib"] + +pub struct Foo([T; usize::MAX]); + +pub fn foo() -> usize { + std::mem::size_of::>() +} diff --git a/tests/ui/debuginfo/debuginfo-type-name-layout-ice-94961-1.stderr b/tests/ui/debuginfo/debuginfo-type-name-layout-ice-94961-1.stderr new file mode 100644 index 000000000..d5991bcf5 --- /dev/null +++ b/tests/ui/debuginfo/debuginfo-type-name-layout-ice-94961-1.stderr @@ -0,0 +1,4 @@ +error: values of the type `[u8; usize::MAX]` are too big for the current architecture + +error: aborting due to previous error + diff --git a/tests/ui/debuginfo/debuginfo-type-name-layout-ice-94961-2.rs b/tests/ui/debuginfo/debuginfo-type-name-layout-ice-94961-2.rs new file mode 100644 index 000000000..fdc088dc0 --- /dev/null +++ b/tests/ui/debuginfo/debuginfo-type-name-layout-ice-94961-2.rs @@ -0,0 +1,20 @@ +// Make sure the compiler does not ICE when trying to generate the debuginfo name of a type that +// causes a layout error. +// This version of the test already ICE'd before the commit that introduce the ICE described in +// https://github.com/rust-lang/rust/issues/94961. + +// compile-flags:-C debuginfo=2 +// build-fail +// error-pattern: too big for the current architecture +// normalize-stderr-64bit "18446744073709551615" -> "SIZE" +// normalize-stderr-32bit "4294967295" -> "SIZE" + +#![crate_type = "rlib"] + +pub enum Foo { + Bar([T; usize::MAX]), +} + +pub fn foo() -> usize { + std::mem::size_of::>() +} diff --git a/tests/ui/debuginfo/debuginfo-type-name-layout-ice-94961-2.stderr b/tests/ui/debuginfo/debuginfo-type-name-layout-ice-94961-2.stderr new file mode 100644 index 000000000..d5991bcf5 --- /dev/null +++ b/tests/ui/debuginfo/debuginfo-type-name-layout-ice-94961-2.stderr @@ -0,0 +1,4 @@ +error: values of the type `[u8; usize::MAX]` are too big for the current architecture + +error: aborting due to previous error + diff --git a/tests/ui/debuginfo/debuginfo_with_uninhabitable_field_and_unsized.rs b/tests/ui/debuginfo/debuginfo_with_uninhabitable_field_and_unsized.rs new file mode 100644 index 000000000..b3f22ecf5 --- /dev/null +++ b/tests/ui/debuginfo/debuginfo_with_uninhabitable_field_and_unsized.rs @@ -0,0 +1,29 @@ +// build-pass +// compile-flags: -Cdebuginfo=2 +// fixes issue #94149 + +#![allow(dead_code)] + +pub fn main() { + let _ = Foo::::new(); +} + +pub struct Foo { + base: FooBase, + value: T, +} + +impl Foo { + pub fn new() -> Box> { + todo!() + } +} + +pub trait FooTrait {} + +pub struct FooBase { + cls: Bar, +} + +// Bar *must* be a fieldless enum +pub enum Bar {} diff --git a/tests/ui/debuginfo/issue-105386-debuginfo-ub.rs b/tests/ui/debuginfo/issue-105386-debuginfo-ub.rs new file mode 100644 index 000000000..6c6eb5d4e --- /dev/null +++ b/tests/ui/debuginfo/issue-105386-debuginfo-ub.rs @@ -0,0 +1,20 @@ +// run-pass +// compile-flags: --edition 2021 -Copt-level=3 -Cdebuginfo=2 -Zmir-opt-level=3 + +fn main() { + TranslatorI.visit_pre(); +} + +impl TranslatorI { + fn visit_pre(self) { + Some(()) + .map(|_| self.flags()) + .unwrap_or_else(|| self.flags()); + } +} + +struct TranslatorI; + +impl TranslatorI { + fn flags(&self) {} +} diff --git a/tests/ui/debuginfo/late-bound-projection.rs b/tests/ui/debuginfo/late-bound-projection.rs new file mode 100644 index 000000000..601807845 --- /dev/null +++ b/tests/ui/debuginfo/late-bound-projection.rs @@ -0,0 +1,7 @@ +// build-pass +// compile-flags: -Cdebuginfo=2 --crate-type=rlib +// Fixes issue #94998 + +pub trait Trait {} + +pub fn run(_: &dyn FnOnce(&()) -> Box) {} -- cgit v1.2.3