summaryrefslogtreecommitdiffstats
path: root/src/test/ui/internal/internal-unstable.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/internal/internal-unstable.rs')
-rw-r--r--src/test/ui/internal/internal-unstable.rs56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/test/ui/internal/internal-unstable.rs b/src/test/ui/internal/internal-unstable.rs
new file mode 100644
index 000000000..b8987d3e1
--- /dev/null
+++ b/src/test/ui/internal/internal-unstable.rs
@@ -0,0 +1,56 @@
+// aux-build:internal_unstable.rs
+
+#![feature(allow_internal_unstable)]
+#[allow(dead_code)]
+
+#[macro_use]
+extern crate internal_unstable;
+
+struct Baz {
+ #[allow_internal_unstable]
+ //^ WARN `#[allow_internal_unstable]` is ignored on struct fields and match arms
+ baz: u8,
+}
+
+macro_rules! foo {
+ ($e: expr, $f: expr) => {{
+ $e;
+ $f;
+ internal_unstable::unstable(); //~ ERROR use of unstable
+ }}
+}
+
+#[allow_internal_unstable(function)]
+macro_rules! bar {
+ ($e: expr) => {{
+ foo!($e,
+ internal_unstable::unstable());
+ internal_unstable::unstable();
+ }}
+}
+
+fn main() {
+ // ok, the instability is contained.
+ call_unstable_allow!();
+ construct_unstable_allow!(0);
+ |x: internal_unstable::Foo| { call_method_allow!(x) };
+ |x: internal_unstable::Bar| { access_field_allow!(x) };
+ |x: internal_unstable::Bar| { access_field_allow2!(x) }; // regression test for #77088
+
+ // bad.
+ pass_through_allow!(internal_unstable::unstable()); //~ ERROR use of unstable
+
+ pass_through_noallow!(internal_unstable::unstable()); //~ ERROR use of unstable
+
+
+
+ println!("{:?}", internal_unstable::unstable()); //~ ERROR use of unstable
+
+ bar!(internal_unstable::unstable()); //~ ERROR use of unstable
+
+ match true {
+ #[allow_internal_unstable]
+ //^ WARN `#[allow_internal_unstable]` is ignored on struct fields and match arms
+ _ => {}
+ }
+}