Skip to content

Commit

Permalink
Resolve breakage
Browse files Browse the repository at this point in the history
  • Loading branch information
nagisa committed Jan 25, 2019
1 parent 89e34d3 commit ce289c6
Show file tree
Hide file tree
Showing 7 changed files with 46 additions and 61 deletions.
41 changes: 23 additions & 18 deletions src/librustc_codegen_llvm/attributes.rs
Expand Up @@ -144,6 +144,28 @@ pub fn non_lazy_bind(sess: &Session, llfn: &'ll Value) {
}
}

pub(crate) fn default_optimisation_attrs(sess: &Session, llfn: &'ll Value) {
match sess.opts.optimize {
OptLevel::Size => {
llvm::Attribute::MinSize.unapply_llfn(Function, llfn);
llvm::Attribute::OptimizeForSize.apply_llfn(Function, llfn);
llvm::Attribute::OptimizeNone.unapply_llfn(Function, llfn);
},
OptLevel::SizeMin => {
llvm::Attribute::MinSize.apply_llfn(Function, llfn);
llvm::Attribute::OptimizeForSize.apply_llfn(Function, llfn);
llvm::Attribute::OptimizeNone.unapply_llfn(Function, llfn);
}
OptLevel::No => {
llvm::Attribute::MinSize.unapply_llfn(Function, llfn);
llvm::Attribute::OptimizeForSize.unapply_llfn(Function, llfn);
llvm::Attribute::OptimizeNone.unapply_llfn(Function, llfn);
}
_ => {}
}
}


