about summary refs log tree commit diff
path: root/src/librustc/middle/recursion_limit.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/librustc/middle/recursion_limit.rs')
-rw-r--r--src/librustc/middle/recursion_limit.rs67
1 files changed, 0 insertions, 67 deletions
diff --git a/src/librustc/middle/recursion_limit.rs b/src/librustc/middle/recursion_limit.rs
deleted file mode 100644
index be530da5910..00000000000
--- a/src/librustc/middle/recursion_limit.rs
+++ /dev/null
@@ -1,67 +0,0 @@
-// Recursion limit.
-//
-// There are various parts of the compiler that must impose arbitrary limits
-// on how deeply they recurse to prevent stack overflow. Users can override
-// this via an attribute on the crate like `#![recursion_limit="22"]`. This pass
-// just peeks and looks for that attribute.
-
-use crate::session::Session;
-use core::num::IntErrorKind;
-use rustc::bug;
-use rustc_span::symbol::{sym, Symbol};
-use syntax::ast;
-
-use rustc_data_structures::sync::Once;
-
-pub fn update_limits(sess: &Session, krate: &ast::Crate) {
-    update_limit(sess, krate, &sess.recursion_limit, sym::recursion_limit, 128);
-    update_limit(sess, krate, &sess.type_length_limit, sym::type_length_limit, 1048576);
-}
-
-fn update_limit(
-    sess: &Session,
-    krate: &ast::Crate,
-    limit: &Once<usize>,
-    name: Symbol,
-    default: usize,
-) {
-    for attr in &krate.attrs {
-        if !attr.check_name(name) {
-            continue;
-        }
-
-        if let Some(s) = attr.value_str() {
-            match s.as_str().parse() {
-                Ok(n) => {
-                    limit.set(n);
-                    return;
-                }
-                Err(e) => {
-                    let mut err = sess.struct_span_err(
-                        attr.span,
-                        "`recursion_limit` must be a non-negative integer",
-                    );
-
-                    let value_span = attr
-                        .meta()
-                        .and_then(|meta| meta.name_value_literal().cloned())
-                        .map(|lit| lit.span)
-                        .unwrap_or(attr.span);
-
-                    let error_str = match e.kind() {
-                        IntErrorKind::Overflow => "`recursion_limit` is too large",
-                        IntErrorKind::Empty => "`recursion_limit` must be a non-negative integer",
-                        IntErrorKind::InvalidDigit => "not a valid integer",
-                        IntErrorKind::Underflow => bug!("`recursion_limit` should never underflow"),
-                        IntErrorKind::Zero => bug!("zero is a valid `recursion_limit`"),
-                        kind => bug!("unimplemented IntErrorKind variant: {:?}", kind),
-                    };
-
-                    err.span_label(value_span, error_str);
-                    err.emit();
-                }
-            }
-        }
-    }
-    limit.set(default);
-}