Skip to content

Commit 34bee19

Browse files
committed
Auto merge of rust-lang#111304 - matthiaskrgr:rollup-b9twh7l, r=matthiaskrgr
Rollup of 7 pull requests Successful merges: - rust-lang#111002 (Fix the test directories suggested by `./x.py suggest`) - rust-lang#111077 (Make more ConstProp tests unit.) - rust-lang#111151 (check bootstrap scripts syntax) - rust-lang#111203 (Output LLVM optimization remark kind in `-Cremark` output) - rust-lang#111237 (asm: loongarch64: Implementation of clobber_abi) - rust-lang#111274 (Expand the LLVM coverage of `--print target-cpus`) - rust-lang#111289 (Check arguments length in trivial diagnostic lint) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
2 parents a77c552 + 1de257b commit 34bee19

40 files changed

+264
-127
lines changed

compiler/rustc_codegen_llvm/messages.ftl

+1-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ codegen_llvm_prepare_thin_lto_module_with_llvm_err = failed to prepare thin LTO
8282
codegen_llvm_parse_bitcode = failed to parse bitcode for LTO module
8383
codegen_llvm_parse_bitcode_with_llvm_err = failed to parse bitcode for LTO module: {$llvm_err}
8484
85-
codegen_llvm_from_llvm_optimization_diag = {$filename}:{$line}:{$column} {$pass_name}: {$message}
85+
codegen_llvm_from_llvm_optimization_diag = {$filename}:{$line}:{$column} {$pass_name} ({$kind}): {$message}
8686
codegen_llvm_from_llvm_diag = {$message}
8787
8888
codegen_llvm_write_bytecode = failed to write bytecode to {$path}: {$err}

compiler/rustc_codegen_llvm/src/back/write.rs

+10
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ use rustc_span::symbol::sym;
3131
use rustc_span::InnerSpan;
3232
use rustc_target::spec::{CodeModel, RelocModel, SanitizerSet, SplitDebuginfo};
3333

34+
use crate::llvm::diagnostic::OptimizationDiagnosticKind;
3435
use libc::{c_char, c_int, c_uint, c_void, size_t};
3536
use std::ffi::CString;
3637
use std::fs;
@@ -363,6 +364,15 @@ unsafe extern "C" fn diagnostic_handler(info: &DiagnosticInfo, user: *mut c_void
363364
line: opt.line,
364365
column: opt.column,
365366
pass_name: &opt.pass_name,
367+
kind: match opt.kind {
368+
OptimizationDiagnosticKind::OptimizationRemark => "success",
369+
OptimizationDiagnosticKind::OptimizationMissed
370+
| OptimizationDiagnosticKind::OptimizationFailure => "missed",
371+
OptimizationDiagnosticKind::OptimizationAnalysis
372+
| OptimizationDiagnosticKind::OptimizationAnalysisFPCommute
373+
| OptimizationDiagnosticKind::OptimizationAnalysisAliasing => "analysis",
374+
OptimizationDiagnosticKind::OptimizationRemarkOther => "other",
375+
},
366376
message: &opt.message,
367377
});
368378
}

compiler/rustc_codegen_llvm/src/errors.rs

+1
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@ pub(crate) struct FromLlvmOptimizationDiag<'a> {
196196
pub line: std::ffi::c_uint,
197197
pub column: std::ffi::c_uint,
198198
pub pass_name: &'a str,
199+
pub kind: &'a str,
199200
pub message: &'a str,
200201
}
201202

compiler/rustc_lint/src/internal.rs

