mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-11-04 15:05:30 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			44 lines
		
	
	
		
			874 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			874 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
// compile-flags: -C opt-level=0
 | 
						|
#![crate_type = "lib"]
 | 
						|
 | 
						|
pub enum ApiError {}
 | 
						|
#[allow(dead_code)]
 | 
						|
pub struct TokioError {
 | 
						|
    b: bool,
 | 
						|
}
 | 
						|
pub enum Error {
 | 
						|
    Api {
 | 
						|
        source: ApiError,
 | 
						|
    },
 | 
						|
    Ethereum,
 | 
						|
    Tokio {
 | 
						|
        source: TokioError,
 | 
						|
    },
 | 
						|
}
 | 
						|
struct Api;
 | 
						|
impl IntoError<Error> for Api
 | 
						|
{
 | 
						|
    type Source = ApiError;
 | 
						|
    // CHECK-LABEL: @into_error
 | 
						|
    // CHECK: llvm.trap()
 | 
						|
    // Also check the next two instructions to make sure we do not match against `trap`
 | 
						|
    // elsewhere in the code.
 | 
						|
    // CHECK-NEXT: load
 | 
						|
    // CHECK-NEXT: ret
 | 
						|
    #[no_mangle]
 | 
						|
    fn into_error(self, error: Self::Source) -> Error {
 | 
						|
        Error::Api {
 | 
						|
            source: error,
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
pub trait IntoError<E>
 | 
						|
{
 | 
						|
    /// The underlying error
 | 
						|
    type Source;
 | 
						|
 | 
						|
    /// Combine the information to produce the error
 | 
						|
    fn into_error(self, source: Self::Source) -> E;
 | 
						|
}
 |