Merge from rustc
This commit is contained in:
commit
cf4be3f39d
157 changed files with 1959 additions and 605 deletions
|
|
@ -700,7 +700,7 @@ trait Merge {
|
|||
impl Merge for TomlConfig {
|
||||
fn merge(
|
||||
&mut self,
|
||||
TomlConfig { build, install, llvm, rust, dist, target, profile: _, change_id }: Self,
|
||||
TomlConfig { build, install, llvm, rust, dist, target, profile, change_id }: Self,
|
||||
replace: ReplaceOpt,
|
||||
) {
|
||||
fn do_merge<T: Merge>(x: &mut Option<T>, y: Option<T>, replace: ReplaceOpt) {
|
||||
|
|
@ -712,7 +712,10 @@ impl Merge for TomlConfig {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
self.change_id.inner.merge(change_id.inner, replace);
|
||||
self.profile.merge(profile, replace);
|
||||
|
||||
do_merge(&mut self.build, build, replace);
|
||||
do_merge(&mut self.install, install, replace);
|
||||
do_merge(&mut self.llvm, llvm, replace);
|
||||
|
|
@ -1505,6 +1508,10 @@ impl Config {
|
|||
build.cargo = build.cargo.take().or(std::env::var_os("CARGO").map(|p| p.into()));
|
||||
}
|
||||
|
||||
if GitInfo::new(false, &config.src).is_from_tarball() && toml.profile.is_none() {
|
||||
toml.profile = Some("dist".into());
|
||||
}
|
||||
|
||||
if let Some(include) = &toml.profile {
|
||||
// Allows creating alias for profile names, allowing
|
||||
// profiles to be renamed while maintaining back compatibility
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
set -euo pipefail
|
||||
|
||||
LINUX_VERSION=v6.13-rc1
|
||||
LINUX_VERSION=50e57739141b41f731ab31f8380821c7969f9dc4
|
||||
|
||||
# Build rustc, rustdoc, cargo, clippy-driver and rustfmt
|
||||
../x.py build --stage 2 library rustdoc clippy rustfmt
|
||||
|
|
@ -28,7 +28,7 @@ rm -rf linux || true
|
|||
# Download Linux at a specific commit
|
||||
mkdir -p linux
|
||||
git -C linux init
|
||||
git -C linux remote add origin https://github.com/Rust-for-Linux/linux.git
|
||||
git -C linux remote add origin https://github.com/Darksonn/linux.git
|
||||
git -C linux fetch --depth 1 origin ${LINUX_VERSION}
|
||||
git -C linux checkout FETCH_HEAD
|
||||
|
||||
|
|
|
|||
|
|
@ -558,7 +558,7 @@ auto:
|
|||
SCRIPT: python x.py build --set rust.debug=true opt-dist && PGO_HOST=x86_64-pc-windows-msvc ./build/x86_64-pc-windows-msvc/stage0-tools-bin/opt-dist windows-ci -- python x.py dist bootstrap --include-default-paths
|
||||
DIST_REQUIRE_ALL_TOOLS: 1
|
||||
CODEGEN_BACKENDS: llvm,cranelift
|
||||
<<: *job-windows-8c
|
||||
<<: *job-windows-25-8c
|
||||
|
||||
- name: dist-i686-msvc
|
||||
env:
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit fa312a343fbff01bc6cef393e326817f70719813
|
||||
Subproject commit e2fa4316c5a7c0d2499c5d6b799adcfad6ef7a45
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 4ed5a1a4a2a7ecc2e529a5baaef04f7bc7917eda
|
||||
Subproject commit f56aecc3b036dff16404b525a83b00f911b9bbea
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit bc2298865544695c63454fc1f9f98a3dc22e9948
|
||||
Subproject commit 336f75835a6c0514852cc65aba9a698b699b13c8
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 93b921c7d3213d38d920f7f905a3bec093d2217d
|
||||
Subproject commit 4249fb411dd27f945e2881eb0378044b94cee06f
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 054259ed1bf01cdee4309ee764c7e103f6df3de5
|
||||
Subproject commit 743766929f1e53e72fab74394ae259bbfb4a7619
|
||||
|
|
@ -34,9 +34,9 @@ target | notes
|
|||
-------|-------
|
||||
[`aarch64-apple-darwin`](platform-support/apple-darwin.md) | ARM64 macOS (11.0+, Big Sur+)
|
||||
`aarch64-unknown-linux-gnu` | ARM64 Linux (kernel 4.1, glibc 2.17+)
|
||||
`i686-pc-windows-gnu` | 32-bit MinGW (Windows 10+, Windows Server 2016+) [^x86_32-floats-return-ABI]
|
||||
`i686-pc-windows-msvc` | 32-bit MSVC (Windows 10+, Windows Server 2016+) [^x86_32-floats-return-ABI]
|
||||
`i686-unknown-linux-gnu` | 32-bit Linux (kernel 3.2+, glibc 2.17+) [^x86_32-floats-return-ABI]
|
||||
`i686-pc-windows-gnu` | 32-bit MinGW (Windows 10+, Windows Server 2016+, Pentium 4) [^x86_32-floats-return-ABI]
|
||||
`i686-pc-windows-msvc` | 32-bit MSVC (Windows 10+, Windows Server 2016+, Pentium 4) [^x86_32-floats-return-ABI]
|
||||
`i686-unknown-linux-gnu` | 32-bit Linux (kernel 3.2+, glibc 2.17+, Pentium 4) [^x86_32-floats-return-ABI]
|
||||
[`x86_64-apple-darwin`](platform-support/apple-darwin.md) | 64-bit macOS (10.12+, Sierra+)
|
||||
`x86_64-pc-windows-gnu` | 64-bit MinGW (Windows 10+, Windows Server 2016+)
|
||||
`x86_64-pc-windows-msvc` | 64-bit MSVC (Windows 10+, Windows Server 2016+)
|
||||
|
|
@ -162,14 +162,14 @@ target | std | notes
|
|||
[`armv7a-none-eabi`](platform-support/arm-none-eabi.md) | * | Bare Armv7-A
|
||||
[`armv7r-none-eabi`](platform-support/armv7r-none-eabi.md) | * | Bare Armv7-R
|
||||
[`armv7r-none-eabihf`](platform-support/armv7r-none-eabi.md) | * | Bare Armv7-R, hardfloat
|
||||
`i586-pc-windows-msvc` | * | 32-bit Windows w/o SSE [^x86_32-floats-x87]
|
||||
`i586-unknown-linux-gnu` | ✓ | 32-bit Linux w/o SSE (kernel 3.2, glibc 2.17) [^x86_32-floats-x87]
|
||||
`i586-unknown-linux-musl` | ✓ | 32-bit Linux w/o SSE, musl 1.2.3 [^x86_32-floats-x87]
|
||||
[`i686-linux-android`](platform-support/android.md) | ✓ | 32-bit x86 Android [^x86_32-floats-return-ABI]
|
||||
[`i686-pc-windows-gnullvm`](platform-support/pc-windows-gnullvm.md) | ✓ | 32-bit x86 MinGW (Windows 10+), LLVM ABI [^x86_32-floats-return-ABI]
|
||||
[`i686-unknown-freebsd`](platform-support/freebsd.md) | ✓ | 32-bit x86 FreeBSD [^x86_32-floats-return-ABI]
|
||||
`i686-unknown-linux-musl` | ✓ | 32-bit Linux with musl 1.2.3 [^x86_32-floats-return-ABI]
|
||||
[`i686-unknown-uefi`](platform-support/unknown-uefi.md) | ? | 32-bit UEFI
|
||||
`i586-pc-windows-msvc` | * | 32-bit Windows (original Pentium) [^x86_32-floats-x87]
|
||||
`i586-unknown-linux-gnu` | ✓ | 32-bit Linux (kernel 3.2, glibc 2.17, original Pentium) [^x86_32-floats-x87]
|
||||
`i586-unknown-linux-musl` | ✓ | 32-bit Linux (musl 1.2.3, original Pentium) [^x86_32-floats-x87]
|
||||
[`i686-linux-android`](platform-support/android.md) | ✓ | 32-bit x86 Android ([PentiumPro with SSE](https://developer.android.com/ndk/guides/abis.html#x86)) [^x86_32-floats-return-ABI]
|
||||
[`i686-pc-windows-gnullvm`](platform-support/pc-windows-gnullvm.md) | ✓ | 32-bit x86 MinGW (Windows 10+, Pentium 4), LLVM ABI [^x86_32-floats-return-ABI]
|
||||
[`i686-unknown-freebsd`](platform-support/freebsd.md) | ✓ | 32-bit x86 FreeBSD (Pentium 4) [^x86_32-floats-return-ABI]
|
||||
`i686-unknown-linux-musl` | ✓ | 32-bit Linux with musl 1.2.3 (Pentium 4) [^x86_32-floats-return-ABI]
|
||||
[`i686-unknown-uefi`](platform-support/unknown-uefi.md) | ? (Pentium 4, softfloat) | 32-bit UEFI
|
||||
[`loongarch64-unknown-none`](platform-support/loongarch-none.md) | * | LoongArch64 Bare-metal (LP64D ABI)
|
||||
[`loongarch64-unknown-none-softfloat`](platform-support/loongarch-none.md) | * | LoongArch64 Bare-metal (LP64S ABI)
|
||||
[`nvptx64-nvidia-cuda`](platform-support/nvptx64-nvidia-cuda.md) | * | --emit=asm generates PTX code that [runs on NVIDIA GPUs]
|
||||
|
|
@ -307,15 +307,15 @@ target | std | host | notes
|
|||
`csky-unknown-linux-gnuabiv2hf` | ✓ | | C-SKY abiv2 Linux, hardfloat (little endian)
|
||||
[`hexagon-unknown-linux-musl`](platform-support/hexagon-unknown-linux-musl.md) | ✓ | | Hexagon Linux with musl 1.2.3
|
||||
[`hexagon-unknown-none-elf`](platform-support/hexagon-unknown-none-elf.md)| * | | Bare Hexagon (v60+, HVX)
|
||||
[`i386-apple-ios`](platform-support/apple-ios.md) | ✓ | | 32-bit x86 iOS [^x86_32-floats-return-ABI]
|
||||
[`i586-pc-nto-qnx700`](platform-support/nto-qnx.md) | * | | 32-bit x86 QNX Neutrino 7.0 RTOS [^x86_32-floats-return-ABI]
|
||||
[`i586-unknown-netbsd`](platform-support/netbsd.md) | ✓ | | 32-bit x86, restricted to Pentium
|
||||
[`i686-apple-darwin`](platform-support/apple-darwin.md) | ✓ | ✓ | 32-bit macOS (10.12+, Sierra+) [^x86_32-floats-return-ABI]
|
||||
`i686-unknown-haiku` | ✓ | ✓ | 32-bit Haiku [^x86_32-floats-return-ABI]
|
||||
[`i686-unknown-hurd-gnu`](platform-support/hurd.md) | ✓ | ✓ | 32-bit GNU/Hurd [^x86_32-floats-return-ABI]
|
||||
[`i686-unknown-netbsd`](platform-support/netbsd.md) | ✓ | ✓ | NetBSD/i386 with SSE2 [^x86_32-floats-return-ABI]
|
||||
[`i686-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | 32-bit OpenBSD [^x86_32-floats-return-ABI]
|
||||
[`i686-unknown-redox`](platform-support/redox.md) | ✓ | | i686 Redox OS
|
||||
[`i386-apple-ios`](platform-support/apple-ios.md) | ✓ | | 32-bit x86 iOS (Penryn) [^x86_32-floats-return-ABI]
|
||||
[`i586-pc-nto-qnx700`](platform-support/nto-qnx.md) | * | | 32-bit x86 QNX Neutrino 7.0 RTOS (Pentium 4) [^x86_32-floats-return-ABI]
|
||||
[`i586-unknown-netbsd`](platform-support/netbsd.md) | ✓ | | 32-bit x86 (original Pentium) [^x86_32-floats-x87]
|
||||
[`i686-apple-darwin`](platform-support/apple-darwin.md) | ✓ | ✓ | 32-bit macOS (10.12+, Sierra+, Penryn) [^x86_32-floats-return-ABI]
|
||||
`i686-unknown-haiku` | ✓ | ✓ | 32-bit Haiku (Pentium 4) [^x86_32-floats-return-ABI]
|
||||
[`i686-unknown-hurd-gnu`](platform-support/hurd.md) | ✓ | ✓ | 32-bit GNU/Hurd (PentiumPro) [^x86_32-floats-x87]
|
||||
[`i686-unknown-netbsd`](platform-support/netbsd.md) | ✓ | ✓ | NetBSD/i386 (Pentium 4) [^x86_32-floats-return-ABI]
|
||||
[`i686-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | 32-bit OpenBSD (Pentium 4) [^x86_32-floats-return-ABI]
|
||||
[`i686-unknown-redox`](platform-support/redox.md) | ✓ | | i686 Redox OS (PentiumPro) [^x86_32-floats-x87]
|
||||
`i686-uwp-windows-gnu` | ✓ | | [^x86_32-floats-return-ABI]
|
||||
[`i686-uwp-windows-msvc`](platform-support/uwp-windows-msvc.md) | ✓ | | [^x86_32-floats-return-ABI]
|
||||
[`i686-win7-windows-gnu`](platform-support/win7-windows-gnu.md) | ✓ | | 32-bit Windows 7 support [^x86_32-floats-return-ABI]
|
||||
|
|
|
|||
|
|
@ -1104,17 +1104,29 @@ fn clean_args_from_types_and_names<'tcx>(
|
|||
types: &[hir::Ty<'tcx>],
|
||||
names: &[Ident],
|
||||
) -> Arguments {
|
||||
fn nonempty_name(ident: &Ident) -> Option<Symbol> {
|
||||
if ident.name == kw::Underscore || ident.name == kw::Empty {
|
||||
None
|
||||
} else {
|
||||
Some(ident.name)
|
||||
}
|
||||
}
|
||||
|
||||
// If at least one argument has a name, use `_` as the name of unnamed
|
||||
// arguments. Otherwise omit argument names.
|
||||
let default_name = if names.iter().any(|ident| nonempty_name(ident).is_some()) {
|
||||
kw::Underscore
|
||||
} else {
|
||||
kw::Empty
|
||||
};
|
||||
|
||||
Arguments {
|
||||
values: types
|
||||
.iter()
|
||||
.enumerate()
|
||||
.map(|(i, ty)| Argument {
|
||||
type_: clean_ty(ty, cx),
|
||||
name: names
|
||||
.get(i)
|
||||
.map(|ident| ident.name)
|
||||
.filter(|ident| !ident.is_empty())
|
||||
.unwrap_or(kw::Underscore),
|
||||
name: names.get(i).and_then(nonempty_name).unwrap_or(default_name),
|
||||
is_const: false,
|
||||
})
|
||||
.collect(),
|
||||
|
|
|
|||
|
|
@ -9,8 +9,8 @@ use rustc_data_structures::fx::FxIndexMap;
|
|||
use rustc_errors::DiagCtxtHandle;
|
||||
use rustc_session::config::{
|
||||
self, CodegenOptions, CrateType, ErrorOutputType, Externs, Input, JsonUnusedExterns,
|
||||
UnstableOptions, get_cmd_lint_options, nightly_options, parse_crate_types_from_list,
|
||||
parse_externs, parse_target_triple,
|
||||
OptionsTargetModifiers, UnstableOptions, get_cmd_lint_options, nightly_options,
|
||||
parse_crate_types_from_list, parse_externs, parse_target_triple,
|
||||
};
|
||||
use rustc_session::lint::Level;
|
||||
use rustc_session::search_paths::SearchPath;
|
||||
|
|
@ -389,8 +389,9 @@ impl Options {
|
|||
config::parse_error_format(early_dcx, matches, color, json_color, json_rendered);
|
||||
let diagnostic_width = matches.opt_get("diagnostic-width").unwrap_or_default();
|
||||
|
||||
let codegen_options = CodegenOptions::build(early_dcx, matches);
|
||||
let unstable_opts = UnstableOptions::build(early_dcx, matches);
|
||||
let mut target_modifiers = BTreeMap::<OptionsTargetModifiers, String>::new();
|
||||
let codegen_options = CodegenOptions::build(early_dcx, matches, &mut target_modifiers);
|
||||
let unstable_opts = UnstableOptions::build(early_dcx, matches, &mut target_modifiers);
|
||||
|
||||
let remap_path_prefix = match parse_remap_path_prefix(matches) {
|
||||
Ok(prefix_mappings) => prefix_mappings,
|
||||
|
|
|
|||
|
|
@ -1408,7 +1408,9 @@ impl clean::Arguments {
|
|||
) -> impl Display + 'a + Captures<'tcx> {
|
||||
fmt::from_fn(move |f| {
|
||||
for (i, input) in self.values.iter().enumerate() {
|
||||
write!(f, "{}: ", input.name)?;
|
||||
if !input.name.is_empty() {
|
||||
write!(f, "{}: ", input.name)?;
|
||||
}
|
||||
input.type_.print(cx).fmt(f)?;
|
||||
if i + 1 < self.values.len() {
|
||||
write!(f, ", ")?;
|
||||
|
|
|
|||
|
|
@ -882,14 +882,6 @@ fn iter_header(
|
|||
}
|
||||
let ln = ln.trim();
|
||||
|
||||
// Assume that any directives will be found before the first module or function. This
|
||||
// doesn't seem to be an optimization with a warm page cache. Maybe with a cold one.
|
||||
// FIXME(jieyouxu): this will cause `//@` directives in the rest of the test file to
|
||||
// not be checked.
|
||||
if ln.starts_with("fn") || ln.starts_with("mod") {
|
||||
return;
|
||||
}
|
||||
|
||||
let Some(directive_line) = line_directive(line_number, comment, ln) else {
|
||||
continue;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1417,9 +1417,7 @@ impl<'test> TestCx<'test> {
|
|||
}
|
||||
|
||||
fn is_rustdoc(&self) -> bool {
|
||||
self.config.src_base.ends_with("rustdoc-ui")
|
||||
|| self.config.src_base.ends_with("rustdoc-js")
|
||||
|| self.config.src_base.ends_with("rustdoc-json")
|
||||
matches!(self.config.suite.as_str(), "rustdoc-ui" | "rustdoc-js" | "rustdoc-json")
|
||||
}
|
||||
|
||||
fn get_mir_dump_dir(&self) -> PathBuf {
|
||||
|
|
|
|||
|
|
@ -16,13 +16,12 @@ impl TestCx<'_> {
|
|||
self.fatal_proc_rec("rustdoc failed!", &proc_res);
|
||||
}
|
||||
|
||||
let root = self.config.find_rust_src_root().unwrap();
|
||||
let mut json_out = out_dir.join(self.testpaths.file.file_stem().unwrap());
|
||||
json_out.set_extension("json");
|
||||
let res = self.run_command_to_procres(
|
||||
Command::new(self.config.jsondocck_path.as_ref().unwrap())
|
||||
.arg("--doc-dir")
|
||||
.arg(root.join(&out_dir))
|
||||
.arg(&out_dir)
|
||||
.arg("--template")
|
||||
.arg(&self.testpaths.file),
|
||||
);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
fn main() {
|
||||
unsafe {
|
||||
(&1_u8 as *const u8).offset_from(&2_u8); //~ERROR: not both derived from the same allocation
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
error: Undefined Behavior: `ptr_offset_from` called on two different pointers that are not both derived from the same allocation
|
||||
--> tests/fail/intrinsics/ptr_offset_from_different_allocs.rs:LL:CC
|
||||
|
|
||||
LL | (&1_u8 as *const u8).offset_from(&2_u8);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `ptr_offset_from` called on two different pointers that are not both derived from the same allocation
|
||||
|
|
||||
= help: this indicates a bug in the program: it performed an invalid operation, and caused Undefined Behavior
|
||||
= help: see https://doc.rust-lang.org/nightly/reference/behavior-considered-undefined.html for further information
|
||||
= note: BACKTRACE:
|
||||
= note: inside `main` at tests/fail/intrinsics/ptr_offset_from_different_allocs.rs:LL:CC
|
||||
|
||||
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
|
@ -15,6 +15,6 @@ fn main() {
|
|||
let _ = p1.byte_offset_from(p1);
|
||||
|
||||
// UB because different pointers.
|
||||
let _ = p1.byte_offset_from(p2); //~ERROR: no provenance
|
||||
let _ = p1.byte_offset_from(p2); //~ERROR: not both derived from the same allocation
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
error: Undefined Behavior: out-of-bounds `offset_from` origin: expected a pointer to the end of 1 byte of memory, but got 0xb[noalloc] which is a dangling pointer (it has no provenance)
|
||||
error: Undefined Behavior: `ptr_offset_from` called on two different pointers that are not both derived from the same allocation
|
||||
--> tests/fail/intrinsics/ptr_offset_from_different_ints.rs:LL:CC
|
||||
|
|
||||
LL | let _ = p1.byte_offset_from(p2);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ out-of-bounds `offset_from` origin: expected a pointer to the end of 1 byte of memory, but got 0xb[noalloc] which is a dangling pointer (it has no provenance)
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ `ptr_offset_from` called on two different pointers that are not both derived from the same allocation
|
||||
|
|
||||
= help: this indicates a bug in the program: it performed an invalid operation, and caused Undefined Behavior
|
||||
= help: see https://doc.rust-lang.org/nightly/reference/behavior-considered-undefined.html for further information
|
||||
|
|
|
|||
|
|
@ -0,0 +1,7 @@
|
|||
fn main() {
|
||||
let mem = [0u8; 1];
|
||||
let ptr = mem.as_ptr();
|
||||
unsafe {
|
||||
ptr.wrapping_add(4).offset_from(ptr); //~ERROR: the memory range between them is not in-bounds of an allocation
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
error: Undefined Behavior: `ptr_offset_from` called on two different pointers where the memory range between them is not in-bounds of an allocation
|
||||
--> tests/fail/intrinsics/ptr_offset_from_oob.rs:LL:CC
|
||||
|
|
||||
LL | ptr.wrapping_add(4).offset_from(ptr);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `ptr_offset_from` called on two different pointers where the memory range between them is not in-bounds of an allocation
|
||||
|
|
||||
= help: this indicates a bug in the program: it performed an invalid operation, and caused Undefined Behavior
|
||||
= help: see https://doc.rust-lang.org/nightly/reference/behavior-considered-undefined.html for further information
|
||||
= note: BACKTRACE:
|
||||
= note: inside `main` at tests/fail/intrinsics/ptr_offset_from_oob.rs:LL:CC
|
||||
|
||||
note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
|
@ -3146,7 +3146,6 @@ ui/nll/issue-97997.rs
|
|||
ui/nll/issue-98170.rs
|
||||
ui/nll/issue-98589-closures-relate-named-regions.rs
|
||||
ui/nll/issue-98693.rs
|
||||
ui/nll/polonius/issue-46589.rs
|
||||
ui/nll/relate_tys/issue-48071.rs
|
||||
ui/nll/ty-outlives/issue-53789-1.rs
|
||||
ui/nll/ty-outlives/issue-53789-2.rs
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue