about summary refs log tree commit diff
diff options
context:
space:
mode:
author许杰友 Jieyou Xu (Joe) <39484203+jieyouxu@users.noreply.github.com>2024-10-18 16:00:11 +0800
committerNoratrieb <48135649+Noratrieb@users.noreply.github.com>2024-10-18 18:18:41 +0200
commit1af9d11583ea7ce06f78594b7f15bb0ba8bb22b1 (patch)
tree30391eae6a0357ac62dd6eb55ed5b40de91f0548
parente78d78868a4c9a4e29a02f70ede75ca8cfd39bef (diff)
Expand test coverage for deny-inside-forbid interactions
-rw-r--r--tests/ui/lint/auxiliary/allow-macro.rs7
-rw-r--r--tests/ui/lint/auxiliary/forbid-macro.rs7
-rw-r--r--tests/ui/lint/auxiliary/warn-macro.rs7
-rw-r--r--tests/ui/lint/deny-inside-forbid-ignored.cli_forbid.stderr (renamed from tests/ui/lint/deny-inside-forbid-ignored.stderr)8
-rw-r--r--tests/ui/lint/deny-inside-forbid-ignored.cli_forbid_warnings.stderr35
-rw-r--r--tests/ui/lint/deny-inside-forbid-ignored.rs8
-rw-r--r--tests/ui/lint/deny-inside-forbid-ignored.source_only.stderr35
-rw-r--r--tests/ui/lint/forbid-macro-with-deny.allow.stderr26
-rw-r--r--tests/ui/lint/forbid-macro-with-deny.rs41
-rw-r--r--tests/ui/lint/forbid-macro-with-deny.warn.stderr26
10 files changed, 188 insertions, 12 deletions
diff --git a/tests/ui/lint/auxiliary/allow-macro.rs b/tests/ui/lint/auxiliary/allow-macro.rs
new file mode 100644
index 00000000000..35980e2e6ac
--- /dev/null
+++ b/tests/ui/lint/auxiliary/allow-macro.rs
@@ -0,0 +1,7 @@
+#[macro_export]
+macro_rules! emit_allow {
+    () => {
+        #[allow(unsafe_code)]
+        let _so_safe = 0;
+    };
+}
diff --git a/tests/ui/lint/auxiliary/forbid-macro.rs b/tests/ui/lint/auxiliary/forbid-macro.rs
new file mode 100644
index 00000000000..aa74d0cf314
--- /dev/null
+++ b/tests/ui/lint/auxiliary/forbid-macro.rs
@@ -0,0 +1,7 @@
+#[macro_export]
+macro_rules! emit_forbid {
+    () => {
+        #[forbid(unsafe_code)]
+        let _so_safe = 0;
+    };
+}
diff --git a/tests/ui/lint/auxiliary/warn-macro.rs b/tests/ui/lint/auxiliary/warn-macro.rs
new file mode 100644
index 00000000000..8216b65c74b
--- /dev/null
+++ b/tests/ui/lint/auxiliary/warn-macro.rs
@@ -0,0 +1,7 @@
+#[macro_export]
+macro_rules! emit_warn {
+    () => {
+        #[warn(unsafe_code)]
+        let _so_safe = 0;
+    };
+}
diff --git a/tests/ui/lint/deny-inside-forbid-ignored.stderr b/tests/ui/lint/deny-inside-forbid-ignored.cli_forbid.stderr
index b7fc0ccf5a2..06086cbef8a 100644
--- a/tests/ui/lint/deny-inside-forbid-ignored.stderr
+++ b/tests/ui/lint/deny-inside-forbid-ignored.cli_forbid.stderr
@@ -1,5 +1,5 @@
 error[E0453]: allow(unsafe_code) incompatible with previous forbid
-  --> $DIR/deny-inside-forbid-ignored.rs:8:17
+  --> $DIR/deny-inside-forbid-ignored.rs:12:17
    |
 LL | #[forbid(unsafe_code)] // NO UNSAFE CODE IN HERE!!
    |          ----------- `forbid` level set here
@@ -8,7 +8,7 @@ LL |         #[allow(unsafe_code)] // let's have some unsafe code in here
    |                 ^^^^^^^^^^^ overruled by previous forbid
 
 error[E0453]: allow(unsafe_code) incompatible with previous forbid
-  --> $DIR/deny-inside-forbid-ignored.rs:8:17
+  --> $DIR/deny-inside-forbid-ignored.rs:12:17
    |
 LL | #[forbid(unsafe_code)] // NO UNSAFE CODE IN HERE!!
    |          ----------- `forbid` level set here
@@ -19,13 +19,13 @@ LL |         #[allow(unsafe_code)] // let's have some unsafe code in here
    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
 
 error: usage of an `unsafe` block
-  --> $DIR/deny-inside-forbid-ignored.rs:12:13
+  --> $DIR/deny-inside-forbid-ignored.rs:16:13
    |
 LL |             unsafe { /* ≽^•⩊•^≼ */ }
    |             ^^^^^^^^^^^^^^^^^^^^^^^^
    |
 note: the lint level is defined here
