From: Pierre-Emmanuel Patry <[email protected]>
rustc_const_stable attributes are used within the core library but were
not properly feature gated. The compiler now rejects their usage when
the feature has not been explicitly enabled.
gcc/rust/ChangeLog:
* checks/errors/feature/rust-feature-gate.cc (FeatureGate::visit): Add
a feature gate around rustc_const_stable attributes.
gcc/testsuite/ChangeLog:
* rust/compile/const-issue1440.rs: Enable staged_api feature.
* rust/compile/for-loop1.rs: Likewise.
* rust/compile/for-loop2.rs: Likewise.
* rust/compile/issue-1031.rs: Likewise.
* rust/compile/issue-1289.rs: Likewise.
* rust/compile/iterators1.rs: Likewise.
* rust/compile/rustc_const_stable.rs: Likewise.
* rust/compile/torture/issue-1075.rs: Likewise.
* rust/compile/torture/issue-1432.rs: Likewise.
* rust/execute/torture/const-generics-7.rs: Likewise.
* rust/execute/torture/for-loop1.rs: Likewise.
* rust/execute/torture/for-loop2.rs: Likewise.
* rust/execute/torture/issue-1120.rs: Likewise.
* rust/execute/torture/issue-1133.rs: Likewise.
* rust/execute/torture/issue-1232.rs: Likewise.
* rust/execute/torture/issue-1436.rs: Likewise.
* rust/execute/torture/iter1.rs: Likewise.
* rust/execute/torture/slice-magic.rs: Likewise.
* rust/execute/torture/slice-magic2.rs: Likewise.
* rust/execute/torture/str-layout1.rs: Likewise.
* rust/compile/missing_staged_api.rs: New test.
Signed-off-by: Pierre-Emmanuel Patry <[email protected]>
---
gcc/rust/checks/errors/feature/rust-feature-gate.cc | 10 ++++++++++
gcc/testsuite/rust/compile/const-issue1440.rs | 3 +--
gcc/testsuite/rust/compile/for-loop1.rs | 2 +-
gcc/testsuite/rust/compile/for-loop2.rs | 3 +--
gcc/testsuite/rust/compile/issue-1031.rs | 4 +---
gcc/testsuite/rust/compile/issue-1289.rs | 4 +---
gcc/testsuite/rust/compile/iterators1.rs | 3 +--
gcc/testsuite/rust/compile/missing_staged_api.rs | 12 ++++++++++++
gcc/testsuite/rust/compile/rustc_const_stable.rs | 2 +-
gcc/testsuite/rust/compile/torture/issue-1075.rs | 3 +--
gcc/testsuite/rust/compile/torture/issue-1432.rs | 3 +--
.../rust/execute/torture/const-generics-7.rs | 4 +---
gcc/testsuite/rust/execute/torture/for-loop1.rs | 2 +-
gcc/testsuite/rust/execute/torture/for-loop2.rs | 2 +-
gcc/testsuite/rust/execute/torture/issue-1120.rs | 4 +---
gcc/testsuite/rust/execute/torture/issue-1133.rs | 4 +---
gcc/testsuite/rust/execute/torture/issue-1232.rs | 4 +---
gcc/testsuite/rust/execute/torture/issue-1436.rs | 5 +----
gcc/testsuite/rust/execute/torture/iter1.rs | 3 +--
gcc/testsuite/rust/execute/torture/slice-magic.rs | 4 +---
gcc/testsuite/rust/execute/torture/slice-magic2.rs | 4 +---
gcc/testsuite/rust/execute/torture/str-layout1.rs | 4 +---
22 files changed, 42 insertions(+), 47 deletions(-)
create mode 100644 gcc/testsuite/rust/compile/missing_staged_api.rs
diff --git a/gcc/rust/checks/errors/feature/rust-feature-gate.cc
b/gcc/rust/checks/errors/feature/rust-feature-gate.cc
index 8c6d5ba2f56..775df43791a 100644
--- a/gcc/rust/checks/errors/feature/rust-feature-gate.cc
+++ b/gcc/rust/checks/errors/feature/rust-feature-gate.cc
@@ -234,6 +234,16 @@ FeatureGate::visit (AST::Function &function)
if (!function.is_external ())
check_rustc_attri (function.get_outer_attrs ());
+ for (const AST::Attribute &attr : function.get_outer_attrs ())
+ {
+ if (attr.get_path ().as_string () == "rustc_const_stable")
+ {
+ gate (Feature::Name::STAGED_API, attr.get_locus (),
+ "stability attributes may not be used outside of the standard "
+ "library");
+ }
+ }
+
check_lang_item_attribute (function.get_outer_attrs ());
note_stability_attribute (function.get_outer_attrs ());
diff --git a/gcc/testsuite/rust/compile/const-issue1440.rs
b/gcc/testsuite/rust/compile/const-issue1440.rs
index 5548573fc33..a78b146b9f7 100644
--- a/gcc/testsuite/rust/compile/const-issue1440.rs
+++ b/gcc/testsuite/rust/compile/const-issue1440.rs
@@ -1,9 +1,8 @@
// { dg-additional-options "-w" }
#![feature(no_core)]
#![no_core]
-
#![feature(intrinsics)]
-
+#![feature(staged_api)]
#![feature(lang_items)]
#[lang = "sized"]
pub trait Sized {}
diff --git a/gcc/testsuite/rust/compile/for-loop1.rs
b/gcc/testsuite/rust/compile/for-loop1.rs
index 3e9fe62a410..d35fe633947 100644
--- a/gcc/testsuite/rust/compile/for-loop1.rs
+++ b/gcc/testsuite/rust/compile/for-loop1.rs
@@ -1,8 +1,8 @@
// { dg-output "loop\r*\nloop\r*\n" }
#![feature(no_core)]
#![no_core]
-
#![feature(intrinsics, lang_items)]
+#![feature(staged_api)]
pub use option::Option::{self, None, Some};
pub use result::Result::{self, Err, Ok};
diff --git a/gcc/testsuite/rust/compile/for-loop2.rs
b/gcc/testsuite/rust/compile/for-loop2.rs
index 7e091b0a0cd..14aa38c9cd4 100644
--- a/gcc/testsuite/rust/compile/for-loop2.rs
+++ b/gcc/testsuite/rust/compile/for-loop2.rs
@@ -1,8 +1,7 @@
// { dg-output "1\r*\n2\r*\n" }
#![feature(no_core)]
#![no_core]
-
-#![feature(intrinsics, lang_items)]
+#![feature(intrinsics, lang_items, staged_api)]
pub use option::Option::{self, None, Some};
pub use result::Result::{self, Err, Ok};
diff --git a/gcc/testsuite/rust/compile/issue-1031.rs
b/gcc/testsuite/rust/compile/issue-1031.rs
index 1d3ef9a0fe8..cac0b101a64 100644
--- a/gcc/testsuite/rust/compile/issue-1031.rs
+++ b/gcc/testsuite/rust/compile/issue-1031.rs
@@ -1,8 +1,6 @@
#![feature(no_core)]
#![no_core]
-
-#![feature(intrinsics)]
-
+#![feature(intrinsics, staged_api)]
#![feature(lang_items)]
#[lang = "sized"]
pub trait Sized {}
diff --git a/gcc/testsuite/rust/compile/issue-1289.rs
b/gcc/testsuite/rust/compile/issue-1289.rs
index bbc1c880fbb..96706175291 100644
--- a/gcc/testsuite/rust/compile/issue-1289.rs
+++ b/gcc/testsuite/rust/compile/issue-1289.rs
@@ -1,8 +1,6 @@
#![feature(no_core)]
#![no_core]
-
-#![feature(intrinsics)]
-
+#![feature(intrinsics, staged_api)]
#![feature(lang_items)]
#[lang = "sized"]
pub trait Sized {}
diff --git a/gcc/testsuite/rust/compile/iterators1.rs
b/gcc/testsuite/rust/compile/iterators1.rs
index 6dca6f28c1f..0b01bcf1ffc 100644
--- a/gcc/testsuite/rust/compile/iterators1.rs
+++ b/gcc/testsuite/rust/compile/iterators1.rs
@@ -1,7 +1,6 @@
#![feature(no_core)]
#![no_core]
-
-#![feature(intrinsics, lang_items)]
+#![feature(intrinsics, lang_items, staged_api)]
pub use option::Option::{self, None, Some};
pub use result::Result::{self, Err, Ok};
diff --git a/gcc/testsuite/rust/compile/missing_staged_api.rs
b/gcc/testsuite/rust/compile/missing_staged_api.rs
new file mode 100644
index 00000000000..49b4c045194
--- /dev/null
+++ b/gcc/testsuite/rust/compile/missing_staged_api.rs
@@ -0,0 +1,12 @@
+#![feature(no_core)]
+#![feature(intrinsics)]
+#![no_core]
+
+pub mod intrinsics {
+
+ extern "rust-intrinsic" {
+ // { dg-error "stability attributes may not be used outside of the
standard library" "" { target *-*-* } .+1 }
+ #[rustc_const_stable(feature = "const_size_of", since = "1.40.0")]
+ pub fn size_of<T>() -> usize;
+ }
+}
diff --git a/gcc/testsuite/rust/compile/rustc_const_stable.rs
b/gcc/testsuite/rust/compile/rustc_const_stable.rs
index 77bb4b81ff7..619d6e44301 100644
--- a/gcc/testsuite/rust/compile/rustc_const_stable.rs
+++ b/gcc/testsuite/rust/compile/rustc_const_stable.rs
@@ -1,7 +1,7 @@
#![feature(no_core)]
#![no_core]
-
#![feature(rustc_attrs)]
+#![feature(staged_api)]
#[rustc_const_stable(feature = "const_ascii_ctype_on_intrinsics", since =
"1.47.0")]
pub fn foo() {}
diff --git a/gcc/testsuite/rust/compile/torture/issue-1075.rs
b/gcc/testsuite/rust/compile/torture/issue-1075.rs
index 977f8ef566d..7c26f46775e 100644
--- a/gcc/testsuite/rust/compile/torture/issue-1075.rs
+++ b/gcc/testsuite/rust/compile/torture/issue-1075.rs
@@ -1,9 +1,8 @@
// { dg-additional-options "-w" }
#![feature(no_core)]
#![no_core]
-
#![feature(intrinsics)]
-
+#![feature(staged_api)]
#![feature(lang_items)]
#[lang = "sized"]
pub trait Sized {}
diff --git a/gcc/testsuite/rust/compile/torture/issue-1432.rs
b/gcc/testsuite/rust/compile/torture/issue-1432.rs
index 56bf72280d5..8ec3d98cf65 100644
--- a/gcc/testsuite/rust/compile/torture/issue-1432.rs
+++ b/gcc/testsuite/rust/compile/torture/issue-1432.rs
@@ -1,9 +1,8 @@
// { dg-additional-options "-w" }
#![feature(no_core)]
#![no_core]
-
#![feature(intrinsics)]
-
+#![feature(staged_api)]
#![feature(lang_items)]
#[lang = "sized"]
pub trait Sized {}
diff --git a/gcc/testsuite/rust/execute/torture/const-generics-7.rs
b/gcc/testsuite/rust/execute/torture/const-generics-7.rs
index 5275df29cc0..8ff82dcba54 100644
--- a/gcc/testsuite/rust/execute/torture/const-generics-7.rs
+++ b/gcc/testsuite/rust/execute/torture/const-generics-7.rs
@@ -1,8 +1,6 @@
#![feature(no_core)]
#![no_core]
-
-#![feature(intrinsics)]
-
+#![feature(intrinsics, staged_api)]
#![feature(lang_items)]
#[lang = "sized"]
pub trait Sized {}
diff --git a/gcc/testsuite/rust/execute/torture/for-loop1.rs
b/gcc/testsuite/rust/execute/torture/for-loop1.rs
index 903d2ad3878..89c97b485fc 100644
--- a/gcc/testsuite/rust/execute/torture/for-loop1.rs
+++ b/gcc/testsuite/rust/execute/torture/for-loop1.rs
@@ -2,7 +2,7 @@
#![feature(no_core)]
#![no_core]
-#![feature(intrinsics, lang_items)]
+#![feature(intrinsics, lang_items, staged_api)]
pub use option::Option::{self, None, Some};
pub use result::Result::{self, Err, Ok};
diff --git a/gcc/testsuite/rust/execute/torture/for-loop2.rs
b/gcc/testsuite/rust/execute/torture/for-loop2.rs
index fc6b0635442..242230803de 100644
--- a/gcc/testsuite/rust/execute/torture/for-loop2.rs
+++ b/gcc/testsuite/rust/execute/torture/for-loop2.rs
@@ -2,7 +2,7 @@
#![feature(no_core)]
#![no_core]
-#![feature(intrinsics, lang_items)]
+#![feature(intrinsics, lang_items, staged_api)]
pub use option::Option::{self, None, Some};
pub use result::Result::{self, Err, Ok};
diff --git a/gcc/testsuite/rust/execute/torture/issue-1120.rs
b/gcc/testsuite/rust/execute/torture/issue-1120.rs
index 869dcce27db..01c9f985f76 100644
--- a/gcc/testsuite/rust/execute/torture/issue-1120.rs
+++ b/gcc/testsuite/rust/execute/torture/issue-1120.rs
@@ -1,9 +1,7 @@
// { dg-additional-options "-w" }
#![feature(no_core)]
#![no_core]
-
-#![feature(intrinsics)]
-
+#![feature(intrinsics, staged_api)]
#![feature(lang_items)]
#[lang = "sized"]
pub trait Sized {}
diff --git a/gcc/testsuite/rust/execute/torture/issue-1133.rs
b/gcc/testsuite/rust/execute/torture/issue-1133.rs
index 20735c59ca8..5363e1c860f 100644
--- a/gcc/testsuite/rust/execute/torture/issue-1133.rs
+++ b/gcc/testsuite/rust/execute/torture/issue-1133.rs
@@ -1,9 +1,7 @@
// { dg-additional-options "-w" }
#![feature(no_core)]
#![no_core]
-
-#![feature(intrinsics)]
-
+#![feature(intrinsics, staged_api)]
#![feature(lang_items)]
#[lang = "sized"]
pub trait Sized {}
diff --git a/gcc/testsuite/rust/execute/torture/issue-1232.rs
b/gcc/testsuite/rust/execute/torture/issue-1232.rs
index a3622563d57..5bb86797226 100644
--- a/gcc/testsuite/rust/execute/torture/issue-1232.rs
+++ b/gcc/testsuite/rust/execute/torture/issue-1232.rs
@@ -2,9 +2,7 @@
// { dg-output "slice_access=3\r*\n" }
#![feature(no_core)]
#![no_core]
-
-#![feature(intrinsics)]
-
+#![feature(intrinsics, staged_api)]
#![feature(lang_items)]
#[lang = "sized"]
pub trait Sized {}
diff --git a/gcc/testsuite/rust/execute/torture/issue-1436.rs
b/gcc/testsuite/rust/execute/torture/issue-1436.rs
index f7ae38f55ad..2f2b9094b34 100644
--- a/gcc/testsuite/rust/execute/torture/issue-1436.rs
+++ b/gcc/testsuite/rust/execute/torture/issue-1436.rs
@@ -1,10 +1,7 @@
// { dg-options "-w" }
#![feature(no_core)]
#![no_core]
-
-
-#![feature(intrinsics)]
-
+#![feature(intrinsics, staged_api)]
#![feature(lang_items)]
#[lang = "sized"]
pub trait Sized {}
diff --git a/gcc/testsuite/rust/execute/torture/iter1.rs
b/gcc/testsuite/rust/execute/torture/iter1.rs
index 72083d7e37d..b088a62846f 100644
--- a/gcc/testsuite/rust/execute/torture/iter1.rs
+++ b/gcc/testsuite/rust/execute/torture/iter1.rs
@@ -1,8 +1,7 @@
// { dg-output "1\r*\n2\r*\n" }
#![feature(no_core)]
#![no_core]
-
-#![feature(intrinsics, lang_items)]
+#![feature(intrinsics, lang_items, staged_api)]
pub use option::Option::{self, None, Some};
pub use result::Result::{self, Err, Ok};
diff --git a/gcc/testsuite/rust/execute/torture/slice-magic.rs
b/gcc/testsuite/rust/execute/torture/slice-magic.rs
index 1e87579d157..d8238fae13d 100644
--- a/gcc/testsuite/rust/execute/torture/slice-magic.rs
+++ b/gcc/testsuite/rust/execute/torture/slice-magic.rs
@@ -1,9 +1,7 @@
// { dg-additional-options "-w" }
#![feature(no_core)]
#![no_core]
-
-#![feature(intrinsics)]
-
+#![feature(intrinsics, staged_api)]
#![feature(lang_items)]
#[lang = "sized"]
pub trait Sized {}
diff --git a/gcc/testsuite/rust/execute/torture/slice-magic2.rs
b/gcc/testsuite/rust/execute/torture/slice-magic2.rs
index 3a4b93f925b..6f7e0061811 100644
--- a/gcc/testsuite/rust/execute/torture/slice-magic2.rs
+++ b/gcc/testsuite/rust/execute/torture/slice-magic2.rs
@@ -1,9 +1,7 @@
// { dg-additional-options "-w" }
#![feature(no_core)]
#![no_core]
-
-#![feature(intrinsics)]
-
+#![feature(intrinsics, staged_api)]
#![feature(lang_items)]
#[lang = "sized"]
pub trait Sized {}
diff --git a/gcc/testsuite/rust/execute/torture/str-layout1.rs
b/gcc/testsuite/rust/execute/torture/str-layout1.rs
index 5588df59c59..2af175b7c99 100644
--- a/gcc/testsuite/rust/execute/torture/str-layout1.rs
+++ b/gcc/testsuite/rust/execute/torture/str-layout1.rs
@@ -2,9 +2,7 @@
// { dg-output "t1sz=5 t2sz=10\r*" }
#![feature(no_core)]
#![no_core]
-
-#![feature(intrinsics)]
-
+#![feature(intrinsics, staged_api)]
#![feature(lang_items)]
#[lang = "sized"]
pub trait Sized {}
--
2.50.1