Skip to content

Commit ce289c6

Browse files
committed
Resolve breakage
1 parent 89e34d3 commit ce289c6

File tree

7 files changed

+46
-61
lines changed

7 files changed

+46
-61
lines changed

src/librustc_codegen_llvm/attributes.rs

+23-18
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,28 @@ pub fn non_lazy_bind(sess: &Session, llfn: &'ll Value) {
144144
}
145145
}
146146

147+
pub(crate) fn default_optimisation_attrs(sess: &Session, llfn: &'ll Value) {
148+
match sess.opts.optimize {
149+
OptLevel::Size => {
150+
llvm::Attribute::MinSize.unapply_llfn(Function, llfn);
151+
llvm::Attribute::OptimizeForSize.apply_llfn(Function, llfn);
152+
llvm::Attribute::OptimizeNone.unapply_llfn(Function, llfn);
153+
},
154+
OptLevel::SizeMin => {
155+
llvm::Attribute::MinSize.apply_llfn(Function, llfn);
156+
llvm::Attribute::OptimizeForSize.apply_llfn(Function, llfn);
157+
llvm::Attribute::OptimizeNone.unapply_llfn(Function, llfn);
158+
}
159+
OptLevel::No => {
160+
llvm::Attribute::MinSize.unapply_llfn(Function, llfn);
161+
llvm::Attribute::OptimizeForSize.unapply_llfn(Function, llfn);
162+
llvm::Attribute::OptimizeNone.unapply_llfn(Function, llfn);
163+
}
164+
_ => {}
165+
}
166+
}
167+
168+
147169
/// Composite function which sets LLVM attributes for function depending on its AST (`#[attribute]`)
148170
/// attributes.
149171
pub fn from_fn_attrs(
@@ -157,24 +179,7 @@ pub fn from_fn_attrs(
157179

158180
match codegen_fn_attrs.optimize {
159181
OptimizeAttr::None => {
160-
match cx.tcx.sess.opts.optimize {
161-
OptLevel::Size => {
162-
llvm::Attribute::MinSize.unapply_llfn(Function, llfn);
163-
llvm::Attribute::OptimizeForSize.apply_llfn(Function, llfn);
164-
llvm::Attribute::OptimizeNone.unapply_llfn(Function, llfn);
165-
},
166-
OptLevel::SizeMin => {
167-
llvm::Attribute::MinSize.apply_llfn(Function, llfn);
168-
llvm::Attribute::OptimizeForSize.apply_llfn(Function, llfn);
169-
llvm::Attribute::OptimizeNone.unapply_llfn(Function, llfn);
170-
}
171-
OptLevel::No => {
172-
llvm::Attribute::MinSize.unapply_llfn(Function, llfn);
173-
llvm::Attribute::OptimizeForSize.unapply_llfn(Function, llfn);
174-
llvm::Attribute::OptimizeNone.unapply_llfn(Function, llfn);
175-
}
176-
_ => {}
177-
}
182+
default_optimisation_attrs(cx.tcx.sess, llfn);
178183
}
179184
OptimizeAttr::Speed => {
180185
llvm::Attribute::MinSize.unapply_llfn(Function, llfn);

src/librustc_codegen_llvm/declare.rs

+2-22
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use llvm;
1515
use llvm::AttributePlace::Function;
1616
use rustc::ty::{self, PolyFnSig};
1717
use rustc::ty::layout::LayoutOf;
18-
use rustc::session::config::{Sanitizer, OptLevel};
18+
use rustc::session::config::Sanitizer;
1919
use rustc_data_structures::small_c_str::SmallCStr;
2020
use abi::{FnType, FnTypeExt};
2121
use attributes;
@@ -65,28 +65,8 @@ fn declare_raw_fn(
6565
}
6666
}
6767

68-
// FIXME(opt): this is kinda duplicated with similar code in attributes::from_fn_attrs…
69-
match cx.tcx.sess.opts.optimize {
70-
OptLevel::Size => {
71-
llvm::Attribute::MinSize.unapply_llfn(Function, llfn);
72-
llvm::Attribute::OptimizeForSize.apply_llfn(Function, llfn);
73-
llvm::Attribute::OptimizeNone.unapply_llfn(Function, llfn);
74-
},
75-
OptLevel::SizeMin => {
76-
llvm::Attribute::MinSize.apply_llfn(Function, llfn);
77-
llvm::Attribute::OptimizeForSize.apply_llfn(Function, llfn);
78-
llvm::Attribute::OptimizeNone.unapply_llfn(Function, llfn);
79-
}
80-
OptLevel::No => {
81-
llvm::Attribute::MinSize.unapply_llfn(Function, llfn);
82-
llvm::Attribute::OptimizeForSize.unapply_llfn(Function, llfn);
83-
llvm::Attribute::OptimizeNone.unapply_llfn(Function, llfn);
84-
}
85-
_ => {}
86-
}
87-
68+
attributes::default_optimisation_attrs(cx.tcx.sess, llfn);
8869
attributes::non_lazy_bind(cx.sess(), llfn);
89-
9070
llfn
9171
}
9272

src/librustc_typeck/collect.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2379,7 +2379,7 @@ fn codegen_fn_attrs<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, id: DefId) -> Codegen
23792379
if attr.path != "optimize" {
23802380
return ia;
23812381
}
2382-
let err = |sp, s| span_err!(tcx.sess.diagnostic(), sp, E0720, "{}", s);
2382+
let err = |sp, s| span_err!(tcx.sess.diagnostic(), sp, E0722, "{}", s);
23832383
match attr.meta().map(|i| i.node) {
23842384
Some(MetaItemKind::Word) => {
23852385
err(attr.span, "expected one argument");

src/librustc_typeck/diagnostics.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -4719,5 +4719,5 @@ register_diagnostics! {
47194719
E0645, // trait aliases not finished
47204720
E0698, // type inside generator must be known in this context
47214721
E0719, // duplicate values for associated type binding
4722-
E0720, // Malformed #[optimize] attribute
4722+
E0722, // Malformed #[optimize] attribute
47234723
}

src/libsyntax/feature_gate.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1219,7 +1219,7 @@ pub const BUILTIN_ATTRIBUTES: &[(&str, AttributeType, AttributeTemplate, Attribu
12191219
cfg_fn!(alloc_error_handler))),
12201220

12211221
// RFC 2412
1222-
("optimize", Whitelisted, Gated(Stability::Unstable,
1222+
("optimize", Whitelisted, template!(List: "size|speed"), Gated(Stability::Unstable,
12231223
"optimize_attribute",
12241224
"#[optimize] attribute is an unstable feature",
12251225
cfg_fn!(optimize_attribute))),
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,3 @@
1-
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
2-
// file at the top-level directory of this distribution and at
3-
// http://rust-lang.org/COPYRIGHT.
4-
//
5-
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6-
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7-
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8-
// option. This file may not be copied, modified, or distributed
9-
// except according to those terms.
101
#![crate_type="rlib"]
112
#![optimize(speed)] //~ ERROR #54882
123

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

22-
#[optimize(banana)] //~ ERROR #54882
13+
#[optimize(banana)]
14+
//~^ ERROR #54882
15+
//~| ERROR E0722
2316
fn not_known() {}
2417

2518
}
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,50 @@
11
error[E0658]: #[optimize] attribute is an unstable feature (see issue #54882)
2-
--> $DIR/feature-gate-optimize_attribute.rs:16:1
2+
--> $DIR/feature-gate-optimize_attribute.rs:7:1
33
|
44
LL | #[optimize(size)] //~ ERROR #54882
55
| ^^^^^^^^^^^^^^^^^
66
|
77
= help: add #![feature(optimize_attribute)] to the crate attributes to enable
88

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

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

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

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

41-
error: aborting due to 5 previous errors
41+
error[E0722]: invalid argument
42+
--> $DIR/feature-gate-optimize_attribute.rs:13:12
43+
|
44+
LL | #[optimize(banana)]
45+
| ^^^^^^
46+
47+
error: aborting due to 6 previous errors
4248

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

0 commit comments

Comments
 (0)