Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes for Rust 1.81.0 #1333

Merged
merged 8 commits into from
Sep 10, 2024
Merged

Fixes for Rust 1.81.0 #1333

merged 8 commits into from
Sep 10, 2024

Conversation

leighmcculloch
Copy link
Member

@leighmcculloch leighmcculloch commented Sep 10, 2024

What

Fixes for Rust 1.81:

  1. Update semver-checks to 0.35.0.

  2. Don't use the extern function for invoking a contract function when executing tests.

Why

  1. Semver checks is failing to run on the new version of Rust and needs updating.

  2. Rust 1.81.0 changed the behavior of panics on extern "C" functions, such that panics cannot be caught by std::panic::catch_unwind.

    Contracts expose their functions as an extern function that defaults to extern "C". The test environment catches panics inside contract functions and resurfaces them as errors by using catch_unwind.

    The solution used was to make it so that the test environment never calls through the extern function, and instead calls through a non-extern function that does the same work. This seems like the sanest way to take away any dependence / relationship between the test environment and the Rust C-ABI so that any future changes to the C-ABI don't affect the test environment.

    An alternative solution would be to mark the contract function as extern "C-unwind" so that it retained unwind functionality, but that would continue to bind the SDK test environment to behaviour changes in extern fns.

    In the solution in this change the Abi qualifier "C" has been added. When the Abi qualifier is not specified it defaults to "C", but for the sake of being explicit and removing any doubt from a reader it is now specified. The Rust reference confirms that "C" is the default:

    More details on this change to Rust 1.81.0 can be found at:

    Close Rust 1.81.0 causes SIGABRT in test environment #1332

tests/auth/src/lib.rs Outdated Show resolved Hide resolved
@leighmcculloch leighmcculloch marked this pull request as ready for review September 10, 2024 04:05
@leighmcculloch leighmcculloch changed the title Fix for Rust 1.81.0 Fixes for Rust 1.81.0 Sep 10, 2024
@leighmcculloch leighmcculloch added this pull request to the merge queue Sep 10, 2024
Merged via the queue into main with commit 63b1a9f Sep 10, 2024
16 checks passed
@leighmcculloch leighmcculloch deleted the sigabrt branch September 10, 2024 16:43
@tupui
Copy link

tupui commented Sep 10, 2024

Oh great, thanks for the fix! I started getting these in my CI and was not sure if I needed to do something. Looks like I just need to wait for a new release 🙌

@leighmcculloch
Copy link
Member Author

Planning a new release shortly!

@leighmcculloch
Copy link
Member Author

Shortly as in hours, not days.

@tupui
Copy link

tupui commented Sep 10, 2024

Awesome, thanks 🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Rust 1.81.0 causes SIGABRT in test environment
3 participants