Skip to content

Rustup #364

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 30 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
2671cf3
Update to some cleanups in rustc
oli-obk Dec 15, 2017
a23e587
stop using Instance::def_ty
arielb1 Dec 17, 2017
5147655
Merge branch 'master' into def_ty
oli-obk Dec 19, 2017
30496f5
update compiletest dependency
dwrensha Dec 31, 2017
03aa876
pass typecheck
dwrensha Jan 2, 2018
cabdc55
update log deps
dwrensha Jan 6, 2018
33af320
update for rust/47205
dwrensha Jan 15, 2018
d289c0f
partially deal with rust/46479
dwrensha Jan 15, 2018
9e04368
Rustup
bjorn3 Jan 14, 2018
3e339bc
rustup
bjorn3 Jan 27, 2018
9be04c0
Rustup
bjorn3 Mar 17, 2018
a204cb4
Add stack guard shim
bjorn3 Mar 17, 2018
aa5972d
Get the tests one step further
oli-obk Mar 18, 2018
1e094e5
WIP fix alignment issue
bjorn3 Mar 18, 2018
3038274
Dont claim to have marked static initialized
bjorn3 Mar 19, 2018
bad9fa5
Use elem align as src align in copy intrinsic
bjorn3 Mar 19, 2018
5db2aba
Hack: copy init_static from rustc CompileTimeEvaluator to try to fix …
bjorn3 Mar 19, 2018
896996b
Maybe prevent marking statics as immutable
bjorn3 Mar 19, 2018
907e67f
Fix init_static
bjorn3 Mar 23, 2018
5831309
travis: cache build dir
bjorn3 Mar 23, 2018
a86348b
Fix it
bjorn3 Mar 23, 2018
57e63b8
Fix (try 2)
bjorn3 Mar 23, 2018
654cd94
FIx (try 3)
bjorn3 Mar 23, 2018
6e60b79
Fix (try 4)
bjorn3 Mar 23, 2018
3656c03
Partially fix it
bjorn3 Mar 24, 2018
2137351
Rustup
bjorn3 Mar 31, 2018
5b8781c
Fix some more tests with some unsafe code
bjorn3 Apr 4, 2018
054b0db
Remove unsafe code
bjorn3 Apr 7, 2018
77413d7
Some cleanups
bjorn3 Apr 7, 2018
2e1b165
Update Cargo.lock and some improvements
bjorn3 Apr 7, 2018
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
language: rust
cache: cargo
rust:
- nightly
before_script:
Expand Down
6 changes: 4 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,14 @@ path = "miri/lib.rs"

[dependencies]
byteorder = { version = "1.1", features = ["i128"]}
cargo_metadata = { version = "0.2", optional = true }
cargo_metadata = { version = "0.5", optional = true }
regex = "0.2.2"
lazy_static = "1.0"
env_logger = "0.5.0-rc.1"
log = "0.4"

[features]
cargo_miri = ["cargo_metadata"]

[dev-dependencies]
compiletest_rs = { version = "0.3.3", features = ["tmp"] }
compiletest_rs = { version = "0.3.4", features = ["tmp"] }
4 changes: 3 additions & 1 deletion miri/bin/cargo-miri.rs
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,9 @@ fn main() {

let home = option_env!("RUSTUP_HOME").or(option_env!("MULTIRUST_HOME"));
let toolchain = option_env!("RUSTUP_TOOLCHAIN").or(option_env!("MULTIRUST_TOOLCHAIN"));
let sys_root = if let (Some(home), Some(toolchain)) = (home, toolchain) {
let sys_root = if let Ok(sysroot) = ::std::env::var("MIRI_SYSROOT") {
sysroot
} else if let (Some(home), Some(toolchain)) = (home, toolchain) {
format!("{}/toolchains/{}", home, toolchain)
} else {
option_env!("RUST_SYSROOT")
Expand Down
88 changes: 24 additions & 64 deletions miri/bin/miri.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
#![feature(rustc_private, i128_type)]
#![feature(rustc_private)]

extern crate getopts;
extern crate miri;
extern crate rustc;
extern crate rustc_driver;
extern crate rustc_errors;
extern crate rustc_trans_utils;
extern crate env_logger;
extern crate log_settings;
extern crate syntax;
Expand All @@ -17,7 +18,8 @@ use rustc_driver::driver::{CompileState, CompileController};
use rustc::session::config::{self, Input, ErrorOutputType};
use rustc::hir::{self, itemlikevisit};
use rustc::ty::TyCtxt;
use syntax::ast::{self, MetaItemKind, NestedMetaItemKind};
use rustc_trans_utils::trans_crate::TransCrate;
use syntax::ast;
use std::path::PathBuf;

struct MiriCompilerCalls {
Expand Down Expand Up @@ -61,14 +63,15 @@ impl<'a> CompilerCalls<'a> for MiriCompilerCalls {
}
fn late_callback(
&mut self,
trans: &TransCrate,
matches: &getopts::Matches,
sess: &Session,
cstore: &CrateStore,
input: &Input,
odir: &Option<PathBuf>,
ofile: &Option<PathBuf>,
) -> Compilation {
self.default.late_callback(matches, sess, cstore, input, odir, ofile)
self.default.late_callback(trans, matches, sess, cstore, input, odir, ofile)
}
fn build_controller(
&mut self,
Expand Down Expand Up @@ -98,11 +101,9 @@ fn after_analysis<'a, 'tcx>(state: &mut CompileState<'a, 'tcx>) {
state.session.abort_if_errors();

let tcx = state.tcx.unwrap();
let limits = resource_limits_from_attributes(state);

if std::env::args().any(|arg| arg == "--test") {
struct Visitor<'a, 'tcx: 'a>(
miri::ResourceLimits,
TyCtxt<'a, 'tcx, 'tcx>,
&'a CompileState<'a, 'tcx>
);
Expand All @@ -113,21 +114,21 @@ fn after_analysis<'a, 'tcx>(state: &mut CompileState<'a, 'tcx>) {
attr.name().map_or(false, |n| n == "test")
})
{
let did = self.1.hir.body_owner_def_id(body_id);
let did = self.0.hir.body_owner_def_id(body_id);
println!(
"running test: {}",
self.1.def_path_debug_str(did),
self.0.def_path_debug_str(did),
);
miri::eval_main(self.1, did, None, self.0);
self.2.session.abort_if_errors();
miri::eval_main(self.0, did, None);
self.1.session.abort_if_errors();
}
}
}
fn visit_trait_item(&mut self, _trait_item: &'hir hir::TraitItem) {}
fn visit_impl_item(&mut self, _impl_item: &'hir hir::ImplItem) {}
}
state.hir_crate.unwrap().visit_all_item_likes(
&mut Visitor(limits, tcx, state),
&mut Visitor(tcx, state),
);
} else if let Some((entry_node_id, _)) = *state.session.entry_fn.borrow() {
let entry_def_id = tcx.hir.local_def_id(entry_node_id);
Expand All @@ -138,91 +139,50 @@ fn after_analysis<'a, 'tcx>(state: &mut CompileState<'a, 'tcx>) {
None
}
});
miri::eval_main(tcx, entry_def_id, start_wrapper, limits);
miri::eval_main(tcx, entry_def_id, start_wrapper);

state.session.abort_if_errors();
} else {
println!("no main function found, assuming auxiliary build");
}
}

fn resource_limits_from_attributes(state: &CompileState) -> miri::ResourceLimits {
let mut limits = miri::ResourceLimits::default();
let krate = state.hir_crate.as_ref().unwrap();
let err_msg = "miri attributes need to be in the form `miri(key = value)`";
let extract_int = |lit: &syntax::ast::Lit| -> u128 {
match lit.node {
syntax::ast::LitKind::Int(i, _) => i,
_ => {
state.session.span_fatal(
lit.span,
"expected an integer literal",
)
}
}
};

for attr in krate.attrs.iter().filter(|a| {
a.name().map_or(false, |n| n == "miri")
})
{
if let Some(items) = attr.meta_item_list() {
for item in items {
if let NestedMetaItemKind::MetaItem(ref inner) = item.node {
if let MetaItemKind::NameValue(ref value) = inner.node {
match &inner.name().as_str()[..] {
"memory_size" => limits.memory_size = extract_int(value) as u64,
"step_limit" => limits.step_limit = extract_int(value) as u64,
"stack_limit" => limits.stack_limit = extract_int(value) as usize,
_ => state.session.span_err(item.span, "unknown miri attribute"),
}
} else {
state.session.span_err(inner.span, err_msg);
}
} else {
state.session.span_err(item.span, err_msg);
}
}
} else {
state.session.span_err(attr.span, err_msg);
}
}
limits
}

fn init_logger() {
let format = |record: &log::LogRecord| {
if record.level() == log::LogLevel::Trace {
let format = |formatter: &mut env_logger::fmt::Formatter, record: &log::Record| {
use std::io::Write;
if record.level() == log::Level::Trace {
// prepend frame number
let indentation = log_settings::settings().indentation;
format!(
writeln!(
formatter,
"{indentation}:{lvl}:{module}: {text}",
lvl = record.level(),
module = record.location().module_path(),
module = record.module_path().unwrap_or("<unknown module>"),
indentation = indentation,
text = record.args(),
)
} else {
format!(
writeln!(
formatter,
"{lvl}:{module}: {text}",
lvl = record.level(),
module = record.location().module_path(),
module = record.module_path().unwrap_or("<unknown_module>"),
text = record.args(),
)
}
};

let mut builder = env_logger::LogBuilder::new();
let mut builder = env_logger::Builder::new();
builder.format(format).filter(
None,
log::LogLevelFilter::Info,
log::LevelFilter::Info,
);

if std::env::var("MIRI_LOG").is_ok() {
builder.parse(&std::env::var("MIRI_LOG").unwrap());
}

builder.init().unwrap();
builder.init();
}

fn find_sysroot() -> String {
Expand Down
Loading