build_error.rs 1.3 KB

12345678910111213141516171819202122232425262728293031
  1. // SPDX-License-Identifier: GPL-2.0
  2. //! Build-time error.
  3. //!
  4. //! This crate provides a [const function][const-functions] `build_error`, which will panic in
  5. //! compile-time if executed in [const context][const-context], and will cause a build error
  6. //! if not executed at compile time and the optimizer does not optimise away the call.
  7. //!
  8. //! It is used by `build_assert!` in the kernel crate, allowing checking of
  9. //! conditions that could be checked statically, but could not be enforced in
  10. //! Rust yet (e.g. perform some checks in [const functions][const-functions], but those
  11. //! functions could still be called in the runtime).
  12. //!
  13. //! For details on constant evaluation in Rust, please see the [Reference][const-eval].
  14. //!
  15. //! [const-eval]: https://doc.rust-lang.org/reference/const_eval.html
  16. //! [const-functions]: https://doc.rust-lang.org/reference/const_eval.html#const-functions
  17. //! [const-context]: https://doc.rust-lang.org/reference/const_eval.html#const-context
  18. #![no_std]
  19. /// Panics if executed in [const context][const-context], or triggers a build error if not.
  20. ///
  21. /// [const-context]: https://doc.rust-lang.org/reference/const_eval.html#const-context
  22. #[inline(never)]
  23. #[cold]
  24. #[export_name = "rust_build_error"]
  25. #[track_caller]
  26. pub const fn build_error(msg: &'static str) -> ! {
  27. panic!("{}", msg);
  28. }