Skip to content

Commit

Permalink
Rollup merge of rust-lang#115087 - Nilstrieb:sizeassert, r=fee1-dead
Browse files Browse the repository at this point in the history
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.

For example, see rust-lang#115028 (not sure whether they were directly inspired by this function), but I think I've also seen other cases.
  • Loading branch information
compiler-errors authored Aug 22, 2023
2 parents 0e84d42 + d16e9c3 commit 3906645
Showing 1 changed file with 12 additions and 0 deletions.
12 changes: 12 additions & 0 deletions compiler/rustc_index/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,18 @@ 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.
///
/// <div class="warning">
///
/// 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.
///
/// </div>
#[macro_export]
macro_rules! static_assert_size {
($ty:ty, $size:expr) => {
Expand Down

0 comments on commit 3906645

Please sign in to comment.