about summary refs log tree commit diff
path: root/src/comp/driver
diff options
context:
space:
mode:
authorHaitao Li <lihaitao@gmail.com>2012-01-19 20:29:50 +0800
committerHaitao Li <lihaitao@gmail.com>2012-01-19 20:31:43 +0800
commitd699db699a07d5bb80d5d08508540b0aba6e1026 (patch)
treeca0f6e9a2dd14c469d8e875f8c4b1d5782a35cb8 /src/comp/driver
parent7ffb2cb7e8d3f1845455a51f83fde3fd4759790c (diff)
downloadrust-d699db699a07d5bb80d5d08508540b0aba6e1026.tar.gz
rust-d699db699a07d5bb80d5d08508540b0aba6e1026.zip
rustc: Refactor lint check and avoid a segv fault
The segv fault issue is #1566
Diffstat (limited to 'src/comp/driver')
-rw-r--r--src/comp/driver/driver.rs13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/comp/driver/driver.rs b/src/comp/driver/driver.rs
index 6c2a646f35d..ea961f917e5 100644
--- a/src/comp/driver/driver.rs
+++ b/src/comp/driver/driver.rs
@@ -203,9 +203,14 @@ fn compile_upto(sess: session, cfg: ast::crate_cfg,
         bind last_use::find_last_uses(crate, def_map, ref_map, ty_cx));
     time(time_passes, "kind checking",
          bind kind::check_crate(ty_cx, method_map, last_uses, crate));
-    if vec::len(sess.opts.lint_opts) > 0u {
-        let timer = bind time(time_passes, _, _);
-        lint::check_crate(ty_cx, crate, sess.opts.lint_opts, timer)
+
+    vec::iter(sess.opts.lint_opts) {|lopt|
+        alt lopt {
+          ctypes {
+            time(time_passes, "ctypes usage checking",
+                 bind lint::check_ctypes(ty_cx, crate))
+          }
+        }
     }
 
     if upto == cu_no_trans { ret {crate: crate, tcx: some(ty_cx), src: src}; }
@@ -384,7 +389,7 @@ fn build_session_options(match: getopts::match,
 
     let parse_only = opt_present(match, "parse-only");
     let no_trans = opt_present(match, "no-trans");
-    let lint_opts : [lint::option] = [];
+    let lint_opts = [];
     if !opt_present(match, "no-lint-ctypes") {
         lint_opts += [lint::ctypes];
     }