Skip to content

Commit

Permalink
rustc_expand: Mark inner #![test] attributes as soft-unstable
Browse files Browse the repository at this point in the history
  • Loading branch information
petrochenkov committed Nov 12, 2020
1 parent 9722952 commit cc6baf7
Show file tree
Hide file tree
Showing 8 changed files with 42 additions and 18 deletions.
31 changes: 19 additions & 12 deletions compiler/rustc_expand/src/expand.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ use rustc_errors::{struct_span_err, Applicability, PResult};
use rustc_feature::Features;
use rustc_parse::parser::{AttemptLocalParseRecovery, Parser};
use rustc_parse::validate_attr;
use rustc_session::lint::builtin::UNUSED_DOC_COMMENTS;
use rustc_session::lint::builtin::{SOFT_UNSTABLE, UNUSED_DOC_COMMENTS};
use rustc_session::lint::BuiltinLintDiagnostics;
use rustc_session::parse::{feature_err, ParseSess};
use rustc_session::Limit;
Expand Down Expand Up @@ -1064,17 +1064,24 @@ impl<'a, 'b> InvocationCollector<'a, 'b> {
})
.map(|i| attrs.remove(i));
if let Some(attr) = &attr {
if !self.cx.ecfg.custom_inner_attributes()
&& attr.style == ast::AttrStyle::Inner
&& !attr.has_name(sym::test)
{
feature_err(
&self.cx.sess.parse_sess,
sym::custom_inner_attributes,
attr.span,
"non-builtin inner attributes are unstable",
)
.emit();
if attr.style == ast::AttrStyle::Inner && !self.cx.ecfg.custom_inner_attributes() {
let msg = "non-builtin inner attributes are unstable";
if attr.has_name(sym::test) {
self.cx.sess.parse_sess.buffer_lint(
SOFT_UNSTABLE,
attr.span,
ast::CRATE_NODE_ID,
msg,
);
} else {
feature_err(
&self.cx.sess.parse_sess,
sym::custom_inner_attributes,
attr.span,
msg,
)
.emit();
}
}
}
attr
Expand Down
6 changes: 3 additions & 3 deletions library/std/src/num/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,8 @@ fn test_checked_mul() {

macro_rules! test_is_power_of_two {
($test_name:ident, $T:ident) => {
#[test]
fn $test_name() {
#![test]
assert_eq!((0 as $T).is_power_of_two(), false);
assert_eq!((1 as $T).is_power_of_two(), true);
assert_eq!((2 as $T).is_power_of_two(), true);
Expand All @@ -96,8 +96,8 @@ test_is_power_of_two! { test_is_power_of_two_uint, usize }

macro_rules! test_next_power_of_two {
($test_name:ident, $T:ident) => {
#[test]
fn $test_name() {
#![test]
assert_eq!((0 as $T).next_power_of_two(), 1);
let mut next_power = 1;
for i in 1 as $T..40 {
Expand All @@ -118,8 +118,8 @@ test_next_power_of_two! { test_next_power_of_two_uint, usize }

macro_rules! test_checked_next_power_of_two {
($test_name:ident, $T:ident) => {
#[test]
fn $test_name() {
#![test]
assert_eq!((0 as $T).checked_next_power_of_two(), Some(1));
let smax = $T::MAX >> 1;
assert_eq!(smax.checked_next_power_of_two(), Some(smax + 1));
Expand Down
1 change: 1 addition & 0 deletions src/test/ui/feature-gate/issue-43106-gating-of-test.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// The non-crate level cases are in issue-43106-gating-of-builtin-attrs.rs.

#![allow(soft_unstable)]
#![test = "4200"]
//~^ ERROR cannot determine resolution for the attribute macro `test`

Expand Down
2 changes: 1 addition & 1 deletion src/test/ui/feature-gate/issue-43106-gating-of-test.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error: cannot determine resolution for the attribute macro `test`
--> $DIR/issue-43106-gating-of-test.rs:3:4
--> $DIR/issue-43106-gating-of-test.rs:4:4
|
LL | #![test = "4200"]
| ^^^^
Expand Down
1 change: 1 addition & 0 deletions src/test/ui/issues/issue-28134.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// compile-flags: --test

#![allow(soft_unstable)]
#![test] //~ ERROR cannot determine resolution for the attribute macro `test`
2 changes: 1 addition & 1 deletion src/test/ui/issues/issue-28134.stderr
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error: cannot determine resolution for the attribute macro `test`
--> $DIR/issue-28134.rs:3:4
--> $DIR/issue-28134.rs:4:4
|
LL | #![test]
| ^^^^
Expand Down
5 changes: 5 additions & 0 deletions src/test/ui/proc-macro/proc-macro-gates.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,9 @@ fn attrs() {
//~^ ERROR: custom attributes cannot be applied to expressions
}

fn test_case() {
#![test] //~ ERROR non-builtin inner attributes are unstable
//~| WARN this was previously accepted
}

fn main() {}
12 changes: 11 additions & 1 deletion src/test/ui/proc-macro/proc-macro-gates.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,16 @@ LL | let _x = #[identity_attr] println!();
= note: see issue #54727 <https://github.com/rust-lang/rust/issues/54727> for more information
= help: add `#![feature(proc_macro_hygiene)]` to the crate attributes to enable

error: aborting due to 9 previous errors
error: non-builtin inner attributes are unstable
--> $DIR/proc-macro-gates.rs:49:5
|
LL | #![test]
| ^^^^^^^^
|
= note: `#[deny(soft_unstable)]` on by default
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #64266 <https://github.com/rust-lang/rust/issues/64266>

error: aborting due to 10 previous errors

For more information about this error, try `rustc --explain E0658`.

0 comments on commit cc6baf7

Please sign in to comment.