This repository has been archived by the owner on Jan 24, 2022. It is now read-only.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Now that the
Termination
trait has been implemented (cf. rust-lang/rust#46479) we can narrow downthe return type of
main
to be one of the types that implements theTermination
trait.This RFC proposes only implementing
Termination
for the never type (!
) -- currentlyTermination
is only implemented for the unit type (()
). With this change all programs that linkto
cortex-m-rt
are forced to set the signature ofmain
to befn() -> !
. The rationale here isthat a divergent (never ending) function better matches the logic of microcontroller programs.
When the change is implemented the user will be forced to make
main
into a divergent function.This won't work:
Whereas this would works:
Drawbacks
Diagnostics for the
Termination
feature are rather bad at the moment. If this change isimplemented and you write a program where
main: fn()
but forget to add the#![feature(termination_trait)]
feature gate you get an unhelpful linker error:cc @pftbest