Struct rustc_codegen_ssa::base::AbortCodegenOnDrop[−][src]

struct AbortCodegenOnDrop<B: ExtraBackendMethods>(Option<OngoingCodegen<B>>);
Expand description

A curious wrapper structure whose only purpose is to call codegen_aborted when it’s dropped abnormally.

In the process of working on rust-lang/rust#55238 a mysterious segfault was stumbled upon. The segfault was never reproduced locally, but it was suspected to be related to the fact that codegen worker threads were sticking around by the time the main thread was exiting, causing issues.

This structure is an attempt to fix that issue where the codegen_aborted message will block until all workers have finished. This should ensure that even if the main codegen thread panics we’ll wait for pending work to complete before returning from the main thread, hopefully avoiding segfaults.

If you see this comment in the code, then it means that this workaround worked! We may yet one day track down the mysterious cause of that segfault…

Implementations

impl<B: ExtraBackendMethods> AbortCodegenOnDrop<B>[src]

Methods from Deref<Target = OngoingCodegen<B>>

pub fn submit_pre_codegened_module_to_llvm(
    &self,
    tcx: TyCtxt<'_>,
    module: ModuleCodegen<B::Module>
)
[src]

pub fn codegen_finished(&self, tcx: TyCtxt<'_>)[src]

pub fn check_for_errors(&self, sess: &Session)[src]

pub fn wait_for_signal_to_codegen_item(&self)[src]

Trait Implementations

impl<B: ExtraBackendMethods> Deref for AbortCodegenOnDrop<B>[src]

type Target = OngoingCodegen<B>

The resulting type after dereferencing.

fn deref(&self) -> &OngoingCodegen<B>[src]

Dereferences the value.

impl<B: ExtraBackendMethods> DerefMut for AbortCodegenOnDrop<B>[src]

fn deref_mut(&mut self) -> &mut OngoingCodegen<B>[src]

Mutably dereferences the value.

impl<B: ExtraBackendMethods> Drop for AbortCodegenOnDrop<B>[src]

fn drop(&mut self)[src]

Executes the destructor for this type. Read more

Auto Trait Implementations

impl<B> !RefUnwindSafe for AbortCodegenOnDrop<B>

impl<B> !Send for AbortCodegenOnDrop<B>

impl<B> !Sync for AbortCodegenOnDrop<B>

impl<B> Unpin for AbortCodegenOnDrop<B> where
    B: Unpin, 

impl<B> !UnwindSafe for AbortCodegenOnDrop<B>

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized, 
[src]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

impl<T> Borrow<T> for T where
    T: ?Sized, 
[src]

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

impl<T> BorrowMut<T> for T where
    T: ?Sized, 
[src]

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

impl<T> From<T> for T[src]

pub fn from(t: T) -> T[src]

Performs the conversion.

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

pub fn into(self) -> U[src]

Performs the conversion.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]

Performs the conversion.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>[src]

Performs the conversion.