File tree 1 file changed +12
-1
lines changed
1 file changed +12
-1
lines changed Original file line number Diff line number Diff line change @@ -658,9 +658,18 @@ pub use macros::exception;
658
658
///
659
659
/// The function must have the signature of `unsafe fn()`.
660
660
///
661
- /// The function passed will be called before static variables are initialized. Any access of static
661
+ /// # Safety
662
+ ///
663
+ /// The function will be called before static variables are initialized. Any access of static
662
664
/// variables will result in undefined behavior.
663
665
///
666
+ /// **Warning**: Due to [rvalue static promotion][rfc1414] static variables may be accessed whenever
667
+ /// taking a reference to a constant. This means that even trivial expressions such as `&1` in the
668
+ /// `#[pre_init]` function *or any code called by it* will cause **immediate undefined behavior**.
669
+ ///
670
+ /// Users are advised to only use the `#[pre_init]` feature when absolutely necessary as these
671
+ /// constraints make safe usage difficult.
672
+ ///
664
673
/// # Examples
665
674
///
666
675
/// ```
@@ -672,6 +681,8 @@ pub use macros::exception;
672
681
///
673
682
/// # fn main() {}
674
683
/// ```
684
+ ///
685
+ /// [rfc1414]: https://github.com/rust-lang/rfcs/blob/master/text/1414-rvalue_static_promotion.md
675
686
pub use macros:: pre_init;
676
687
677
688
#[ export_name = "error: cortex-m-rt appears more than once in the dependency graph" ]
You can’t perform that action at this time.
0 commit comments