Skip to content

Commit a2ce962

Browse files
committed
Auto merge of #2281 - RalfJung:rustup, r=RalfJung
Rustup Fix our stacktrace after rust-lang/rust#98549. Now we can control whether `caller_location` should be pruned!
2 parents 29b1cc7 + f389d46 commit a2ce962

13 files changed

+110
-79
lines changed

rust-version

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
7f08d04d60d03e1a52dae61ce6aa50996898702b
1+
493c960a3e6cdd2e2fbe8b6ea130fadea05f1ab0

src/diagnostics.rs

+7
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@ fn prune_stacktrace<'mir, 'tcx>(
9696
) -> (Vec<FrameInfo<'tcx>>, bool) {
9797
match ecx.machine.backtrace_style {
9898
BacktraceStyle::Off => {
99+
// Remove all frames marked with `caller_location` -- that attribute indicates we
100+
// usually want to point at the caller, not them.
101+
stacktrace.retain(|frame| !frame.instance.def.requires_caller_location(*ecx.tcx));
99102
// Retain one frame so that we can print a span for the error itself
100103
stacktrace.truncate(1);
101104
(stacktrace, false)
@@ -107,6 +110,10 @@ fn prune_stacktrace<'mir, 'tcx>(
107110
// bug in the Rust runtime, we don't prune away every frame.
108111
let has_local_frame = stacktrace.iter().any(|frame| ecx.machine.is_local(frame));
109112
if has_local_frame {
113+
// Remove all frames marked with `caller_location` -- that attribute indicates we
114+
// usually want to point at the caller, not them.
115+
stacktrace.retain(|frame| !frame.instance.def.requires_caller_location(*ecx.tcx));
116+
110117
// This is part of the logic that `std` uses to select the relevant part of a
111118
// backtrace. But here, we only look for __rust_begin_short_backtrace, not
112119
// __rust_end_short_backtrace because the end symbol comes from a call to the default

src/shims/intrinsics.rs

+61-61
Original file line numberDiff line numberDiff line change
@@ -864,95 +864,95 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
864864
}
865865

866866
// Atomic operations
867-
"atomic_load" => this.atomic_load(args, dest, AtomicReadOp::SeqCst)?,
867+
"atomic_load_seqcst" => this.atomic_load(args, dest, AtomicReadOp::SeqCst)?,
868868
"atomic_load_relaxed" => this.atomic_load(args, dest, AtomicReadOp::Relaxed)?,
869-
"atomic_load_acq" => this.atomic_load(args, dest, AtomicReadOp::Acquire)?,
869+
"atomic_load_acquire" => this.atomic_load(args, dest, AtomicReadOp::Acquire)?,
870870

871-
"atomic_store" => this.atomic_store(args, AtomicWriteOp::SeqCst)?,
871+
"atomic_store_seqcst" => this.atomic_store(args, AtomicWriteOp::SeqCst)?,
872872
"atomic_store_relaxed" => this.atomic_store(args, AtomicWriteOp::Relaxed)?,
873-
"atomic_store_rel" => this.atomic_store(args, AtomicWriteOp::Release)?,
873+
"atomic_store_release" => this.atomic_store(args, AtomicWriteOp::Release)?,
874874

875-
"atomic_fence_acq" => this.atomic_fence(args, AtomicFenceOp::Acquire)?,
876-
"atomic_fence_rel" => this.atomic_fence(args, AtomicFenceOp::Release)?,
875+
"atomic_fence_acquire" => this.atomic_fence(args, AtomicFenceOp::Acquire)?,
876+
"atomic_fence_release" => this.atomic_fence(args, AtomicFenceOp::Release)?,
877877
"atomic_fence_acqrel" => this.atomic_fence(args, AtomicFenceOp::AcqRel)?,
878-
"atomic_fence" => this.atomic_fence(args, AtomicFenceOp::SeqCst)?,
878+
"atomic_fence_seqcst" => this.atomic_fence(args, AtomicFenceOp::SeqCst)?,
879879

880-
"atomic_singlethreadfence_acq" => this.compiler_fence(args, AtomicFenceOp::Acquire)?,
881-
"atomic_singlethreadfence_rel" => this.compiler_fence(args, AtomicFenceOp::Release)?,
880+
"atomic_singlethreadfence_acquire" => this.compiler_fence(args, AtomicFenceOp::Acquire)?,
881+
"atomic_singlethreadfence_release" => this.compiler_fence(args, AtomicFenceOp::Release)?,
882882
"atomic_singlethreadfence_acqrel" =>
883883
this.compiler_fence(args, AtomicFenceOp::AcqRel)?,
884-
"atomic_singlethreadfence" => this.compiler_fence(args, AtomicFenceOp::SeqCst)?,
884+
"atomic_singlethreadfence_seqcst" => this.compiler_fence(args, AtomicFenceOp::SeqCst)?,
885885

886-
"atomic_xchg" => this.atomic_exchange(args, dest, AtomicRwOp::SeqCst)?,
887-
"atomic_xchg_acq" => this.atomic_exchange(args, dest, AtomicRwOp::Acquire)?,
888-
"atomic_xchg_rel" => this.atomic_exchange(args, dest, AtomicRwOp::Release)?,
886+
"atomic_xchg_seqcst" => this.atomic_exchange(args, dest, AtomicRwOp::SeqCst)?,
887+
"atomic_xchg_acquire" => this.atomic_exchange(args, dest, AtomicRwOp::Acquire)?,
888+
"atomic_xchg_release" => this.atomic_exchange(args, dest, AtomicRwOp::Release)?,
889889
"atomic_xchg_acqrel" => this.atomic_exchange(args, dest, AtomicRwOp::AcqRel)?,
890890
"atomic_xchg_relaxed" => this.atomic_exchange(args, dest, AtomicRwOp::Relaxed)?,
891891

892892
#[rustfmt::skip]
893-
"atomic_cxchg" =>
893+
"atomic_cxchg_seqcst_seqcst" =>
894894
this.atomic_compare_exchange(args, dest, AtomicRwOp::SeqCst, AtomicReadOp::SeqCst)?,
895895
#[rustfmt::skip]
896-
"atomic_cxchg_acq" =>
896+
"atomic_cxchg_acquire_acquire" =>
897897
this.atomic_compare_exchange(args, dest, AtomicRwOp::Acquire, AtomicReadOp::Acquire)?,
898898
#[rustfmt::skip]
899-
"atomic_cxchg_rel" =>
899+
"atomic_cxchg_release_relaxed" =>
900900
this.atomic_compare_exchange(args, dest, AtomicRwOp::Release, AtomicReadOp::Relaxed)?,
901901
#[rustfmt::skip]
902-
"atomic_cxchg_acqrel" =>
902+
"atomic_cxchg_acqrel_acquire" =>
903903
this.atomic_compare_exchange(args, dest, AtomicRwOp::AcqRel, AtomicReadOp::Acquire)?,
904904
#[rustfmt::skip]
905-
"atomic_cxchg_relaxed" =>
905+
"atomic_cxchg_relaxed_relaxed" =>
906906
this.atomic_compare_exchange(args, dest, AtomicRwOp::Relaxed, AtomicReadOp::Relaxed)?,
907907
#[rustfmt::skip]
908-
"atomic_cxchg_acq_failrelaxed" =>
908+
"atomic_cxchg_acquire_relaxed" =>
909909
this.atomic_compare_exchange(args, dest, AtomicRwOp::Acquire, AtomicReadOp::Relaxed)?,
910910
#[rustfmt::skip]
911-
"atomic_cxchg_acqrel_failrelaxed" =>
911+
"atomic_cxchg_acqrel_relaxed" =>
912912
this.atomic_compare_exchange(args, dest, AtomicRwOp::AcqRel, AtomicReadOp::Relaxed)?,
913913
#[rustfmt::skip]
914-
"atomic_cxchg_failrelaxed" =>
914+
"atomic_cxchg_seqcst_relaxed" =>
915915
this.atomic_compare_exchange(args, dest, AtomicRwOp::SeqCst, AtomicReadOp::Relaxed)?,
916916
#[rustfmt::skip]
917-
"atomic_cxchg_failacq" =>
917+
"atomic_cxchg_seqcst_acquire" =>
918918
this.atomic_compare_exchange(args, dest, AtomicRwOp::SeqCst, AtomicReadOp::Acquire)?,
919919

920920
#[rustfmt::skip]
921-
"atomic_cxchgweak" =>
921+
"atomic_cxchgweak_seqcst_seqcst" =>
922922
this.atomic_compare_exchange_weak(args, dest, AtomicRwOp::SeqCst, AtomicReadOp::SeqCst)?,
923923
#[rustfmt::skip]
924-
"atomic_cxchgweak_acq" =>
924+
"atomic_cxchgweak_acquire_acquire" =>
925925
this.atomic_compare_exchange_weak(args, dest, AtomicRwOp::Acquire, AtomicReadOp::Acquire)?,
926926
#[rustfmt::skip]
927-
"atomic_cxchgweak_rel" =>
927+
"atomic_cxchgweak_release_relaxed" =>
928928
this.atomic_compare_exchange_weak(args, dest, AtomicRwOp::Release, AtomicReadOp::Relaxed)?,
929929
#[rustfmt::skip]
930-
"atomic_cxchgweak_acqrel" =>
930+
"atomic_cxchgweak_acqrel_acquire" =>
931931
this.atomic_compare_exchange_weak(args, dest, AtomicRwOp::AcqRel, AtomicReadOp::Acquire)?,
932932
#[rustfmt::skip]
933-
"atomic_cxchgweak_relaxed" =>
933+
"atomic_cxchgweak_relaxed_relaxed" =>
934934
this.atomic_compare_exchange_weak(args, dest, AtomicRwOp::Relaxed, AtomicReadOp::Relaxed)?,
935935
#[rustfmt::skip]
936-
"atomic_cxchgweak_acq_failrelaxed" =>
936+
"atomic_cxchgweak_acquire_relaxed" =>
937937
this.atomic_compare_exchange_weak(args, dest, AtomicRwOp::Acquire, AtomicReadOp::Relaxed)?,
938938
#[rustfmt::skip]
939-
"atomic_cxchgweak_acqrel_failrelaxed" =>
939+
"atomic_cxchgweak_acqrel_relaxed" =>
940940
this.atomic_compare_exchange_weak(args, dest, AtomicRwOp::AcqRel, AtomicReadOp::Relaxed)?,
941941
#[rustfmt::skip]
942-
"atomic_cxchgweak_failrelaxed" =>
942+
"atomic_cxchgweak_seqcst_relaxed" =>
943943
this.atomic_compare_exchange_weak(args, dest, AtomicRwOp::SeqCst, AtomicReadOp::Relaxed)?,
944944
#[rustfmt::skip]
945-
"atomic_cxchgweak_failacq" =>
945+
"atomic_cxchgweak_seqcst_acquire" =>
946946
this.atomic_compare_exchange_weak(args, dest, AtomicRwOp::SeqCst, AtomicReadOp::Acquire)?,
947947

948948
#[rustfmt::skip]
949-
"atomic_or" =>
949+
"atomic_or_seqcst" =>
950950
this.atomic_op(args, dest, AtomicOp::MirOp(BinOp::BitOr, false), AtomicRwOp::SeqCst)?,
951951
#[rustfmt::skip]
952-
"atomic_or_acq" =>
952+
"atomic_or_acquire" =>
953953
this.atomic_op(args, dest, AtomicOp::MirOp(BinOp::BitOr, false), AtomicRwOp::Acquire)?,
954954
#[rustfmt::skip]
955-
"atomic_or_rel" =>
955+
"atomic_or_release" =>
956956
this.atomic_op(args, dest, AtomicOp::MirOp(BinOp::BitOr, false), AtomicRwOp::Release)?,
957957
#[rustfmt::skip]
958958
"atomic_or_acqrel" =>
@@ -961,13 +961,13 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
961961
"atomic_or_relaxed" =>
962962
this.atomic_op(args, dest, AtomicOp::MirOp(BinOp::BitOr, false), AtomicRwOp::Relaxed)?,
963963
#[rustfmt::skip]
964-
"atomic_xor" =>
964+
"atomic_xor_seqcst" =>
965965
this.atomic_op(args, dest, AtomicOp::MirOp(BinOp::BitXor, false), AtomicRwOp::SeqCst)?,
966966
#[rustfmt::skip]
967-
"atomic_xor_acq" =>
967+
"atomic_xor_acquire" =>
968968
this.atomic_op(args, dest, AtomicOp::MirOp(BinOp::BitXor, false), AtomicRwOp::Acquire)?,
969969
#[rustfmt::skip]
970-
"atomic_xor_rel" =>
970+
"atomic_xor_release" =>
971971
this.atomic_op(args, dest, AtomicOp::MirOp(BinOp::BitXor, false), AtomicRwOp::Release)?,
972972
#[rustfmt::skip]
973973
"atomic_xor_acqrel" =>
@@ -976,13 +976,13 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
976976
"atomic_xor_relaxed" =>
977977
this.atomic_op(args, dest, AtomicOp::MirOp(BinOp::BitXor, false), AtomicRwOp::Relaxed)?,
978978
#[rustfmt::skip]
979-
"atomic_and" =>
979+
"atomic_and_seqcst" =>
980980
this.atomic_op(args, dest, AtomicOp::MirOp(BinOp::BitAnd, false), AtomicRwOp::SeqCst)?,
981981
#[rustfmt::skip]
982-
"atomic_and_acq" =>
982+
"atomic_and_acquire" =>
983983
this.atomic_op(args, dest, AtomicOp::MirOp(BinOp::BitAnd, false), AtomicRwOp::Acquire)?,
984984
#[rustfmt::skip]
985-
"atomic_and_rel" =>
985+
"atomic_and_release" =>
986986
this.atomic_op(args, dest, AtomicOp::MirOp(BinOp::BitAnd, false), AtomicRwOp::Release)?,
987987
#[rustfmt::skip]
988988
"atomic_and_acqrel" =>
@@ -991,13 +991,13 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
991991
"atomic_and_relaxed" =>
992992
this.atomic_op(args, dest, AtomicOp::MirOp(BinOp::BitAnd, false), AtomicRwOp::Relaxed)?,
993993
#[rustfmt::skip]
994-
"atomic_nand" =>
994+
"atomic_nand_seqcst" =>
995995
this.atomic_op(args, dest, AtomicOp::MirOp(BinOp::BitAnd, true), AtomicRwOp::SeqCst)?,
996996
#[rustfmt::skip]
997-
"atomic_nand_acq" =>
997+
"atomic_nand_acquire" =>
998998
this.atomic_op(args, dest, AtomicOp::MirOp(BinOp::BitAnd, true), AtomicRwOp::Acquire)?,
999999
#[rustfmt::skip]
1000-
"atomic_nand_rel" =>
1000+
"atomic_nand_release" =>
10011001
this.atomic_op(args, dest, AtomicOp::MirOp(BinOp::BitAnd, true), AtomicRwOp::Release)?,
10021002
#[rustfmt::skip]
10031003
"atomic_nand_acqrel" =>
@@ -1006,13 +1006,13 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
10061006
"atomic_nand_relaxed" =>
10071007
this.atomic_op(args, dest, AtomicOp::MirOp(BinOp::BitAnd, true), AtomicRwOp::Relaxed)?,
10081008
#[rustfmt::skip]
1009-
"atomic_xadd" =>
1009+
"atomic_xadd_seqcst" =>
10101010
this.atomic_op(args, dest, AtomicOp::MirOp(BinOp::Add, false), AtomicRwOp::SeqCst)?,
10111011
#[rustfmt::skip]
1012-
"atomic_xadd_acq" =>
1012+
"atomic_xadd_acquire" =>
10131013
this.atomic_op(args, dest, AtomicOp::MirOp(BinOp::Add, false), AtomicRwOp::Acquire)?,
10141014
#[rustfmt::skip]
1015-
"atomic_xadd_rel" =>
1015+
"atomic_xadd_release" =>
10161016
this.atomic_op(args, dest, AtomicOp::MirOp(BinOp::Add, false), AtomicRwOp::Release)?,
10171017
#[rustfmt::skip]
10181018
"atomic_xadd_acqrel" =>
@@ -1021,42 +1021,42 @@ pub trait EvalContextExt<'mir, 'tcx: 'mir>: crate::MiriEvalContextExt<'mir, 'tcx
10211021
"atomic_xadd_relaxed" =>
10221022
this.atomic_op(args, dest, AtomicOp::MirOp(BinOp::Add, false), AtomicRwOp::Relaxed)?,
10231023
#[rustfmt::skip]
1024-
"atomic_xsub" =>
1024+
"atomic_xsub_seqcst" =>
10251025
this.atomic_op(args, dest, AtomicOp::MirOp(BinOp::Sub, false), AtomicRwOp::SeqCst)?,
10261026
#[rustfmt::skip]
1027-
"atomic_xsub_acq" =>
1027+
"atomic_xsub_acquire" =>
10281028
this.atomic_op(args, dest, AtomicOp::MirOp(BinOp::Sub, false), AtomicRwOp::Acquire)?,
10291029
#[rustfmt::skip]
1030-
"atomic_xsub_rel" =>
1030+
"atomic_xsub_release" =>
10311031
this.atomic_op(args, dest, AtomicOp::MirOp(BinOp::Sub, false), AtomicRwOp::Release)?,
10321032
#[rustfmt::skip]
10331033
"atomic_xsub_acqrel" =>
10341034
this.atomic_op(args, dest, AtomicOp::MirOp(BinOp::Sub, false), AtomicRwOp::AcqRel)?,
10351035
#[rustfmt::skip]
10361036
"atomic_xsub_relaxed" =>
10371037
this.atomic_op(args, dest, AtomicOp::MirOp(BinOp::Sub, false), AtomicRwOp::Relaxed)?,
1038-
"atomic_min" => this.atomic_op(args, dest, AtomicOp::Min, AtomicRwOp::SeqCst)?,
1039-
"atomic_min_acq" => this.atomic_op(args, dest, AtomicOp::Min, AtomicRwOp::Acquire)?,
1040-
"atomic_min_rel" => this.atomic_op(args, dest, AtomicOp::Min, AtomicRwOp::Release)?,
1038+
"atomic_min_seqcst" => this.atomic_op(args, dest, AtomicOp::Min, AtomicRwOp::SeqCst)?,
1039+
"atomic_min_acquire" => this.atomic_op(args, dest, AtomicOp::Min, AtomicRwOp::Acquire)?,
1040+
"atomic_min_release" => this.atomic_op(args, dest, AtomicOp::Min, AtomicRwOp::Release)?,
10411041
"atomic_min_acqrel" => this.atomic_op(args, dest, AtomicOp::Min, AtomicRwOp::AcqRel)?,
10421042
"atomic_min_relaxed" =>
10431043
this.atomic_op(args, dest, AtomicOp::Min, AtomicRwOp::Relaxed)?,
1044-
"atomic_max" => this.atomic_op(args, dest, AtomicOp::Max, AtomicRwOp::SeqCst)?,
1045-
"atomic_max_acq" => this.atomic_op(args, dest, AtomicOp::Max, AtomicRwOp::Acquire)?,
1046-
"atomic_max_rel" => this.atomic_op(args, dest, AtomicOp::Max, AtomicRwOp::Release)?,
1044+
"atomic_max_seqcst" => this.atomic_op(args, dest, AtomicOp::Max, AtomicRwOp::SeqCst)?,
1045+
"atomic_max_acquire" => this.atomic_op(args, dest, AtomicOp::Max, AtomicRwOp::Acquire)?,
1046+
"atomic_max_release" => this.atomic_op(args, dest, AtomicOp::Max, AtomicRwOp::Release)?,
10471047
"atomic_max_acqrel" => this.atomic_op(args, dest, AtomicOp::Max, AtomicRwOp::AcqRel)?,
10481048
"atomic_max_relaxed" =>
10491049
this.atomic_op(args, dest, AtomicOp::Max, AtomicRwOp::Relaxed)?,
1050-
"atomic_umin" => this.atomic_op(args, dest, AtomicOp::Min, AtomicRwOp::SeqCst)?,
1051-
"atomic_umin_acq" => this.atomic_op(args, dest, AtomicOp::Min, AtomicRwOp::Acquire)?,
1052-
"atomic_umin_rel" => this.atomic_op(args, dest, AtomicOp::Min, AtomicRwOp::Release)?,
1050+
"atomic_umin_seqcst" => this.atomic_op(args, dest, AtomicOp::Min, AtomicRwOp::SeqCst)?,
1051+
"atomic_umin_acquire" => this.atomic_op(args, dest, AtomicOp::Min, AtomicRwOp::Acquire)?,
1052+
"atomic_umin_release" => this.atomic_op(args, dest, AtomicOp::Min, AtomicRwOp::Release)?,
10531053
"atomic_umin_acqrel" =>
10541054
this.atomic_op(args, dest, AtomicOp::Min, AtomicRwOp::AcqRel)?,
10551055
"atomic_umin_relaxed" =>
10561056
this.atomic_op(args, dest, AtomicOp::Min, AtomicRwOp::Relaxed)?,
1057-
"atomic_umax" => this.atomic_op(args, dest, AtomicOp::Max, AtomicRwOp::SeqCst)?,
1058-
"atomic_umax_acq" => this.atomic_op(args, dest, AtomicOp::Max, AtomicRwOp::Acquire)?,
1059-
"atomic_umax_rel" => this.atomic_op(args, dest, AtomicOp::Max, AtomicRwOp::Release)?,
1057+
"atomic_umax_seqcst" => this.atomic_op(args, dest, AtomicOp::Max, AtomicRwOp::SeqCst)?,
1058+
"atomic_umax_acquire" => this.atomic_op(args, dest, AtomicOp::Max, AtomicRwOp::Acquire)?,
1059+
"atomic_umax_release" => this.atomic_op(args, dest, AtomicOp::Max, AtomicRwOp::Release)?,
10601060
"atomic_umax_acqrel" =>
10611061
this.atomic_op(args, dest, AtomicOp::Max, AtomicRwOp::AcqRel)?,
10621062
"atomic_umax_relaxed" =>

tests/fail/data_race/atomic_read_na_write_race1.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// ignore-windows: Concurrency on Windows is not supported yet.
22
#![feature(core_intrinsics)]
33

4-
use std::intrinsics::atomic_load;
4+
use std::intrinsics;
55
use std::sync::atomic::AtomicUsize;
66
use std::thread::spawn;
77

@@ -22,7 +22,7 @@ pub fn main() {
2222

2323
let j2 = spawn(move || {
2424
//Equivalent to: (&*c.0).load(Ordering::SeqCst)
25-
atomic_load(c.0 as *mut usize) //~ ERROR Data race detected between Atomic Load on Thread(id = 2) and Write on Thread(id = 1)
25+
intrinsics::atomic_load_seqcst(c.0 as *mut usize) //~ ERROR Data race detected between Atomic Load on Thread(id = 2) and Write on Thread(id = 1)
2626
});
2727

2828
j1.join().unwrap();

tests/fail/data_race/atomic_read_na_write_race1.stderr

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
error: Undefined Behavior: Data race detected between Atomic Load on Thread(id = 2) and Write on Thread(id = 1) at ALLOC (current vector clock = VClock, conflicting timestamp = VClock)
22
--> $DIR/atomic_read_na_write_race1.rs:LL:CC
33
|
4-
LL | atomic_load(c.0 as *mut usize)
5-
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Data race detected between Atomic Load on Thread(id = 2) and Write on Thread(id = 1) at ALLOC (current vector clock = VClock, conflicting timestamp = VClock)
4+
LL | intrinsics::atomic_load_seqcst(c.0 as *mut usize)
5+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Data race detected between Atomic Load on Thread(id = 2) and Write on Thread(id = 1) at ALLOC (current vector clock = VClock, conflicting timestamp = VClock)
66
|
77
= help: this indicates a bug in the program: it performed an invalid operation, and caused Undefined Behavior
88
= help: see https://doc.rust-lang.org/nightly/reference/behavior-considered-undefined.html for further information

tests/fail/panic/double_panic.stderr

-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@ LL | ABORT();
7575
= note: inside `std::panicking::rust_panic_with_hook` at RUSTLIB/std/src/panicking.rs:LL:CC
7676
= note: inside closure at RUSTLIB/std/src/panicking.rs:LL:CC
7777
= note: inside `std::sys_common::backtrace::__rust_end_short_backtrace::<[closure@std::rt::begin_panic<&str>::{closure#0}], !>` at RUSTLIB/std/src/sys_common/backtrace.rs:LL:CC
78-
= note: inside `std::rt::begin_panic::<&str>` at RUSTLIB/std/src/panicking.rs:LL:CC
7978
note: inside `<Foo as std::ops::Drop>::drop` at RUSTLIB/std/src/panic.rs:LL:CC
8079
--> $DIR/double_panic.rs:LL:CC
8180
|

tests/fail/panic/panic_abort1.stderr

-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ LL | ABORT();
1212
= note: inside `std::panicking::rust_panic_with_hook` at RUSTLIB/std/src/panicking.rs:LL:CC
1313
= note: inside closure at RUSTLIB/std/src/panicking.rs:LL:CC
1414
= note: inside `std::sys_common::backtrace::__rust_end_short_backtrace::<[closure@std::rt::begin_panic<&str>::{closure#0}], !>` at RUSTLIB/std/src/sys_common/backtrace.rs:LL:CC
15-
= note: inside `std::rt::begin_panic::<&str>` at RUSTLIB/std/src/panicking.rs:LL:CC
1615
note: inside `main` at RUSTLIB/std/src/panic.rs:LL:CC
1716
--> $DIR/panic_abort1.rs:LL:CC
1817
|

0 commit comments

Comments
 (0)