-  --> $DIR/deny-inside-forbid-ignored.rs:4:10
+  --> $DIR/deny-inside-forbid-ignored.rs:8:10
    |
 LL | #[forbid(unsafe_code)] // NO UNSAFE CODE IN HERE!!
    |          ^^^^^^^^^^^
diff --git a/tests/ui/lint/deny-inside-forbid-ignored.cli_forbid_warnings.stderr b/tests/ui/lint/deny-inside-forbid-ignored.cli_forbid_warnings.stderr
new file mode 100644
index 00000000000..06086cbef8a
--- /dev/null
+++ b/tests/ui/lint/deny-inside-forbid-ignored.cli_forbid_warnings.stderr
@@ -0,0 +1,35 @@
+error[E0453]: allow(unsafe_code) incompatible with previous forbid
+  --> $DIR/deny-inside-forbid-ignored.rs:12:17
+   |
+LL | #[forbid(unsafe_code)] // NO UNSAFE CODE IN HERE!!
+   |          ----------- `forbid` level set here
+...
+LL |         #[allow(unsafe_code)] // let's have some unsafe code in here
+   |                 ^^^^^^^^^^^ overruled by previous forbid
+
+error[E0453]: allow(unsafe_code) incompatible with previous forbid
+  --> $DIR/deny-inside-forbid-ignored.rs:12:17
+   |
+LL | #[forbid(unsafe_code)] // NO UNSAFE CODE IN HERE!!
+   |          ----------- `forbid` level set here
+...
+LL |         #[allow(unsafe_code)] // let's have some unsafe code in here
+   |                 ^^^^^^^^^^^ overruled by previous forbid
+   |
+   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error: usage of an `unsafe` block
+  --> $DIR/deny-inside-forbid-ignored.rs:16:13
+   |
+LL |             unsafe { /* ≽^•⩊•^≼ */ }
+   |             ^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+note: the lint level is defined here
+  --> $DIR/deny-inside-forbid-ignored.rs:8:10
+   |
+LL | #[forbid(unsafe_code)] // NO UNSAFE CODE IN HERE!!
+   |          ^^^^^^^^^^^
+
+error: aborting due to 3 previous errors
+
+For more information about this error, try `rustc --explain E0453`.
diff --git a/tests/ui/lint/deny-inside-forbid-ignored.rs b/tests/ui/lint/deny-inside-forbid-ignored.rs
index da5a14ce253..b14a3e94bb5 100644
--- a/tests/ui/lint/deny-inside-forbid-ignored.rs
+++ b/tests/ui/lint/deny-inside-forbid-ignored.rs
@@ -1,5 +1,9 @@
-/// Ensure that using deny inside forbid is treated as a no-op,
-/// and does not override the level to deny.
+//! Ensure that using deny inside forbid is treated as a no-op, and does not override the level to
+//! deny.
+
+//@ revisions: source_only cli_forbid cli_forbid_warnings
+//@[cli_forbid] compile-flags: -F unsafe_code
+//@[cli_forbid_warnings] compile-flags: -F warnings
 
 #[forbid(unsafe_code)] // NO UNSAFE CODE IN HERE!!
 fn main() {
diff --git a/tests/ui/lint/deny-inside-forbid-ignored.source_only.stderr b/tests/ui/lint/deny-inside-forbid-ignored.source_only.stderr
new file mode 100644
index 00000000000..06086cbef8a
--- /dev/null
+++ b/tests/ui/lint/deny-inside-forbid-ignored.source_only.stderr
@@ -0,0 +1,35 @@
+error[E0453]: allow(unsafe_code) incompatible with previous forbid
+  --> $DIR/deny-inside-forbid-ignored.rs:12:17
+   |
+LL | #[forbid(unsafe_code)] // NO UNSAFE CODE IN HERE!!
+   |          ----------- `forbid` level set here
+...
+LL |         #[allow(unsafe_code)] // let's have some unsafe code in here
+   |                 ^^^^^^^^^^^ overruled by previous forbid
+
+error[E0453]: allow(unsafe_code) incompatible with previous forbid
+  --> $DIR/deny-inside-forbid-ignored.rs:12:17
+   |
+LL | #[forbid(unsafe_code)] // NO UNSAFE CODE IN HERE!!
+   |          ----------- `forbid` level set here
+...
+LL |         #[allow(unsafe_code)] // let's have some unsafe code in here
+   |                 ^^^^^^^^^^^ overruled by previous forbid
+   |
+   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+
+error: usage of an `unsafe` block
+  --> $DIR/deny-inside-forbid-ignored.rs:16:13
+   |
+LL |             unsafe { /* ≽^•⩊•^≼ */ }
+   |             ^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+note: the lint level is defined here
+  --> $DIR/deny-inside-forbid-ignored.rs:8:10
+   |
+LL | #[forbid(unsafe_code)] // NO UNSAFE CODE IN HERE!!
+   |          ^^^^^^^^^^^
+
+error: aborting due to 3 previous errors
+
+For more information about this error, try `rustc --explain E0453`.
diff --git a/tests/ui/lint/forbid-macro-with-deny.allow.stderr b/tests/ui/lint/forbid-macro-with-deny.allow.stderr
new file mode 100644
index 00000000000..77735c1c5d3
--- /dev/null
+++ b/tests/ui/lint/forbid-macro-with-deny.allow.stderr
@@ -0,0 +1,26 @@
+error[E0453]: allow(unsafe_code) incompatible with previous forbid
+  --> $DIR/forbid-macro-with-deny.rs:39:5
+   |
+LL | #![forbid(unsafe_code)]
+   |           ----------- `forbid` level set here
+...
+LL |     allow_macro::emit_allow! {}
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^ overruled by previous forbid
+   |
+   = note: this error originates in the macro `allow_macro::emit_allow` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0453]: allow(unsafe_code) incompatible with previous forbid
+  --> $DIR/forbid-macro-with-deny.rs:39:5
+   |
+LL | #![forbid(unsafe_code)]
+   |           ----------- `forbid` level set here
+...
+LL |     allow_macro::emit_allow! {}
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^ overruled by previous forbid
+   |
+   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+   = note: this error originates in the macro `allow_macro::emit_allow` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0453`.
diff --git a/tests/ui/lint/forbid-macro-with-deny.rs b/tests/ui/lint/forbid-macro-with-deny.rs
index e6985ab19d1..85f67ea3631 100644
--- a/tests/ui/lint/forbid-macro-with-deny.rs
+++ b/tests/ui/lint/forbid-macro-with-deny.rs
@@ -1,16 +1,45 @@
-//@ aux-build:deny-macro.rs
-//@ check-pass
+//! Ensure that when a macro (or normal code) does `#[deny]` inside a `#[forbid]` context, no error
+//! is emitted, as both parties agree on the treatment of the lint.
+//!
+//! However, still emit an error if the macro does `#[allow]` or `#[warn]`.
 
