Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rollup of 14 pull requests #78001

Merged
merged 64 commits into from
Oct 16, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
a020142
Refactor io/buffered.rs into submodules
Lucretiel Sep 11, 2020
96229f0
move buffered.rs to mod.rs
Lucretiel Sep 11, 2020
6d75cdf
Added updated compiler diagnostic
Lucretiel Sep 15, 2020
da700cb
Stabilize move_ref_pattern
Amjad50 Aug 30, 2020
afb9eeb
Disabled error `E0007` from rustc_error_codes
Amjad50 Aug 30, 2020
c4280af
Retry fix error reporting suggestions
Lucretiel Sep 17, 2020
0b923d3
add `str::{Split,RSplit}::as_str` methods
WaffleLapkin Oct 1, 2020
4747215
add `str::{SplitN, RSplitN, SplitTerminator, RSplitTerminator}::as_st…
WaffleLapkin Oct 1, 2020
076514c
add `str::SplitInclusive::as_str` method
WaffleLapkin Oct 1, 2020
f84f01c
Use futex-based thread-parker for Wasm32.
m-ou-se Oct 6, 2020
54a71e8
For backtrace, use StaticMutex instead of a raw sys Mutex.
m-ou-se Oct 7, 2020
e6d61ad
Use slice_as_mut_ptr instead of first_ptr_mut.
m-ou-se Oct 7, 2020
0f26578
Get rid of UnsafeCell<MaybeUninit>s in cloudabi mutex.
m-ou-se Oct 7, 2020
41066be
Get rid of UnsafeCell in cloudabi rwlock.
m-ou-se Oct 7, 2020
060e8cb
Get rid of raw pointers and UnsafeCell in cloudabi condvar.
m-ou-se Oct 7, 2020
b3be11e
Formatting.
m-ou-se Oct 7, 2020
6f0544a
Simplify doc-cfg rendering based on the current context
Nemo157 Oct 6, 2020
17eb8d8
ICEs should print the top of the query stack
hosseind75 Sep 19, 2020
20ea929
run full query stack print just when RUST_BACKTRACE is set
hosseind75 Sep 19, 2020
7ccca35
fix invalid-punct-ident-1 test
hosseind75 Sep 19, 2020
d6d4388
add filter regexes to load-panic-backtraces test
hosseind75 Sep 20, 2020
d60b7e2
fix show we're just showing... message instead of the end of query st…
hosseind75 Sep 23, 2020
6e7e4ac
fix clippy custom_ice_message test
hosseind75 Sep 25, 2020
15663a4
add new line
hosseind75 Sep 28, 2020
2124e9b
rebase with master
hosseind75 Sep 29, 2020
2b91b7f
ICEs should print the top of the query stack
hosseind75 Sep 19, 2020
01f838a
run full query stack print just when RUST_BACKTRACE is set
hosseind75 Sep 19, 2020
2bfdd64
change approach and run ui tests
hosseind75 Sep 19, 2020
b6e9f08
show a message when we are showing limited slice of query stack
hosseind75 Sep 19, 2020
3c56ba5
fix invalid-punct-ident-1 test
hosseind75 Sep 19, 2020
d1e3059
add filter regexes to load-panic-backtraces test
hosseind75 Sep 20, 2020
6c0f06a
fix show we're just showing... message instead of the end of query st…
hosseind75 Sep 23, 2020
c61d95b
remove new line
hosseind75 Sep 29, 2020
998186e
revert deleted new line
hosseind75 Oct 3, 2020
42ebae3
delete const-pat-ice test stderr
Oct 6, 2020
73d8f00
change condition for end of query stack message
Oct 8, 2020
7280f6a
rustc_parse: correct span on cast expr with attrs
calebcartwright Oct 10, 2020
4e82da4
rustc_parse: correct span on range expr with attrs
calebcartwright Oct 12, 2020
4e263fe
Add test-examples for Cfg::simplify_with
Nemo157 Oct 13, 2020
4409cb2
Make portability log at debug level
Nemo157 Oct 13, 2020
5875657
Fix comment about non-reentrant StaticMutex::lock().
m-ou-se Oct 7, 2020
44a2af3
Remove lifetime from StaticMutex and assume 'static.
m-ou-se Oct 7, 2020
a22cd05
BTreeMap: making PartialCmp/PartialEq explicit and tested
ssomers Oct 14, 2020
46cc889
fix stderr file of clippy/custom_ice_message test
Oct 14, 2020
9752787
mangling: non-monomorphic `#[rustc_symbol_name]`
davidtwco Aug 18, 2020
fbdfe2c
mangling: encode all impl parameters
davidtwco Aug 24, 2020
95daa06
fix off-by-one in parameter spans
euclio Sep 26, 2020
14b2d16
ensure arguments are included in count mismatch span
euclio Sep 24, 2020
1c03f6d
Fix intra doc link for needs_drop
Manishearth Oct 15, 2020
7bd6403
fill in the tracking issue
WaffleLapkin Oct 15, 2020
075f2bf
Rollup merge of #75023 - euclio:argument-span, r=estebank
Dylan-DPC Oct 16, 2020
977df43
Rollup merge of #75265 - WaffleLapkin:str_split_as_str, r=dtolnay
Dylan-DPC Oct 16, 2020
1643fd8
Rollup merge of #75675 - davidtwco:symbol-mangling-impl-params, r=eddyb
Dylan-DPC Oct 16, 2020
5acb7f1
Rollup merge of #76084 - Lucretiel:split-buffered, r=dtolnay
Dylan-DPC Oct 16, 2020
85dbb03
Rollup merge of #76119 - Amjad50:stabilizing-move_ref_pattern, r=niko…
Dylan-DPC Oct 16, 2020
0e4d196
Rollup merge of #77493 - hosseind88:ICEs_should_always_print_the_top_…
Dylan-DPC Oct 16, 2020
dcf972a
Rollup merge of #77619 - fusion-engineering-forks:wasm-parker, r=dtolnay
Dylan-DPC Oct 16, 2020
085399f
Rollup merge of #77646 - fusion-engineering-forks:use-static-mutex, r…
Dylan-DPC Oct 16, 2020
b183ef2
Rollup merge of #77648 - fusion-engineering-forks:static-mutex, r=dto…
Dylan-DPC Oct 16, 2020
9b8c0eb
Rollup merge of #77657 - fusion-engineering-forks:cleanup-cloudabi-sy…
Dylan-DPC Oct 16, 2020
71b0ea6
Rollup merge of #77672 - Nemo157:simplify-cfg, r=jyn514
Dylan-DPC Oct 16, 2020
9d8bf44
Rollup merge of #77780 - calebcartwright:cast-expr-attr-span, r=oli-obk
Dylan-DPC Oct 16, 2020
b64b5fa
Rollup merge of #77935 - ssomers:btree_cleanup_1, r=Mark-Simulacrum
Dylan-DPC Oct 16, 2020
e688b4d
Rollup merge of #77980 - Manishearth:needs-drop-intra, r=jyn514
Dylan-DPC Oct 16, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions compiler/rustc_driver/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1258,9 +1258,9 @@ pub fn report_ice(info: &panic::PanicInfo<'_>, bug_report_url: &str) {
// If backtraces are enabled, also print the query stack
let backtrace = env::var_os("RUST_BACKTRACE").map(|x| &x != "0").unwrap_or(false);

if backtrace {
TyCtxt::try_print_query_stack(&handler);
}
let num_frames = if backtrace { None } else { Some(2) };

TyCtxt::try_print_query_stack(&handler, num_frames);

#[cfg(windows)]
unsafe {
Expand Down
8 changes: 6 additions & 2 deletions compiler/rustc_error_codes/src/error_codes/E0007.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
#### Note: this error code is no longer emitted by the compiler.

This error indicates that the bindings in a match arm would require a value to
be moved into more than one location, thus violating unique ownership. Code
like the following is invalid as it requires the entire `Option<String>` to be
Expand All @@ -6,11 +8,13 @@ inner `String` to be moved into a variable called `s`.

Erroneous code example:

```compile_fail,E0007
```compile_fail,E0382
#![feature(bindings_after_at)]

let x = Some("s".to_string());

match x {
op_string @ Some(s) => {}, // error: cannot bind by-move with sub-bindings
op_string @ Some(s) => {}, // error: use of moved value
None => {},
}
```
Expand Down
3 changes: 3 additions & 0 deletions compiler/rustc_feature/src/accepted.rs
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,9 @@ declare_features! (
(accepted, track_caller, "1.46.0", Some(47809), None),
/// Allows `#[doc(alias = "...")]`.
(accepted, doc_alias, "1.48.0", Some(50146), None),
/// Allows patterns with concurrent by-move and by-ref bindings.
/// For example, you can write `Foo(a, ref b)` where `a` is by-move and `b` is by-ref.
(accepted, move_ref_pattern, "1.48.0", Some(68354), None),

// -------------------------------------------------------------------------
// feature-group-end: accepted features
Expand Down
4 changes: 0 additions & 4 deletions compiler/rustc_feature/src/active.rs
Original file line number Diff line number Diff line change
Expand Up @@ -526,10 +526,6 @@ declare_features! (
/// For example, you can write `x @ Some(y)`.
(active, bindings_after_at, "1.41.0", Some(65490), None),

/// Allows patterns with concurrent by-move and by-ref bindings.
/// For example, you can write `Foo(a, ref b)` where `a` is by-move and `b` is by-ref.
(active, move_ref_pattern, "1.42.0", Some(68354), None),

/// Allows `impl const Trait for T` syntax.
(active, const_trait_impl, "1.42.0", Some(67792), None),

Expand Down
28 changes: 28 additions & 0 deletions compiler/rustc_hir/src/hir.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2742,4 +2742,32 @@ impl<'hir> Node<'hir> {
_ => None,
}
}

pub fn hir_id(&self) -> Option<HirId> {
match self {
Node::Item(Item { hir_id, .. })
| Node::ForeignItem(ForeignItem { hir_id, .. })
| Node::TraitItem(TraitItem { hir_id, .. })
| Node::ImplItem(ImplItem { hir_id, .. })
| Node::Field(StructField { hir_id, .. })
| Node::AnonConst(AnonConst { hir_id, .. })
| Node::Expr(Expr { hir_id, .. })
| Node::Stmt(Stmt { hir_id, .. })
| Node::Ty(Ty { hir_id, .. })
| Node::Binding(Pat { hir_id, .. })
| Node::Pat(Pat { hir_id, .. })
| Node::Arm(Arm { hir_id, .. })
| Node::Block(Block { hir_id, .. })
| Node::Local(Local { hir_id, .. })
| Node::MacroDef(MacroDef { hir_id, .. })
| Node::Lifetime(Lifetime { hir_id, .. })
| Node::Param(Param { hir_id, .. })
| Node::GenericParam(GenericParam { hir_id, .. }) => Some(*hir_id),
Node::TraitRef(TraitRef { hir_ref_id, .. }) => Some(*hir_ref_id),
Node::PathSegment(PathSegment { hir_id, .. }) => *hir_id,
Node::Variant(Variant { id, .. }) => Some(*id),
Node::Ctor(variant) => variant.ctor_hir_id(),
Node::Crate(_) | Node::Visibility(_) => None,
}
}
}
12 changes: 11 additions & 1 deletion compiler/rustc_middle/src/ty/instance.rs
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,17 @@ impl<'tcx> Instance<'tcx> {
}

pub fn mono(tcx: TyCtxt<'tcx>, def_id: DefId) -> Instance<'tcx> {
Instance::new(def_id, tcx.empty_substs_for_def_id(def_id))
let substs = InternalSubsts::for_item(tcx, def_id, |param, _| match param.kind {
ty::GenericParamDefKind::Lifetime => tcx.lifetimes.re_erased.into(),
ty::GenericParamDefKind::Type { .. } => {
bug!("Instance::mono: {:?} has type parameters", def_id)
}
ty::GenericParamDefKind::Const { .. } => {
bug!("Instance::mono: {:?} has const parameters", def_id)
}
});

Instance::new(def_id, substs)
}

#[inline]
Expand Down
13 changes: 10 additions & 3 deletions compiler/rustc_middle/src/ty/query/plumbing.rs
Original file line number Diff line number Diff line change
Expand Up @@ -124,20 +124,23 @@ impl<'tcx> TyCtxt<'tcx> {
})
}