/// Composite function which sets LLVM attributes for function depending on its AST (`#[attribute]`)
/// attributes.
pub fn from_fn_attrs(
Expand All @@ -157,24 +179,7 @@ pub fn from_fn_attrs(

match codegen_fn_attrs.optimize {
OptimizeAttr::None => {
match cx.tcx.sess.opts.optimize {
OptLevel::Size => {
llvm::Attribute::MinSize.unapply_llfn(Function, llfn);
llvm::Attribute::OptimizeForSize.apply_llfn(Function, llfn);
llvm::Attribute::OptimizeNone.unapply_llfn(Function, llfn);
},
OptLevel::SizeMin => {
llvm::Attribute::MinSize.apply_llfn(Function, llfn);
llvm::Attribute::OptimizeForSize.apply_llfn(Function, llfn);
llvm::Attribute::OptimizeNone.unapply_llfn(Function, llfn);
}
OptLevel::No => {
llvm::Attribute::MinSize.unapply_llfn(Function, llfn);
llvm::Attribute::OptimizeForSize.unapply_llfn(Function, llfn);
llvm::Attribute::OptimizeNone.unapply_llfn(Function, llfn);
}
_ => {}
}
default_optimisation_attrs(cx.tcx.sess, llfn);
}
OptimizeAttr::Speed => {
llvm::Attribute::MinSize.unapply_llfn(Function, llfn);
Expand Down
24 changes: 2 additions & 22 deletions src/librustc_codegen_llvm/declare.rs
Expand Up @@ -15,7 +15,7 @@ use llvm;
use llvm::AttributePlace::Function;
use rustc::ty::{self, PolyFnSig};
use rustc::ty::layout::LayoutOf;
use rustc::session::config::{Sanitizer, OptLevel};
use rustc::session::config::Sanitizer;
use rustc_data_structures::small_c_str::SmallCStr;
use abi::{FnType, FnTypeExt};
use attributes;
Expand Down Expand Up @@ -65,28 +65,8 @@ fn declare_raw_fn(
}
}

// FIXME(opt): this is kinda duplicated with similar code in attributes::from_fn_attrs…
match cx.tcx.sess.opts.optimize {
OptLevel::Size => {
llvm::Attribute::MinSize.unapply_llfn(Function, llfn);
llvm::Attribute::OptimizeForSize.apply_llfn(Function, llfn);
llvm::Attribute::OptimizeNone.unapply_llfn(Function, llfn);
},
OptLevel::SizeMin => {
llvm::Attribute::MinSize.apply_llfn(Function, llfn);
llvm::Attribute::OptimizeForSize.apply_llfn(Function, llfn);
llvm::Attribute::OptimizeNone.unapply_llfn(Function, llfn);
}
OptLevel::No => {
llvm::Attribute::MinSize.unapply_llfn(Function, llfn);
llvm::Attribute::OptimizeForSize.unapply_llfn(Function, llfn);
llvm::Attribute::OptimizeNone.unapply_llfn(Function, llfn);
}
_ => {}
}

attributes::default_optimisation_attrs(cx.tcx.sess, llfn);
attributes::non_lazy_bind(cx.sess(), llfn);

llfn
}

Expand Down
2 changes: 1 addition & 1 deletion src/librustc_typeck/collect.rs
Expand Up @@ -2379,7 +2379,7 @@ fn codegen_fn_attrs<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, id: DefId) -> Codegen
if attr.path != "optimize" {
return ia;
}
let err = |sp, s| span_err!(tcx.sess.diagnostic(), sp, E0720, "{}", s);
let err = |sp, s| span_err!(tcx.sess.diagnostic(), sp, E0722, "{}", s);
match attr.meta().map(|i| i.node) {
Some(MetaItemKind::Word) => {
err(attr.span, "expected one argument");
Expand Down
2 changes: 1 addition & 1 deletion src/librustc_typeck/diagnostics.rs
Expand Up @@ -4719,5 +4719,5 @@ register_diagnostics! {
E0645, // trait aliases not finished
E0698, // type inside generator must be known in this context
E0719, // duplicate values for associated type binding
E0720, // Malformed #[optimize] attribute
E0722, // Malformed #[optimize] attribute
}
2 changes: 1 addition & 1 deletion src/libsyntax/feature_gate.rs
Expand Up @@ -1219,7 +1219,7 @@ pub const BUILTIN_ATTRIBUTES: &[(&str, AttributeType, AttributeTemplate, Attribu
cfg_fn!(alloc_error_handler))),

// RFC 2412
("optimize", Whitelisted, Gated(Stability::Unstable,
("optimize", Whitelisted, template!(List: "size|speed"), Gated(Stability::Unstable,
"optimize_attribute",
"#[optimize] attribute is an unstable feature",
cfg_fn!(optimize_attribute))),
Expand Down
13 changes: 3 additions & 10 deletions src/test/ui/feature-gate-optimize_attribute.rs
@@ -1,12 +1,3 @@
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#![crate_type="rlib"]
#![optimize(speed)] //~ ERROR #54882

Expand All @@ -19,7 +10,9 @@ fn size() {}
#[optimize(speed)] //~ ERROR #54882
fn speed() {}

#[optimize(banana)] //~ ERROR #54882
#[optimize(banana)]
//~^ ERROR #54882
//~| ERROR E0722
fn not_known() {}

}
23 changes: 15 additions & 8 deletions src/test/ui/feature-gate-optimize_attribute.stderr
@@ -1,43 +1,50 @@
error[E0658]: #[optimize] attribute is an unstable feature (see issue #54882)
--> $DIR/feature-gate-optimize_attribute.rs:16:1
--> $DIR/feature-gate-optimize_attribute.rs:7:1
|
LL | #[optimize(size)] //~ ERROR #54882
| ^^^^^^^^^^^^^^^^^
|
= help: add #![feature(optimize_attribute)] to the crate attributes to enable

error[E0658]: #[optimize] attribute is an unstable feature (see issue #54882)
--> $DIR/feature-gate-optimize_attribute.rs:19:1
--> $DIR/feature-gate-optimize_attribute.rs:10:1
|
LL | #[optimize(speed)] //~ ERROR #54882
| ^^^^^^^^^^^^^^^^^^
|
= help: add #![feature(optimize_attribute)] to the crate attributes to enable

error[E0658]: #[optimize] attribute is an unstable feature (see issue #54882)
--> $DIR/feature-gate-optimize_attribute.rs:22:1
--> $DIR/feature-gate-optimize_attribute.rs:13:1
|
LL | #[optimize(banana)] //~ ERROR #54882
LL | #[optimize(banana)]
| ^^^^^^^^^^^^^^^^^^^
|
= help: add #![feature(optimize_attribute)] to the crate attributes to enable

error[E0658]: #[optimize] attribute is an unstable feature (see issue #54882)
--> $DIR/feature-gate-optimize_attribute.rs:13:1
--> $DIR/feature-gate-optimize_attribute.rs:4:1
|
LL | #[optimize(size)] //~ ERROR #54882
| ^^^^^^^^^^^^^^^^^
|
= help: add #![feature(optimize_attribute)] to the crate attributes to enable

error[E0658]: #[optimize] attribute is an unstable feature (see issue #54882)
--> $DIR/feature-gate-optimize_attribute.rs:11:1
--> $DIR/feature-gate-optimize_attribute.rs:2:1
|
LL | #![optimize(speed)] //~ ERROR #54882
| ^^^^^^^^^^^^^^^^^^^
|
= help: add #![feature(optimize_attribute)] to the crate attributes to enable

error: aborting due to 5 previous errors
error[E0722]: invalid argument
--> $DIR/feature-gate-optimize_attribute.rs:13:12
|
LL | #[optimize(banana)]
| ^^^^^^

error: aborting due to 6 previous errors

For more information about this error, try `rustc --explain E0658`.
Some errors occurred: E0658, E0722.
For more information about an error, try `rustc --explain E0658`.

0 comments on commit ce289c6

Please sign in to comment.