-// Ensure that when a macro (or normal code) does #[deny] inside a #[forbid]
-// context, no error is emitted, as both parties agree on the treatment of the lint.
+//@ revisions: forbid deny warn allow
+//@[forbid] aux-build:forbid-macro.rs
+//@[deny] aux-build:deny-macro.rs
+//@[warn] aux-build:warn-macro.rs
+//@[allow] aux-build:allow-macro.rs
+
+//@[forbid] check-pass
+//@[deny] check-pass
 
 #![forbid(unsafe_code)]
 
+#[cfg(allow)]
+extern crate allow_macro;
+#[cfg(deny)]
 extern crate deny_macro;
+#[cfg(forbid)]
+extern crate forbid_macro;
+#[cfg(warn)]
+extern crate warn_macro;
 
 fn main() {
-    deny_macro::emit_deny! {}
+    #[cfg(forbid)]
+    forbid_macro::emit_forbid! {} // OK
+
+    #[cfg(deny)]
+    deny_macro::emit_deny! {} // OK
+
+    #[cfg(warn)]
+    warn_macro::emit_warn! {}
+    //[warn]~^ ERROR warn(unsafe_code) incompatible with previous forbid
+    //[warn]~| ERROR warn(unsafe_code) incompatible with previous forbid
+
+    #[cfg(allow)]
+    allow_macro::emit_allow! {}
+    //[allow]~^ ERROR allow(unsafe_code) incompatible with previous forbid
+    //[allow]~| ERROR allow(unsafe_code) incompatible with previous forbid
 
-    #[deny(unsafe_code)]
+    #[deny(unsafe_code)] // OK
     let _ = 0;
 }
diff --git a/tests/ui/lint/forbid-macro-with-deny.warn.stderr b/tests/ui/lint/forbid-macro-with-deny.warn.stderr
new file mode 100644
index 00000000000..10452ebd1b6
--- /dev/null
+++ b/tests/ui/lint/forbid-macro-with-deny.warn.stderr
@@ -0,0 +1,26 @@
+error[E0453]: warn(unsafe_code) incompatible with previous forbid
+  --> $DIR/forbid-macro-with-deny.rs:34:5
+   |
+LL | #![forbid(unsafe_code)]
+   |           ----------- `forbid` level set here
+...
+LL |     warn_macro::emit_warn! {}
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^ overruled by previous forbid
+   |
+   = note: this error originates in the macro `warn_macro::emit_warn` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error[E0453]: warn(unsafe_code) incompatible with previous forbid
+  --> $DIR/forbid-macro-with-deny.rs:34:5
+   |
+LL | #![forbid(unsafe_code)]
+   |           ----------- `forbid` level set here
+...
+LL |     warn_macro::emit_warn! {}
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^ overruled by previous forbid
+   |
+   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+   = note: this error originates in the macro `warn_macro::emit_warn` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0453`.