Add disclaimer on size assertion macro

Sometimes people are inspired by rustc to add size assertions to their
code and copy the macro. This is bad because it causes hard build
errors. rustc happens to be special where it makes this okay.
This commit is contained in:
Nilstrieb 2023-08-22 06:57:36 +00:00
parent 32aa40538e
commit 1b9159e448
1 changed files with 7 additions and 0 deletions

View File

@ -29,6 +29,13 @@ pub use {idx::Idx, slice::IndexSlice, vec::IndexVec};
pub use rustc_macros::newtype_index;
/// Type size assertion. The first argument is a type and the second argument is its expected size.
/// Note to the reader: Emitting hard errors from size assertions like this is generally not
/// recommended, especially in libraries, because they can cause build failures if the layout
/// algorithm or dependencies change. Here in rustc we control the toolchain and layout algorithm,
/// so the former is not a problem. For the latter we have a lockfile as rustc is an application and
/// precompiled library.
///
/// Short version: Don't copy this macro into your own code. Use a `#[test]` instead.
#[macro_export]
macro_rules! static_assert_size {
($ty:ty, $size:expr) => {