mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 23:04:33 +00:00
add a test
This commit is contained in:
parent
8655ad5936
commit
e822235323
43
src/test/codegen/set-discriminant-invalid.rs
Normal file
43
src/test/codegen/set-discriminant-invalid.rs
Normal file
@ -0,0 +1,43 @@
|
||||
// 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: unreachable
|
||||
// Also check the next two instructions to make sure we do not match against `unreachable`
|
||||
// elsewhere in the code (e.g., in the closure bode).
|
||||
// CHECK-NEXT: load
|
||||
// CHECK-NEXT: ret
|
||||
#[no_mangle]
|
||||
fn into_error(self, error: Self::Source) -> Error {
|
||||
Error::Api {
|
||||
source: (|v| v)(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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user