Skip to content

Commit 256048a

Browse files
committed
---
yaml --- r: 5692 b: refs/heads/master c: 100e026 h: refs/heads/master v: v3
1 parent 2f4fafd commit 256048a

File tree

2 files changed

+25
-10
lines changed

2 files changed

+25
-10
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: b7db0f12375c40dd0d8a92cf57b6a441d3758635
2+
refs/heads/master: 100e0264b2a2e4e7d8f27b4ed25af8cb7b4a8c3c

trunk/src/comp/driver/rustc.rs

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,19 @@ fn time<@T>(do_it: bool, what: str, thunk: fn() -> T) -> T {
9898
ret rv;
9999
}
100100

101+
// FIXME (issue #1005): Needed to work around a segfault. If |time| is used
102+
// instead, we crash.
103+
fn time_unit(do_it: bool, what: str, thunk: fn()) {
104+
if !do_it { ret thunk(); }
105+
let start = std::time::precise_time_s();
106+
let rv = thunk();
107+
let end = std::time::precise_time_s();
108+
log_err #fmt["time: %s took %s s", what,
109+
common::float_to_str(end - start, 3u)];
110+
ret rv;
111+
}
112+
113+
101114
fn compile_input(sess: session::session, cfg: ast::crate_cfg, input: str,
102115
output: str) {
103116
let time_passes = sess.get_opts().time_passes;
@@ -119,36 +132,38 @@ fn compile_input(sess: session::session, cfg: ast::crate_cfg, input: str,
119132
let ast_map =
120133
time(time_passes, "ast indexing",
121134
bind middle::ast_map::map_crate(*crate));
122-
time(time_passes, "external crate/lib resolution",
123-
bind creader::read_crates(sess, *crate));
135+
time_unit(time_passes, "external crate/lib resolution",
136+
bind creader::read_crates(sess, *crate));
124137
let {def_map: def_map, ext_map: ext_map} =
125138
time(time_passes, "resolution",
126139
bind resolve::resolve_crate(sess, ast_map, crate));
127140
let freevars =
128141
time(time_passes, "freevar finding",
129142
bind freevars::annotate_freevars(def_map, crate));
130143
let ty_cx = ty::mk_ctxt(sess, def_map, ext_map, ast_map, freevars);
131-
time(time_passes, "typechecking", bind typeck::check_crate(ty_cx, crate));
132-
time(time_passes, "alt checking",
144+
time_unit(time_passes, "typechecking", bind
145+
typeck::check_crate(ty_cx, crate));
146+
time_unit(time_passes, "alt checking",
133147
bind middle::check_alt::check_crate(ty_cx, crate));
134148
if sess.get_opts().run_typestate {
135-
time(time_passes, "typestate checking",
136-
bind middle::tstate::ck::check_crate(ty_cx, crate));
149+
time_unit(time_passes, "typestate checking",
150+
bind middle::tstate::ck::check_crate(ty_cx, crate));
137151
}
138152
let mut_map =
139153
time(time_passes, "mutability checking",
140154
bind middle::mut::check_crate(ty_cx, crate));
141155
let copy_map =
142156
time(time_passes, "alias checking",
143157
bind middle::alias::check_crate(ty_cx, crate));
144-
time(time_passes, "kind checking", bind kind::check_crate(ty_cx, crate));
158+
time_unit(time_passes, "kind checking",
159+
bind kind::check_crate(ty_cx, crate));
145160
if sess.get_opts().no_trans { ret; }
146161
let llmod =
147162
time(time_passes, "translation",
148163
bind trans::trans_crate(sess, crate, ty_cx, output, ast_map,
149164
mut_map, copy_map));
150-
time(time_passes, "LLVM passes",
151-
bind link::write::run_passes(sess, llmod, output));
165+
time_unit(time_passes, "LLVM passes",
166+
bind link::write::run_passes(sess, llmod, output));
152167
}
153168

154169
fn pretty_print_input(sess: session::session, cfg: ast::crate_cfg, input: str,

0 commit comments

Comments
 (0)