Skip to content

[BUG]: Cargo install fails #725

Open
@javierron

Description

@javierron

Describe the bug:
cargo install fortanix-sgx-tools sgxs-tools fails with errors:

error[E0658]: the `!` type is experimental
   --> /home/javier/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/enclave-runner-0.7.0/src/usercalls/abi.rs:311:1
    |
311 | invoke_with_usercalls!(define_usercalls);
    | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: see issue #35121 <https://github.com/rust-lang/rust/issues/35121> for more information
    = help: add `#![feature(never_type)]` to the crate attributes to enable
    = note: this compiler was built on 2025-03-23; consider upgrading it if it is out of date
    = note: this error originates in the macro `invoke_with_usercalls` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0277]: the trait bound `!: RegisterArgument` is not satisfied
   --> /home/javier/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/enclave-runner-0.7.0/src/usercalls/abi.rs:64:59
    |
64  |                     (handler, ReturnValue::into_registers(ret))
    |                               --------------------------- ^^^ the trait `RegisterArgument` is not implemented for `!`
    |                               |
    |                               required by a bound introduced by this call
...
311 | invoke_with_usercalls!(define_usercalls);
    | ---------------------------------------- in this macro invocation
    |
    = help: the following other types implement trait `RegisterArgument`:
              ()
              *const T
              *mut T
              Option<NonNull<T>>
              bool
              i16
              i32
              i64
            and 7 others
note: required for `std::result::Result<!, usercalls::EnclaveAbort<bool>>` to implement `ReturnValue`
   --> /home/javier/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/enclave-runner-0.7.0/src/usercalls/abi.rs:162:27
    |
162 | impl<T: RegisterArgument> ReturnValue for UsercallResult<T> {
    |         ----------------  ^^^^^^^^^^^     ^^^^^^^^^^^^^^^^^
    |         |
    |         unsatisfied trait bound introduced here
    = note: this error originates in the macro `define_usercalls` which comes from the expansion of the macro `invoke_with_usercalls` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0053]: method `exit` has an incompatible type for trait
   --> /home/javier/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/enclave-runner-0.7.0/src/usercalls/interface.rs:189:10
    |
189 |     ) -> std::pin::Pin<Box<dyn Future<Output = (Self, EnclaveAbort<bool>)> + 'future>> {
    |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `Result<!, EnclaveAbort<bool>>`, found `usercalls::EnclaveAbort<bool>`
    |
note: type in trait
   --> /home/javier/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/enclave-runner-0.7.0/src/usercalls/abi.rs:177:17
    |
177 |                 std::pin::Pin<Box<dyn Future<Output = (Self, UsercallResult<$r>)> + $l>>
    |                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
311 | invoke_with_usercalls!(define_usercalls);
    | ---------------------------------------- in this macro invocation
    = note: expected signature `fn(interface::Handler<'_, '_>, _) -> Pin<Box<(dyn futures::Future<Output = (interface::Handler<'ioinput, 'tcs>, std::result::Result<!, usercalls::EnclaveAbort<bool>>)> + 'future)>>`
               found signature `fn(interface::Handler<'_, '_>, _) -> Pin<Box<(dyn futures::Future<Output = (interface::Handler<'ioinput, 'tcs>, usercalls::EnclaveAbort<bool>)> + 'future)>>`
    = note: this error originates in the macro `dispatch_return_type` which comes from the expansion of the macro `invoke_with_usercalls` (in Nightly builds, run with -Z macro-backtrace for more info)
help: change the output type to match the trait
    |
189 -     ) -> std::pin::Pin<Box<dyn Future<Output = (Self, EnclaveAbort<bool>)> + 'future>> {
189 +     ) -> Pin<Box<(dyn futures::Future<Output = (interface::Handler<'ioinput, 'tcs>, std::result::Result<!, usercalls::EnclaveAbort<bool>>)> + 'future)>> {
    |

error[E0283]: type annotations needed
    --> /home/javier/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/enclave-runner-0.7.0/src/usercalls/mod.rs:1593:56
     |
1593 |         assert!((EV_ALL | EV_ABORT) <= u8::max_value().into());
     |                                     --                 ^^^^
     |                                     |
     |                                     type must be known at this point
     |
     = note: multiple `impl`s satisfying `u64: PartialOrd<_>` found in the following crates: `core`, `deranged`:
             - impl PartialOrd for u64;
             - impl<MIN, MAX> PartialOrd<deranged::RangedU64<MIN, MAX>> for u64
               where the constant `MIN` has type `u64`, the constant `MAX` has type `u64`;
help: try using a fully qualified path to specify the expected types
     |
1593 -         assert!((EV_ALL | EV_ABORT) <= u8::max_value().into());
1593 +         assert!((EV_ALL | EV_ABORT) <= <u8 as Into<T>>::into(u8::max_value()));
     |

Some errors have detailed explanations: E0053, E0277, E0283, E0658.
For more information about an error, try `rustc --explain E0053`.
error: could not compile `enclave-runner` (lib) due to 4 previous errors
warning: build failed, waiting for other jobs to finish...
error: failed to compile `fortanix-sgx-tools v0.5.1`, intermediate artifacts can be found at `/tmp/cargo-install4nMEAd`.
To reuse those artifacts with a future compilation, set the environment variable `CARGO_TARGET_DIR` to that path.
error: failed to compile `sgxs-tools v0.9.0`, intermediate artifacts can be found at `/tmp/cargo-installPopRZF`.
To reuse those artifacts with a future compilation, set the environment variable `CARGO_TARGET_DIR` to that path.
     Summary Failed to install fortanix-sgx-tools, sgxs-tools (see error(s) above).
error: some crates failed to install

To Reproduce:
Steps to reproduce the behavior:

  1. run cargo install fortanix-sgx-tools sgxs-tools

Expected behavior:
fortanix-sgx-tools and sgxs-tools are installed successfully

Reproducibility:

  • [x ] Always
  • Sometimes
  • Rarely

Environment:

  • OS: Ubuntu
  • Version: 24.04

Severity:

  • Critical
  • Major
  • Normal
  • Minor

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions