r[attributes.limits]
Limits
The following attributes affect compile-time limits.
r[attributes.limits.recursion_limit]
The recursion_limit attribute
r[attributes.limits.recursion_limit.intro]
The recursion_limit attribute may be applied at the crate level to set the
maximum depth for potentially infinitely-recursive compile-time operations
like macro expansion or auto-dereference.
r[attributes.limits.recursion_limit.syntax] It uses the [MetaNameValueStr] syntax to specify the recursion depth.
[!NOTE] The default in
rustcis 128.
// This fails to expand because it requires a recursion depth greater than 4.
a!
// This fails because it requires two recursive steps to auto-dereference.
;
r[attributes.limits.type_length_limit]
The type_length_limit attribute
r[attributes.limits.type_length_limit.intro]
The type_length_limit attribute sets the maximum number of type substitutions allowed when constructing a concrete type during monomorphization.
[!NOTE]
rustconly enforces the limit when the nightly-Zenforce-type-length-limitflag is active.For more information, see Rust PR #127670.
[!EXAMPLE]
// This fails to compile because monomorphizing to // `f::<((((i32,), i32), i32), i32)>` requires more // than 4 type elements. f;
[!NOTE] The default value in
rustcis1048576.
r[attributes.limits.type_length_limit.syntax]
The type_length_limit attribute uses the [MetaNameValueStr] syntax. The value in the string must be a non-negative number.
r[attributes.limits.type_length_limit.allowed-positions]
The type_length_limit attribute may only be applied to the crate root.
[!NOTE]
rustcignores use in other positions but lints against it. This may become an error in the future.
r[attributes.limits.type_length_limit.duplicates]
Only the first use of type_length_limit on an item has effect.
[!NOTE]
rustclints against any use following the first. This may become an error in the future.