Skip to content

Commit dfae9c9

Browse files
committed
Remove DebugArg
1 parent 8f29406 commit dfae9c9

File tree

1 file changed

+5
-43
lines changed

1 file changed

+5
-43
lines changed

compiler/rustc_query_system/src/query/plumbing.rs

Lines changed: 5 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -651,7 +651,7 @@ pub(crate) fn incremental_verify_ich<Tcx, V: Debug>(
651651
let old_hash = dep_graph_data.prev_fingerprint_of(prev_index);
652652

653653
if new_hash != old_hash {
654-
incremental_verify_ich_failed::<Tcx>(prev_index, DebugArg::from(&result));
654+
incremental_verify_ich_failed::<Tcx>(prev_index, result);
655655
}
656656
}
657657

@@ -669,50 +669,12 @@ where
669669
})
670670
}
671671

672-
// This DebugArg business is largely a mirror of std::fmt::ArgumentV1, which is
673-
// currently not exposed publicly.
674-
//
675-
// The PR which added this attempted to use `&dyn Debug` instead, but that
676-
// showed statistically significant worse compiler performance. It's not
677-
// actually clear what the cause there was -- the code should be cold. If this
678-
// can be replaced with `&dyn Debug` with on perf impact, then it probably
679-
// should be.
680-
extern "C" {
681-
type Opaque;
682-
}
683-
684-
struct DebugArg<'a> {
685-
value: &'a Opaque,
686-
fmt: fn(&Opaque, &mut std::fmt::Formatter<'_>) -> std::fmt::Result,
687-
}
688-
689-
impl<'a, T> From<&'a T> for DebugArg<'a>
690-
where
691-
T: std::fmt::Debug,
692-
{
693-
fn from(value: &'a T) -> DebugArg<'a> {
694-
DebugArg {
695-
value: unsafe { std::mem::transmute(value) },
696-
fmt: unsafe {
697-
std::mem::transmute(<T as std::fmt::Debug>::fmt as fn(_, _) -> std::fmt::Result)
698-
},
699-
}
700-
}
701-
}
702-
703-
impl std::fmt::Debug for DebugArg<'_> {
704-
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
705-
(self.fmt)(self.value, f)
706-
}
707-
}
708-
709-
// Note that this is marked #[cold] and intentionally takes the equivalent of
710-
// `dyn Debug` for its arguments, as we want to avoid generating a bunch of
711-
// different implementations for LLVM to chew on (and filling up the final
712-
// binary, too).
672+
// Note that this is marked #[cold] and intentionally takes `dyn Debug` for `result`,
673+
// as we want to avoid generating a bunch of different implementations for LLVM to
674+
// chew on (and filling up the final binary, too).
713675
#[cold]
714676
#[inline(never)]
715-
fn incremental_verify_ich_failed<Tcx>(prev_index: SerializedDepNodeIndex, result: DebugArg<'_>)
677+
fn incremental_verify_ich_failed<Tcx>(prev_index: SerializedDepNodeIndex, result: &dyn Debug)
716678
where
717679
Tcx: DepContext,
718680
{

0 commit comments

Comments
 (0)