diff --git a/src/librustc/ty/context.rs b/src/librustc/ty/context.rs index 8a58dad292420..3da653eb7ade9 100644 --- a/src/librustc/ty/context.rs +++ b/src/librustc/ty/context.rs @@ -14,7 +14,7 @@ use dep_graph::DepGraph; use dep_graph::{DepNode, DepConstructor}; use errors::DiagnosticBuilder; use session::Session; -use session::config::{BorrowckMode, OutputFilenames}; +use session::config::{BorrowckMode, OutputFilenames, OptLevel}; use middle; use hir::{TraitCandidate, HirId, ItemLocalId}; use hir::def::{Def, Export}; @@ -1503,8 +1503,18 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> { #[inline] pub fn share_generics(self) -> bool { match self.sess.opts.debugging_opts.share_generics { - Some(true) => true, - Some(false) | None => false, + Some(setting) => setting, + None => { + self.sess.opts.incremental.is_some() || + match self.sess.opts.optimize { + OptLevel::No | + OptLevel::Less | + OptLevel::Size | + OptLevel::SizeMin => true, + OptLevel::Default | + OptLevel::Aggressive => false, + } + } } } }