diff --git a/src/librustc/metadata/encoder.rs b/src/librustc/metadata/encoder.rs index d1e00867a6a98..662013e16313e 100644 --- a/src/librustc/metadata/encoder.rs +++ b/src/librustc/metadata/encoder.rs @@ -719,7 +719,7 @@ fn purity_static_method_family(p: purity) -> char { fn should_inline(attrs: &[attribute]) -> bool { match attr::find_inline_attr(attrs) { attr::ia_none | attr::ia_never => false, - attr::ia_hint | attr::ia_always => true + attr::ia_maybe | attr::ia_hint | attr::ia_always => true } } diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index f14ea279c2d59..e4dd8627a3b48 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -452,7 +452,7 @@ pub fn set_inline_hint_if_appr(attrs: &[ast::attribute], attr::ia_hint => set_inline_hint(llfn), attr::ia_always => set_always_inline(llfn), attr::ia_never => set_no_inline(llfn), - attr::ia_none => { /* fallthrough */ } + attr::ia_maybe | attr::ia_none => { /* fallthrough */ } } } diff --git a/src/librustc/middle/trans/reachable.rs b/src/librustc/middle/trans/reachable.rs index 62360771f55ac..3720f4b2837e8 100644 --- a/src/librustc/middle/trans/reachable.rs +++ b/src/librustc/middle/trans/reachable.rs @@ -117,7 +117,7 @@ fn traverse_public_item(cx: @mut ctx, item: @item) { } item_fn(_, _, _, ref generics, ref blk) => { if generics.ty_params.len() > 0u || - attr::find_inline_attr(item.attrs) != attr::ia_none { + attr::find_inline_attr(item.attrs) != attr::ia_none { // XXX why is this ia_none? traverse_inline_body(cx, blk); } } @@ -125,7 +125,7 @@ fn traverse_public_item(cx: @mut ctx, item: @item) { for ms.each |m| { if generics.ty_params.len() > 0u || m.generics.ty_params.len() > 0u || - attr::find_inline_attr(m.attrs) != attr::ia_none + attr::find_inline_attr(m.attrs) != attr::ia_none // XXX why is this ia_none? { { let cx = &mut *cx; // FIXME(#6269) reborrow @mut to &mut diff --git a/src/libsyntax/attr.rs b/src/libsyntax/attr.rs index 6ac743d3844d2..719829ed81fcb 100644 --- a/src/libsyntax/attr.rs +++ b/src/libsyntax/attr.rs @@ -304,6 +304,9 @@ pub fn find_linkage_metas(attrs: &[ast::attribute]) -> ~[@ast::meta_item] { #[deriving(Eq)] pub enum inline_attr { ia_none, + // just write the inlining info to crate metadata, don't hint + // LLVM, because that can be too forceful + ia_maybe, ia_hint, ia_always, ia_never, @@ -316,7 +319,9 @@ pub fn find_inline_attr(attrs: &[ast::attribute]) -> inline_attr { match attr.node.value.node { ast::meta_word(@~"inline") => ia_hint, ast::meta_list(@~"inline", ref items) => { - if !find_meta_items_by_name(*items, "always").is_empty() { + if !find_meta_items_by_name(*items, "maybe").is_empty() { + ia_maybe + } else if !find_meta_items_by_name(*items, "always").is_empty() { ia_always } else if !find_meta_items_by_name(*items, "never").is_empty() { ia_never