pub fn try_print_query_stack(handler: &Handler) {
pub fn try_print_query_stack(handler: &Handler, num_frames: Option<usize>) {
eprintln!("query stack during panic:");

// Be careful reyling on global state here: this code is called from
// a panic hook, which means that the global `Handler` may be in a weird
// state if it was responsible for triggering the panic.
let mut i = 0;
ty::tls::with_context_opt(|icx| {
if let Some(icx) = icx {
let query_map = icx.tcx.queries.try_collect_active_jobs();

let mut current_query = icx.query;
let mut i = 0;

while let Some(query) = current_query {
if Some(i) == num_frames {
break;
}
let query_info =
if let Some(info) = query_map.as_ref().and_then(|map| map.get(&query)) {
info
Expand All @@ -163,7 +166,11 @@ impl<'tcx> TyCtxt<'tcx> {
}
});

eprintln!("end of query stack");
if num_frames == None || num_frames >= Some(i) {
eprintln!("end of query stack");
} else {
eprintln!("we're just showing a limited slice of the query stack");
}
}
}

Expand Down
18 changes: 2 additions & 16 deletions compiler/rustc_middle/src/ty/util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ use crate::mir::interpret::{sign_extend, truncate};
use crate::ty::fold::TypeFolder;
use crate::ty::layout::IntegerExt;
use crate::ty::query::TyCtxtAt;
use crate::ty::subst::{GenericArgKind, InternalSubsts, Subst, SubstsRef};
use crate::ty::subst::{GenericArgKind, Subst, SubstsRef};
use crate::ty::TyKind::*;
use crate::ty::{self, DefIdTree, GenericParamDefKind, List, Ty, TyCtxt, TypeFoldable};
use crate::ty::{self, DefIdTree, List, Ty, TyCtxt, TypeFoldable};
use rustc_apfloat::Float as _;
use rustc_ast as ast;
use rustc_attr::{self as attr, SignedInt, UnsignedInt};
Expand Down Expand Up @@ -509,20 +509,6 @@ impl<'tcx> TyCtxt<'tcx> {
Some(ty::Binder::bind(env_ty))
}

/// Given the `DefId` of some item that has no type or const parameters, make
/// a suitable "empty substs" for it.
pub fn empty_substs_for_def_id(self, item_def_id: DefId) -> SubstsRef<'tcx> {
InternalSubsts::for_item(self, item_def_id, |param, _| match param.kind {
GenericParamDefKind::Lifetime => self.lifetimes.re_erased.into(),
GenericParamDefKind::Type { .. } => {
bug!("empty_substs_for_def_id: {:?} has type parameters", item_def_id)
}
GenericParamDefKind::Const { .. } => {
bug!("empty_substs_for_def_id: {:?} has const parameters", item_def_id)
}
})
}

/// Returns `true` if the node pointed to by `def_id` is a `static` item.
pub fn is_static(self, def_id: DefId) -> bool {
self.static_mutability(def_id).is_some()
Expand Down
70 changes: 4 additions & 66 deletions compiler/rustc_mir_build/src/thir/pattern/check_match.rs
Original file line number Diff line number Diff line change
Expand Up @@ -71,13 +71,13 @@ impl<'tcx> Visitor<'tcx> for MatchVisitor<'_, 'tcx> {
hir::LocalSource::AwaitDesugar => ("`await` future binding", None),
};
self.check_irrefutable(&loc.pat, msg, sp);
self.check_patterns(false, &loc.pat);
self.check_patterns(&loc.pat);
}

fn visit_param(&mut self, param: &'tcx hir::Param<'tcx>) {
intravisit::walk_param(self, param);
self.check_irrefutable(&param.pat, "function argument", None);
self.check_patterns(false, &param.pat);
self.check_patterns(&param.pat);
}
}

Expand Down Expand Up @@ -119,10 +119,7 @@ impl PatCtxt<'_, '_> {
}

impl<'tcx> MatchVisitor<'_, 'tcx> {
fn check_patterns(&mut self, has_guard: bool, pat: &Pat<'_>) {
if !self.tcx.features().move_ref_pattern {
check_legality_of_move_bindings(self, has_guard, pat);
}
fn check_patterns(&mut self, pat: &Pat<'_>) {
pat.walk_always(|pat| check_borrow_conflicts_in_at_patterns(self, pat));
if !self.tcx.features().bindings_after_at {
check_legality_of_bindings_in_at_patterns(self, pat);
Expand Down Expand Up @@ -165,7 +162,7 @@ impl<'tcx> MatchVisitor<'_, 'tcx> {
) {
for arm in arms {
// Check the arm for some things unrelated to exhaustiveness.
self.check_patterns(arm.guard.is_some(), &arm.pat);
self.check_patterns(&arm.pat);
}

let mut cx = self.new_cx(scrut.hir_id);
Expand Down Expand Up @@ -601,65 +598,6 @@ fn is_binding_by_move(cx: &MatchVisitor<'_, '_>, hir_id: HirId, span: Span) -> b
!cx.typeck_results.node_type(hir_id).is_copy_modulo_regions(cx.tcx.at(span), cx.param_env)
}

/// Check the legality of legality of by-move bindings.
fn check_legality_of_move_bindings(cx: &mut MatchVisitor<'_, '_>, has_guard: bool, pat: &Pat<'_>) {
let sess = cx.tcx.sess;
let typeck_results = cx.typeck_results;

// Find all by-ref spans.
let mut by_ref_spans = Vec::new();
pat.each_binding(|_, hir_id, span, _| {
if let Some(ty::BindByReference(_)) =
typeck_results.extract_binding_mode(sess, hir_id, span)
{
by_ref_spans.push(span);
}
});

// Find bad by-move spans:
let by_move_spans = &mut Vec::new();
let mut check_move = |p: &Pat<'_>, sub: Option<&Pat<'_>>| {
// Check legality of moving out of the enum.
//
// `x @ Foo(..)` is legal, but `x @ Foo(y)` isn't.
if sub.map_or(false, |p| p.contains_bindings()) {
struct_span_err!(sess, p.span, E0007, "cannot bind by-move with sub-bindings")
.span_label(p.span, "binds an already bound by-move value by moving it")
.emit();
} else if !has_guard && !by_ref_spans.is_empty() {
by_move_spans.push(p.span);
}
};
pat.walk_always(|p| {
if let hir::PatKind::Binding(.., sub) = &p.kind {
if let Some(ty::BindByValue(_)) =
typeck_results.extract_binding_mode(sess, p.hir_id, p.span)
{
if is_binding_by_move(cx, p.hir_id, p.span) {
check_move(p, sub.as_deref());
}
}
}
});

// Found some bad by-move spans, error!
if !by_move_spans.is_empty() {
let mut err = feature_err(
&sess.parse_sess,
sym::move_ref_pattern,
by_move_spans.clone(),
"binding by-move and by-ref in the same pattern is unstable",
);
for span in by_ref_spans.iter() {
err.span_label(*span, "by-ref pattern here");
}
for span in by_move_spans.iter() {
err.span_label(*span, "by-move pattern here");
}
err.emit();
}
}

/// Check that there are no borrow or move conflicts in `binding @ subpat` patterns.
///
/// For example, this would reject:
Expand Down
24 changes: 17 additions & 7 deletions compiler/rustc_parse/src/parser/expr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -246,11 +246,7 @@ impl<'a> Parser<'a> {
this.parse_assoc_expr_with(prec + prec_adjustment, LhsExpr::NotYetParsed)
})?;

// Make sure that the span of the parent node is larger than the span of lhs and rhs,
// including the attributes.
let lhs_span =
lhs.attrs.iter().find(|a| a.style == AttrStyle::Outer).map_or(lhs_span, |a| a.span);
let span = lhs_span.to(rhs.span);
let span = self.mk_expr_sp(&lhs, lhs_span, rhs.span);
lhs = match op {
AssocOp::Add
| AssocOp::Subtract
Expand Down Expand Up @@ -411,7 +407,7 @@ impl<'a> Parser<'a> {
None
};
let rhs_span = rhs.as_ref().map_or(cur_op_span, |x| x.span);
let span = lhs.span.to(rhs_span);
let span = self.mk_expr_sp(&lhs, lhs.span, rhs_span);
let limits =
if op == AssocOp::DotDot { RangeLimits::HalfOpen } else { RangeLimits::Closed };
Ok(self.mk_expr(span, self.mk_range(Some(lhs), rhs, limits)?, AttrVec::new()))
Expand Down Expand Up @@ -571,7 +567,11 @@ impl<'a> Parser<'a> {
expr_kind: fn(P<Expr>, P<Ty>) -> ExprKind,
) -> PResult<'a, P<Expr>> {
let mk_expr = |this: &mut Self, rhs: P<Ty>| {
this.mk_expr(lhs_span.to(rhs.span), expr_kind(lhs, rhs), AttrVec::new())
this.mk_expr(
this.mk_expr_sp(&lhs, lhs_span, rhs.span),
expr_kind(lhs, rhs),
AttrVec::new(),
)
};

// Save the state of the parser before parsing type normally, in case there is a
Expand Down Expand Up @@ -2324,4 +2324,14 @@ impl<'a> Parser<'a> {
pub(super) fn mk_expr_err(&self, span: Span) -> P<Expr> {
self.mk_expr(span, ExprKind::Err, AttrVec::new())
}

/// Create expression span ensuring the span of the parent node
/// is larger than the span of lhs and rhs, including the attributes.
fn mk_expr_sp(&self, lhs: &P<Expr>, lhs_span: Span, rhs_span: Span) -> Span {
lhs.attrs
.iter()
.find(|a| a.style == AttrStyle::Outer)
.map_or(lhs_span, |a| a.span)
.to(rhs_span)
}
}
2 changes: 1 addition & 1 deletion compiler/rustc_parse/src/parser/item.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1744,7 +1744,7 @@ impl<'a> Parser<'a> {
}
};

let span = lo.to(self.token.span);
let span = lo.until(self.token.span);

Ok(Param {
attrs: attrs.into(),
Expand Down
1 change: 0 additions & 1 deletion compiler/rustc_symbol_mangling/src/legacy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,6 @@ fn get_symbol_hash<'tcx>(
}

// also include any type parameters (for generic items)
assert!(!substs.has_erasable_regions());
substs.hash_stable(&mut hcx, &mut hasher);

if let Some(instantiating_crate) = instantiating_crate {
Expand Down
9 changes: 6 additions & 3 deletions compiler/rustc_symbol_mangling/src/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

use rustc_hir as hir;
use rustc_middle::ty::print::with_no_trimmed_paths;
use rustc_middle::ty::{Instance, TyCtxt};
use rustc_middle::ty::{subst::InternalSubsts, Instance, TyCtxt};
use rustc_span::symbol::{sym, Symbol};

const SYMBOL_NAME: Symbol = sym::rustc_symbol_name;
Expand Down Expand Up @@ -36,8 +36,11 @@ impl SymbolNamesTest<'tcx> {
let def_id = tcx.hir().local_def_id(hir_id);
for attr in tcx.get_attrs(def_id.to_def_id()).iter() {
if tcx.sess.check_name(attr, SYMBOL_NAME) {
// for now, can only use on monomorphic names
let instance = Instance::mono(tcx, def_id.to_def_id());
let def_id = def_id.to_def_id();
let instance = Instance::new(
def_id,
tcx.erase_regions(&InternalSubsts::identity_for_item(tcx, def_id)),
);
let mangled = tcx.symbol_name(instance);
tcx.sess.span_err(attr.span, &format!("symbol-name({})", mangled));
if let Ok(demangling) = rustc_demangle::try_demangle(mangled.name) {
Expand Down
Loading