Remove const eval limit and implement an exponential backoff lint instead
This commit is contained in:
parent
578bcbc2b4
commit
05eae08233
41 changed files with 325 additions and 261 deletions
|
@ -3357,6 +3357,7 @@ declare_lint_pass! {
|
|||
LARGE_ASSIGNMENTS,
|
||||
LATE_BOUND_LIFETIME_ARGUMENTS,
|
||||
LEGACY_DERIVE_HELPERS,
|
||||
LONG_RUNNING_CONST_EVAL,
|
||||
LOSSY_PROVENANCE_CASTS,
|
||||
MACRO_EXPANDED_MACRO_EXPORTS_ACCESSED_BY_ABSOLUTE_PATHS,
|
||||
MACRO_USE_EXTERN_CRATE,
|
||||
|
@ -3426,6 +3427,43 @@ declare_lint_pass! {
|
|||
]
|
||||
}
|
||||
|
||||
declare_lint! {
|
||||
/// The `long_running_const_eval` lint is emitted when const
|
||||
/// eval is running for a long time to ensure rustc terminates
|
||||
/// even if you accidentally wrote an infinite loop.
|
||||
///
|
||||
/// ### Example
|
||||
///
|
||||
/// ```rust,compile_fail
|
||||
/// const FOO: () = loop {};
|
||||
/// ```
|
||||
///
|
||||
/// {{produces}}
|
||||
///
|
||||
/// ### Explanation
|
||||
///
|
||||
/// Loops allow const evaluation to compute arbitrary code, but may also
|
||||
/// cause infinite loops or just very long running computations.
|
||||
/// Users can enable long running computations by allowing the lint
|
||||
/// on individual constants or for entire crates.
|
||||
///
|
||||
/// ### Unconditional warnings
|
||||
///
|
||||
/// Note that regardless of whether the lint is allowed or set to warn,
|
||||
/// the compiler will issue warnings if constant evaluation runs significantly
|
||||
/// longer than this lint's limit. These warnings are also shown to downstream
|
||||
/// users from crates.io or similar registries. If you are above the lint's limit,
|
||||
/// both you and downstream users might be exposed to these warnings.
|
||||
/// They might also appear on compiler updates, as the compiler makes minor changes
|
||||
/// about how complexity is measured: staying below the limit ensures that there
|
||||
/// is enough room, and given that the lint is disabled for people who use your
|
||||
/// dependency it means you will be the only one to get the warning and can put
|
||||
/// out an update in your own time.
|
||||
pub LONG_RUNNING_CONST_EVAL,
|
||||
Deny,
|
||||
"detects long const eval operations"
|
||||
}
|
||||
|
||||
declare_lint! {
|
||||
/// The `unused_doc_comments` lint detects doc comments that aren't used
|
||||
/// by `rustdoc`.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue