diff --git a/src/librustc_driver/driver.rs b/src/librustc_driver/driver.rs index 96e9616699d..b017cc649bb 100644 --- a/src/librustc_driver/driver.rs +++ b/src/librustc_driver/driver.rs @@ -118,7 +118,7 @@ pub fn spawn_thread_pool R + sync::Send, R: sync:: } pub fn compile_input( - codegen_backend: Box, + codegen_backend: Box, sess: &Session, cstore: &CStore, input_path: &Option, @@ -399,10 +399,10 @@ pub struct CompileController<'a> { /// Allows overriding default rustc query providers, /// after `default_provide` has installed them. - pub provide: Box, + pub provide: Box, /// Same as `provide`, but only for non-local crates, /// applied after `default_provide_extern`. - pub provide_extern: Box, + pub provide_extern: Box, } impl<'a> CompileController<'a> { @@ -471,10 +471,10 @@ impl<'a> ::CompilerCalls<'a> for CompileController<'a> { } fn late_callback( &mut self, - codegen_backend: &::CodegenBackend, + codegen_backend: &dyn (::CodegenBackend), matches: &::getopts::Matches, sess: &Session, - cstore: &::CrateStore, + cstore: &dyn (::CrateStore), input: &Input, odir: &Option, ofile: &Option, @@ -496,7 +496,7 @@ pub struct PhaseController<'a> { // If true then the compiler will try to run the callback even if the phase // ends with an error. Note that this is not always possible. pub run_callback_on_error: bool, - pub callback: Box, + pub callback: Box, } impl<'a> PhaseController<'a> { @@ -1175,7 +1175,7 @@ pub fn default_provide_extern(providers: &mut ty::query::Providers) { /// miscellaneous analysis passes on the crate. Return various /// structures carrying the results of the analysis. pub fn phase_3_run_analysis_passes<'tcx, F, R>( - codegen_backend: &CodegenBackend, + codegen_backend: &dyn CodegenBackend, control: &CompileController, sess: &'tcx Session, cstore: &'tcx CrateStoreDyn, @@ -1191,7 +1191,7 @@ where F: for<'a> FnOnce( TyCtxt<'a, 'tcx, 'tcx>, ty::CrateAnalysis, - mpsc::Receiver>, + mpsc::Receiver>, CompileResult, ) -> R, { @@ -1324,10 +1324,10 @@ where /// Run the codegen backend, after which the AST and analysis can /// be discarded. pub fn phase_4_codegen<'a, 'tcx>( - codegen_backend: &CodegenBackend, + codegen_backend: &dyn CodegenBackend, tcx: TyCtxt<'a, 'tcx, 'tcx>, - rx: mpsc::Receiver>, -) -> Box { + rx: mpsc::Receiver>, +) -> Box { time(tcx.sess, "resolving dependency formats", || { ::rustc::middle::dependency_format::calculate(tcx) }); diff --git a/src/librustc_driver/lib.rs b/src/librustc_driver/lib.rs index 1078dadce25..0e1ba6e444d 100644 --- a/src/librustc_driver/lib.rs +++ b/src/librustc_driver/lib.rs @@ -14,6 +14,8 @@ //! //! This API is completely unstable and subject to change. +#![deny(bare_trait_objects)] + #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", html_favicon_url = "https://doc.rust-lang.org/favicon.ico", html_root_url = "https://doc.rust-lang.org/nightly/")] @@ -131,7 +133,7 @@ pub mod target_features { /// features is available on the target machine, by querying LLVM. pub fn add_configuration(cfg: &mut ast::CrateConfig, sess: &Session, - codegen_backend: &CodegenBackend) { + codegen_backend: &dyn CodegenBackend) { let tf = Symbol::intern("target_feature"); for feat in codegen_backend.target_features(sess) { @@ -202,7 +204,7 @@ pub fn run(run_compiler: F) -> isize 0 } -fn load_backend_from_dylib(path: &Path) -> fn() -> Box { +fn load_backend_from_dylib(path: &Path) -> fn() -> Box { // Note that we're specifically using `open_global_now` here rather than // `open`, namely we want the behavior on Unix of RTLD_GLOBAL and RTLD_NOW, // where NOW means "bind everything right now" because we don't want @@ -235,12 +237,12 @@ fn load_backend_from_dylib(path: &Path) -> fn() -> Box { } } -pub fn get_codegen_backend(sess: &Session) -> Box { +pub fn get_codegen_backend(sess: &Session) -> Box { static INIT: Once = ONCE_INIT; #[allow(deprecated)] #[no_debug] - static mut LOAD: fn() -> Box = || unreachable!(); + static mut LOAD: fn() -> Box = || unreachable!(); INIT.call_once(|| { let codegen_name = sess.opts.debugging_opts.codegen_backend.as_ref() @@ -264,7 +266,7 @@ pub fn get_codegen_backend(sess: &Session) -> Box { backend } -fn get_codegen_sysroot(backend_name: &str) -> fn() -> Box { +fn get_codegen_sysroot(backend_name: &str) -> fn() -> Box { // For now we only allow this function to be called once as it'll dlopen a // few things, which seems to work best if we only do that once. In // general this assertion never trips due to the once guard in `get_codegen_backend`, @@ -454,9 +456,9 @@ fn get_codegen_sysroot(backend_name: &str) -> fn() -> Box { // See comments on CompilerCalls below for details about the callbacks argument. // The FileLoader provides a way to load files from sources other than the file system. pub fn run_compiler<'a>(args: &[String], - callbacks: Box + sync::Send + 'a>, - file_loader: Option>, - emitter_dest: Option>) + callbacks: Box + sync::Send + 'a>, + file_loader: Option>, + emitter_dest: Option>) -> (CompileResult, Option) { syntax::with_globals(|| { @@ -478,9 +480,9 @@ fn run_compiler_with_pool<'a>( matches: getopts::Matches, sopts: config::Options, cfg: ast::CrateConfig, - mut callbacks: Box + sync::Send + 'a>, - file_loader: Option>, - emitter_dest: Option> + mut callbacks: Box + sync::Send + 'a>, + file_loader: Option>, + emitter_dest: Option> ) -> (CompileResult, Option) { macro_rules! do_or_return {($expr: expr, $sess: expr) => { match $expr { @@ -662,10 +664,10 @@ pub trait CompilerCalls<'a> { /// be called just before actual compilation starts (and before build_controller /// is called), after all arguments etc. have been completely handled. fn late_callback(&mut self, - _: &CodegenBackend, + _: &dyn CodegenBackend, _: &getopts::Matches, _: &Session, - _: &CrateStore, + _: &dyn CrateStore, _: &Input, _: &Option, _: &Option) @@ -870,10 +872,10 @@ impl<'a> CompilerCalls<'a> for RustcDefaultCalls { } fn late_callback(&mut self, - codegen_backend: &CodegenBackend, + codegen_backend: &dyn CodegenBackend, matches: &getopts::Matches, sess: &Session, - cstore: &CrateStore, + cstore: &dyn CrateStore, input: &Input, odir: &Option, ofile: &Option) @@ -979,7 +981,7 @@ pub fn enable_save_analysis(control: &mut CompileController) { impl RustcDefaultCalls { pub fn list_metadata(sess: &Session, - cstore: &CrateStore, + cstore: &dyn CrateStore, matches: &getopts::Matches, input: &Input) -> Compilation { @@ -1007,7 +1009,7 @@ impl RustcDefaultCalls { } - fn print_crate_info(codegen_backend: &CodegenBackend, + fn print_crate_info(codegen_backend: &dyn CodegenBackend, sess: &Session, input: Option<&Input>, odir: &Option, @@ -1486,7 +1488,7 @@ fn parse_crate_attrs<'a>(sess: &'a Session, input: &Input) -> PResult<'a, Vec(f: F) -> Result> +pub fn in_rustc_thread(f: F) -> Result> where F: FnOnce() -> R + Send + 'static, R: Send + 'static, { diff --git a/src/librustc_driver/pretty.rs b/src/librustc_driver/pretty.rs index 711bcfbde2c..6433a93a317 100644 --- a/src/librustc_driver/pretty.rs +++ b/src/librustc_driver/pretty.rs @@ -170,7 +170,7 @@ impl PpSourceMode { hir_map: Option<&hir_map::Map<'tcx>>, f: F) -> A - where F: FnOnce(&PrinterSupport) -> A + where F: FnOnce(&dyn PrinterSupport) -> A { match *self { PpmNormal | PpmEveryBodyLoops | PpmExpanded => { @@ -208,7 +208,7 @@ impl PpSourceMode { id: &str, f: F) -> A - where F: FnOnce(&HirPrinterSupport, &hir::Crate) -> A + where F: FnOnce(&dyn HirPrinterSupport, &hir::Crate) -> A { match *self { PpmNormal => { @@ -265,7 +265,7 @@ trait PrinterSupport: pprust::PpAnn { /// /// (Rust does not yet support upcasting from a trait object to /// an object for one of its super-traits.) - fn pp_ann<'a>(&'a self) -> &'a pprust::PpAnn; + fn pp_ann<'a>(&'a self) -> &'a dyn pprust::PpAnn; } trait HirPrinterSupport<'hir>: pprust_hir::PpAnn { @@ -281,7 +281,7 @@ trait HirPrinterSupport<'hir>: pprust_hir::PpAnn { /// /// (Rust does not yet support upcasting from a trait object to /// an object for one of its super-traits.) - fn pp_ann<'a>(&'a self) -> &'a pprust_hir::PpAnn; + fn pp_ann<'a>(&'a self) -> &'a dyn pprust_hir::PpAnn; /// Computes an user-readable representation of a path, if possible. fn node_path(&self, id: ast::NodeId) -> Option { @@ -305,7 +305,7 @@ impl<'hir> PrinterSupport for NoAnn<'hir> { self.sess } - fn pp_ann<'a>(&'a self) -> &'a pprust::PpAnn { + fn pp_ann<'a>(&'a self) -> &'a dyn pprust::PpAnn { self } } @@ -319,7 +319,7 @@ impl<'hir> HirPrinterSupport<'hir> for NoAnn<'hir> { self.hir_map.as_ref() } - fn pp_ann<'a>(&'a self) -> &'a pprust_hir::PpAnn { + fn pp_ann<'a>(&'a self) -> &'a dyn pprust_hir::PpAnn { self } } @@ -346,7 +346,7 @@ impl<'hir> PrinterSupport for IdentifiedAnnotation<'hir> { self.sess } - fn pp_ann<'a>(&'a self) -> &'a pprust::PpAnn { + fn pp_ann<'a>(&'a self) -> &'a dyn pprust::PpAnn { self } } @@ -397,7 +397,7 @@ impl<'hir> HirPrinterSupport<'hir> for IdentifiedAnnotation<'hir> { self.hir_map.as_ref() } - fn pp_ann<'a>(&'a self) -> &'a pprust_hir::PpAnn { + fn pp_ann<'a>(&'a self) -> &'a dyn pprust_hir::PpAnn { self } } @@ -458,7 +458,7 @@ impl<'a> PrinterSupport for HygieneAnnotation<'a> { self.sess } - fn pp_ann(&self) -> &pprust::PpAnn { + fn pp_ann(&self) -> &dyn pprust::PpAnn { self } } @@ -496,7 +496,7 @@ impl<'b, 'tcx> HirPrinterSupport<'tcx> for TypedAnnotation<'b, 'tcx> { Some(&self.tcx.hir) } - fn pp_ann<'a>(&'a self) -> &'a pprust_hir::PpAnn { + fn pp_ann<'a>(&'a self) -> &'a dyn pprust_hir::PpAnn { self } @@ -896,7 +896,7 @@ pub fn print_after_parsing(sess: &Session, if let PpmSource(s) = ppm { // Silently ignores an identified node. - let out: &mut Write = &mut out; + let out: &mut dyn Write = &mut out; s.call_with_pp_support(sess, None, move |annotation| { debug!("pretty printing source code {:?}", s); let sess = annotation.sess(); @@ -953,7 +953,7 @@ pub fn print_after_hir_lowering<'tcx, 'a: 'tcx>(sess: &'a Session, match (ppm, opt_uii) { (PpmSource(s), _) => { // Silently ignores an identified node. - let out: &mut Write = &mut out; + let out: &mut dyn Write = &mut out; s.call_with_pp_support(sess, Some(hir_map), move |annotation| { debug!("pretty printing source code {:?}", s); let sess = annotation.sess(); @@ -969,7 +969,7 @@ pub fn print_after_hir_lowering<'tcx, 'a: 'tcx>(sess: &'a Session, } (PpmHir(s), None) => { - let out: &mut Write = &mut out; + let out: &mut dyn Write = &mut out; s.call_with_pp_support_hir(sess, cstore, hir_map, @@ -993,7 +993,7 @@ pub fn print_after_hir_lowering<'tcx, 'a: 'tcx>(sess: &'a Session, } (PpmHirTree(s), None) => { - let out: &mut Write = &mut out; + let out: &mut dyn Write = &mut out; s.call_with_pp_support_hir(sess, cstore, hir_map, @@ -1009,7 +1009,7 @@ pub fn print_after_hir_lowering<'tcx, 'a: 'tcx>(sess: &'a Session, } (PpmHir(s), Some(uii)) => { - let out: &mut Write = &mut out; + let out: &mut dyn Write = &mut out; s.call_with_pp_support_hir(sess, cstore, hir_map, @@ -1043,7 +1043,7 @@ pub fn print_after_hir_lowering<'tcx, 'a: 'tcx>(sess: &'a Session, } (PpmHirTree(s), Some(uii)) => { - let out: &mut Write = &mut out; + let out: &mut dyn Write = &mut out; s.call_with_pp_support_hir(sess, cstore, hir_map, @@ -1137,7 +1137,7 @@ fn print_with_analysis<'tcx, 'a: 'tcx>(sess: &'a Session, Some(code) => { let variants = gather_flowgraph_variants(tcx.sess); - let out: &mut Write = &mut out; + let out: &mut dyn Write = &mut out; print_flowgraph(variants, tcx, code, mode, out) } diff --git a/src/librustc_driver/test.rs b/src/librustc_driver/test.rs index 9808e289f3b..2b30f680092 100644 --- a/src/librustc_driver/test.rs +++ b/src/librustc_driver/test.rs @@ -88,13 +88,13 @@ impl Emitter for ExpectErrorEmitter { } } -fn errors(msgs: &[&str]) -> (Box, usize) { +fn errors(msgs: &[&str]) -> (Box, usize) { let v = msgs.iter().map(|m| m.to_string()).collect(); - (box ExpectErrorEmitter { messages: v } as Box, msgs.len()) + (box ExpectErrorEmitter { messages: v } as Box, msgs.len()) } fn test_env(source_string: &str, - args: (Box, usize), + args: (Box, usize), body: F) where F: FnOnce(Env) { @@ -112,7 +112,7 @@ fn test_env(source_string: &str, fn test_env_with_pool( options: config::Options, source_string: &str, - (emitter, expected_err_count): (Box, usize), + (emitter, expected_err_count): (Box, usize), body: F ) where F: FnOnce(Env)