Require any function with a tait in its signature to actually constra… · model-checking/verify-rust-std@63fe960 (original) (raw)

`@@ -428,39 +428,43 @@ impl fmt::Display for Backtrace {

`

428

428

`}

`

429

429

`}

`

430

430

``

431

``

`-

type LazyResolve = impl (FnOnce() -> Capture) + Send + Sync + UnwindSafe;

`

432

``

-

433

``

`-

fn lazy_resolve(mut capture: Capture) -> LazyResolve {

`

434

``

`-

move || {

`

435

``

`-

// Use the global backtrace lock to synchronize this as it's a

`

436

``

`` -

// requirement of the backtrace crate, and then actually resolve

``

437

``

`-

// everything.

`

438

``

`-

let _lock = lock();

`

439

``

`-

for frame in capture.frames.iter_mut() {

`

440

``

`-

let symbols = &mut frame.symbols;

`

441

``

`-

let frame = match &frame.frame {

`

442

``

`-

RawFrame::Actual(frame) => frame,

`

443

``

`-

#[cfg(test)]

`

444

``

`-

RawFrame::Fake => unimplemented!(),

`

445

``

`-

};

`

446

``

`-

unsafe {

`

447

``

`-

backtrace_rs::resolve_frame_unsynchronized(frame, |symbol| {

`

448

``

`-

symbols.push(BacktraceSymbol {

`

449

``

`-

name: symbol.name().map(|m| m.as_bytes().to_vec()),

`

450

``

`-

filename: symbol.filename_raw().map(|b| match b {

`

451

``

`-

BytesOrWideString::Bytes(b) => BytesOrWide::Bytes(b.to_owned()),

`

452

``

`-

BytesOrWideString::Wide(b) => BytesOrWide::Wide(b.to_owned()),

`

453

``

`-

}),

`

454

``

`-

lineno: symbol.lineno(),

`

455

``

`-

colno: symbol.colno(),

`

``

431

`+

mod helper {

`

``

432

`+

use super::*;

`

``

433

`+

pub(super) type LazyResolve = impl (FnOnce() -> Capture) + Send + Sync + UnwindSafe;

`

``

434

+

``

435

`+

pub(super) fn lazy_resolve(mut capture: Capture) -> LazyResolve {

`

``

436

`+

move || {

`

``

437

`+

// Use the global backtrace lock to synchronize this as it's a

`

``

438

`` +

// requirement of the backtrace crate, and then actually resolve

``

``

439

`+

// everything.

`

``

440

`+

let _lock = lock();

`

``

441

`+

for frame in capture.frames.iter_mut() {

`

``

442

`+

let symbols = &mut frame.symbols;

`

``

443

`+

let frame = match &frame.frame {

`

``

444

`+

RawFrame::Actual(frame) => frame,

`

``

445

`+

#[cfg(test)]

`

``

446

`+

RawFrame::Fake => unimplemented!(),

`

``

447

`+

};

`

``

448

`+

unsafe {

`

``

449

`+

backtrace_rs::resolve_frame_unsynchronized(frame, |symbol| {

`

``

450

`+

symbols.push(BacktraceSymbol {

`

``

451

`+

name: symbol.name().map(|m| m.as_bytes().to_vec()),

`

``

452

`+

filename: symbol.filename_raw().map(|b| match b {

`

``

453

`+

BytesOrWideString::Bytes(b) => BytesOrWide::Bytes(b.to_owned()),

`

``

454

`+

BytesOrWideString::Wide(b) => BytesOrWide::Wide(b.to_owned()),

`

``

455

`+

}),

`

``

456

`+

lineno: symbol.lineno(),

`

``

457

`+

colno: symbol.colno(),

`

``

458

`+

});

`

456

459

`});

`

457

``

`-

});

`

``

460

`+

}

`

458

461

`}

`

459

``

`-

}

`

460

462

``

461

``

`-

capture

`

``

463

`+

capture

`

``

464

`+

}

`

462

465

`}

`

463

466

`}

`

``

467

`+

use helper::*;

`

464

468

``

465

469

`impl RawFrame {

`

466

470

`fn ip(&self) -> *mut c_void {

`