+4-2
Original file line numberDiff line numberDiff line change
@@ -478,8 +478,10 @@ impl EarlyLintPass for Diagnostics {
478478
}
479479
if !segments.iter().all(|(name, args)| {
480480
let arg = match name.as_str() {
481-
"struct_span_err" | "span_note" | "span_label" | "span_help" => &args[1],
482-
"note" | "help" => &args[0],
481+
"struct_span_err" | "span_note" | "span_label" | "span_help" if args.len() == 2 => {
482+
&args[1]
483+
}
484+
"note" | "help" if args.len() == 1 => &args[0],
483485
_ => {
484486
return false;
485487
}

compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp

+16-14
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,6 @@ static Reloc::Model fromRust(LLVMRustRelocModel RustReloc) {
297297
report_fatal_error("Bad RelocModel.");
298298
}
299299

300-
#ifdef LLVM_RUSTLLVM
301300
/// getLongestEntryLength - Return the length of the longest entry in the table.
302301
template<typename KV>
303302
static size_t getLongestEntryLength(ArrayRef<KV> Table) {
@@ -312,13 +311,23 @@ extern "C" void LLVMRustPrintTargetCPUs(LLVMTargetMachineRef TM, const char* Tar
312311
const MCSubtargetInfo *MCInfo = Target->getMCSubtargetInfo();
313312
const Triple::ArchType HostArch = Triple(sys::getDefaultTargetTriple()).getArch();
314313
const Triple::ArchType TargetArch = Target->getTargetTriple().getArch();
314+
315+
#if LLVM_VERSION_GE(17, 0)
316+
const ArrayRef<SubtargetSubTypeKV> CPUTable = MCInfo->getAllProcessorDescriptions();
317+
#elif defined(LLVM_RUSTLLVM)
315318
const ArrayRef<SubtargetSubTypeKV> CPUTable = MCInfo->getCPUTable();
319+
#else
320+
printf("Full target CPU help is not supported by this LLVM version.\n\n");
321+
SubtargetSubTypeKV TargetCPUKV = { TargetCPU, {{}}, {{}} };
322+
const ArrayRef<SubtargetSubTypeKV> CPUTable = TargetCPUKV;
323+
#endif
316324
unsigned MaxCPULen = getLongestEntryLength(CPUTable);
317325

318326
printf("Available CPUs for this target:\n");
319327
// Don't print the "native" entry when the user specifies --target with a
320328
// different arch since that could be wrong or misleading.
321329
if (HostArch == TargetArch) {
330+
MaxCPULen = std::max(MaxCPULen, (unsigned) std::strlen("native"));
322331
const StringRef HostCPU = sys::getHostCPUName();
323332
printf(" %-*s - Select the CPU of the current host (currently %.*s).\n",
324333
MaxCPULen, "native", (int)HostCPU.size(), HostCPU.data());
@@ -338,34 +347,27 @@ extern "C" void LLVMRustPrintTargetCPUs(LLVMTargetMachineRef TM, const char* Tar
338347
}
339348

340349
extern "C" size_t LLVMRustGetTargetFeaturesCount(LLVMTargetMachineRef TM) {
350+
#ifdef LLVM_RUSTLLVM
341351
const TargetMachine *Target = unwrap(TM);
342352
const MCSubtargetInfo *MCInfo = Target->getMCSubtargetInfo();
343353
const ArrayRef<SubtargetFeatureKV> FeatTable = MCInfo->getFeatureTable();
344354
return FeatTable.size();
355+
#else
356+
return 0;
357+
#endif
345358
}
346359

347360
extern "C" void LLVMRustGetTargetFeature(LLVMTargetMachineRef TM, size_t Index,
348361
const char** Feature, const char** Desc) {
362+
#ifdef LLVM_RUSTLLVM
349363
const TargetMachine *Target = unwrap(TM);
350364
const MCSubtargetInfo *MCInfo = Target->getMCSubtargetInfo();
351365
const ArrayRef<SubtargetFeatureKV> FeatTable = MCInfo->getFeatureTable();
352366
const SubtargetFeatureKV Feat = FeatTable[Index];
353367
*Feature = Feat.Key;
354368
*Desc = Feat.Desc;
355-
}
356-
357-
#else
358-
359-
extern "C" void LLVMRustPrintTargetCPUs(LLVMTargetMachineRef) {
360-
printf("Target CPU help is not supported by this LLVM version.\n\n");
361-
}
362-
363-
extern "C" size_t LLVMRustGetTargetFeaturesCount(LLVMTargetMachineRef) {
364-
return 0;
365-
}
366-
367-
extern "C" void LLVMRustGetTargetFeature(LLVMTargetMachineRef, const char**, const char**) {}
368369
#endif
370+
}
369371

370372
extern "C" const char* LLVMRustGetHostCPUName(size_t *len) {
371373
StringRef Name = sys::getHostCPUName();

compiler/rustc_target/src/asm/mod.rs

+20
Original file line numberDiff line numberDiff line change
@@ -839,6 +839,7 @@ pub enum InlineAsmClobberAbi {
839839
AArch64,
840840
AArch64NoX18,
841841
RiscV,
842+
LoongArch,
842843
}
843844

844845
impl InlineAsmClobberAbi {
@@ -880,6 +881,10 @@ impl InlineAsmClobberAbi {
880881
"C" | "system" | "efiapi" => Ok(InlineAsmClobberAbi::RiscV),
881882
_ => Err(&["C", "system", "efiapi"]),
882883
},
884+
InlineAsmArch::LoongArch64 => match name {
885+
"C" | "system" | "efiapi" => Ok(InlineAsmClobberAbi::LoongArch),
886+
_ => Err(&["C", "system", "efiapi"]),
887+
},
883888
_ => Err(&[]),
884889
}
885890
}
@@ -1022,6 +1027,21 @@ impl InlineAsmClobberAbi {
10221027
v24, v25, v26, v27, v28, v29, v30, v31,
10231028
}
10241029
},
1030+
InlineAsmClobberAbi::LoongArch => clobbered_regs! {
1031+
LoongArch LoongArchInlineAsmReg {
1032+
// ra
1033+
r1,
1034+
// a0-a7
1035+
r4, r5, r6, r7, r8, r9, r10, r11,
1036+
// t0-t8
1037+
r12, r13, r14, r15, r16, r17, r18, r19, r20,
1038+
// fa0-fa7
1039+
f0, f1, f2, f3, f4, f5, f6, f7,
1040+
// ft0-ft15
1041+
f8, f9, f10, f11, f12, f13, f14, f15,
1042+
f16, f17, f18, f19, f20, f21, f22, f23,
1043+
}
1044+
},
10251045
}
10261046
}
10271047
}

src/tools/suggest-tests/src/static_suggestions.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ static_suggestions! {
1515

1616
"compiler/*" => [
1717
sug!("check"),
18-
sug!("test", 1, ["src/test/ui", "src/test/run-make"])
18+
sug!("test", 1, ["tests/ui", "tests/run-make"])
1919
],
2020

2121
"src/librustdoc/*" => [

src/tools/suggest-tests/src/tests.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ macro_rules! sugg_test {
1212

1313
sugg_test! {
1414
test_error_code_docs: ["compiler/rustc_error_codes/src/error_codes/E0000.md"] =>
15-
["check N/A", "test compiler/rustc_error_codes N/A", "test linkchecker 0", "test src/test/ui src/test/run-make 1"],
15+
["check N/A", "test compiler/rustc_error_codes N/A", "test linkchecker 0", "test tests/ui tests/run-make 1"],
1616

1717
test_rustdoc: ["src/librustdoc/src/lib.rs"] => ["test rustdoc 1"],
1818

tests/mir-opt/const_prop/bad_op_mod_by_zero.main.ConstProp.diff

+12-6
Original file line numberDiff line numberDiff line change
@@ -18,29 +18,35 @@
1818
}
1919

2020
bb0: {
21+
StorageLive(_1); // scope 0 at $DIR/bad_op_mod_by_zero.rs:+1:9: +1:10
2122
_1 = const 0_i32; // scope 0 at $DIR/bad_op_mod_by_zero.rs:+1:13: +1:14
2223
StorageLive(_2); // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:9: +2:11
23-
- _4 = Eq(_1, const 0_i32); // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
24+
StorageLive(_3); // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:18: +2:19
25+
- _3 = _1; // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:18: +2:19
26+
- _4 = Eq(_3, const 0_i32); // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
2427
- assert(!move _4, "attempt to calculate the remainder of `{}` with a divisor of zero", const 1_i32) -> bb1; // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
28+
+ _3 = const 0_i32; // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:18: +2:19
2529
+ _4 = const true; // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
2630
+ assert(!const true, "attempt to calculate the remainder of `{}` with a divisor of zero", const 1_i32) -> bb1; // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
2731
}
2832

2933
bb1: {
30-
- _5 = Eq(_1, const -1_i32); // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
34+
- _5 = Eq(_3, const -1_i32); // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
3135
- _6 = Eq(const 1_i32, const i32::MIN); // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
3236
- _7 = BitAnd(move _5, move _6); // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
33-
- assert(!move _7, "attempt to compute the remainder of `{} % {}`, which would overflow", const 1_i32, _1) -> bb2; // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
37+
- assert(!move _7, "attempt to compute the remainder of `{} % {}`, which would overflow", const 1_i32, _3) -> bb2; // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
3438
+ _5 = const false; // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
3539
+ _6 = const false; // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
3640
+ _7 = const false; // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
37-
+ assert(!const false, "attempt to compute the remainder of `{} % {}`, which would overflow", const 1_i32, const 0_i32) -> bb2; // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
41+
+ assert(!const false, "attempt to compute the remainder of `{} % {}`, which would overflow", const 1_i32, _3) -> bb2; // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
3842
}
3943

4044
bb2: {
41-
- _2 = Rem(const 1_i32, _1); // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
42-
+ _2 = Rem(const 1_i32, const 0_i32); // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
45+
_2 = Rem(const 1_i32, move _3); // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:14: +2:19
46+
StorageDead(_3); // scope 1 at $DIR/bad_op_mod_by_zero.rs:+2:18: +2:19
47+
_0 = const (); // scope 0 at $DIR/bad_op_mod_by_zero.rs:+0:11: +3:2
4348
StorageDead(_2); // scope 1 at $DIR/bad_op_mod_by_zero.rs:+3:1: +3:2
49+
StorageDead(_1); // scope 0 at $DIR/bad_op_mod_by_zero.rs:+3:1: +3:2
4450
return; // scope 0 at $DIR/bad_op_mod_by_zero.rs:+3:2: +3:2
4551
}
4652
}

tests/mir-opt/const_prop/bad_op_mod_by_zero.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
// unit-test: ConstProp
12
// ignore-wasm32 compiled with panic=abort by default
23
// EMIT_MIR bad_op_mod_by_zero.main.ConstProp.diff
34
#[allow(unconditional_panic)]

tests/mir-opt/const_prop/bad_op_unsafe_oob_for_slices.main.ConstProp.32bit.diff

+25-20
Original file line numberDiff line numberDiff line change
@@ -6,44 +6,49 @@
66
let _1: *const [i32]; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:9: +1:10
77
let mut _2: *const [i32; 3]; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
88
let _3: &[i32; 3]; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
9-
let _5: usize; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:23: +3:24
10-
let mut _6: usize; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
11-
let mut _7: bool; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
12-
let mut _8: &[i32; 3]; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
9+
let _4: [i32; 3]; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:26: +1:35
10+
let _6: usize; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:23: +3:24
11+
let mut _7: usize; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
12+
let mut _8: bool; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
13+
let mut _9: &[i32; 3]; // in scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
1314
scope 1 {
1415
debug a => _1; // in scope 1 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:9: +1:10
1516
scope 2 {
16-
let _4: i32; // in scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:13: +3:15
17+
let _5: i32; // in scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:13: +3:15
1718
scope 3 {
18-
debug _b => _4; // in scope 3 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:13: +3:15
19+
debug _b => _5; // in scope 3 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:13: +3:15
1920
}
2021
}
2122
}
2223

2324
bb0: {
2425
StorageLive(_1); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:9: +1:10
2526
StorageLive(_2); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
26-
_8 = const _; // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
27+
StorageLive(_3); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
28+
_9 = const _; // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
2729
// mir::Constant
28-
// + span: $DIR/bad_op_unsafe_oob_for_slices.rs:6:25: 6:35
30+
// + span: $DIR/bad_op_unsafe_oob_for_slices.rs:9:25: 9:35
2931
// + literal: Const { ty: &[i32; 3], val: Unevaluated(main, [], Some(promoted[0])) }
30-
_2 = &raw const (*_8); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
32+
_3 = &(*_9); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
33+
_2 = &raw const (*_3); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
3134
_1 = move _2 as *const [i32] (Pointer(Unsize)); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:25: +1:35
3235
StorageDead(_2); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:34: +1:35
33-
StorageLive(_4); // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:13: +3:15
34-
StorageLive(_5); // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:23: +3:24
35-
_5 = const 3_usize; // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:23: +3:24
36-
_6 = const 3_usize; // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
37-
- _7 = Lt(_5, _6); // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
38-
- assert(move _7, "index out of bounds: the length is {} but the index is {}", move _6, _5) -> bb1; // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
39-
+ _7 = const false; // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
40-
+ assert(const false, "index out of bounds: the length is {} but the index is {}", const 3_usize, const 3_usize) -> bb1; // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
36+
StorageDead(_3); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+1:35: +1:36
37+
StorageLive(_5); // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:13: +3:15
38+
StorageLive(_6); // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:23: +3:24
39+
_6 = const 3_usize; // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:23: +3:24
40+
_7 = const 3_usize; // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
41+
- _8 = Lt(_6, _7); // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
42+
- assert(move _8, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> bb1; // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
43+
+ _8 = const false; // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
44+
+ assert(const false, "index out of bounds: the length is {} but the index is {}", move _7, _6) -> bb1; // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
4145
}
4246

4347
bb1: {
44-
_4 = (*_1)[_5]; // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
45-
StorageDead(_5); // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:25: +3:26
46-
StorageDead(_4); // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+4:5: +4:6
48+
_5 = (*_1)[_6]; // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:18: +3:25
49+
StorageDead(_6); // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+3:25: +3:26
50+
_0 = const (); // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+2:5: +4:6
51+
StorageDead(_5); // scope 2 at $DIR/bad_op_unsafe_oob_for_slices.rs:+4:5: +4:6
4752
StorageDead(_1); // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+5:1: +5:2
4853
return; // scope 0 at $DIR/bad_op_unsafe_oob_for_slices.rs:+5:2: +5:2
4954
}

0 commit comments

Comments
 (0)