third_party_rust_proc-macro2/tests/marker.rs

101 lines
2.7 KiB
Rust
Raw Permalink Normal View History

Ignore extra_unused_type_parameters clippy lint in test error: type parameter goes unused in function definition --> tests/marker.rs:10:34 | 10 | fn assert_implemented<T: $($marker +)+>() {} | ^^^^^^^^^^^^^^^^^^ ... 42 | assert_impl!(Delimiter is Send and Sync); | ---------------------------------------- in this macro invocation | = help: consider removing the parameter = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_type_parameters = note: `-D clippy::extra-unused-type-parameters` implied by `-D clippy::all` = note: this error originates in the macro `assert_impl` (in Nightly builds, run with -Z macro-backtrace for more info) error: type parameter goes unused in function definition --> tests/marker.rs:10:34 | 10 | fn assert_implemented<T: $($marker +)+>() {} | ^^^^^^^^^^^^^^^^^^ ... 43 | assert_impl!(Spacing is Send and Sync); | -------------------------------------- in this macro invocation | = help: consider removing the parameter = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_type_parameters = note: this error originates in the macro `assert_impl` (in Nightly builds, run with -Z macro-backtrace for more info) error: type parameter goes unused in function definition --> tests/marker.rs:10:34 | 10 | fn assert_implemented<T: $($marker +)+>() {} | ^^^^^^^^^^^^^^^^^^ ... 80 | / assert_unwind_safe! { 81 | | Delimiter 82 | | Group 83 | | Ident ... | 90 | | TokenTree 91 | | } | |_____- in this macro invocation | = help: consider removing the parameter = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#extra_unused_type_parameters = note: this error originates in the macro `assert_impl` which comes from the expansion of the macro `assert_unwind_safe` (in Nightly builds, run with -Z macro-backtrace for more info)
2023-02-11 03:08:36 +00:00
#![allow(clippy::extra_unused_type_parameters)]
use proc_macro2::{
Delimiter, Group, Ident, LexError, Literal, Punct, Spacing, Span, TokenStream, TokenTree,
};
2018-11-11 22:25:53 +00:00
macro_rules! assert_impl {
($ty:ident is $($marker:ident) and +) => {
#[test]
#[allow(non_snake_case)]
fn $ty() {
fn assert_implemented<T: $($marker +)+>() {}
assert_implemented::<$ty>();
}
};
Remove unwind-safe test on rust 1.31.0 On 1.31.0: error[E0277]: the type `std::cell::UnsafeCell<std::option::Option<syntax::tokenstream::TokenStream>>` may contain interior mutability and a reference may not be safely transferrable across a catch_unwind boundary --> tests/marker.rs:9:13 | 9 | assert_implemented::<$ty>(); | ^^^^^^^^^^^^^^^^^^^^^^^^^ `std::cell::UnsafeCell<std::option::Option<syntax::tokenstream::TokenStream>>` may contain interior mutability and a reference may not be safely transferrable across a catch_unwind boundary ... 74 | / assert_unwind_safe! { 75 | | Delimiter 76 | | Group 77 | | Ident ... | 84 | | TokenTree 85 | | } | |_____- in this macro invocation | = help: within `(syntax::parse::token::Nonterminal, syntax::parse::token::LazyTokenStream)`, the trait `std::panic::RefUnwindSafe` is not implemented for `std::cell::UnsafeCell<std::option::Option<syntax::tokenstream::TokenStream>>` = note: required because it appears within the type `std::cell::RefCell<std::option::Option<syntax::tokenstream::TokenStream>>` = note: required because it appears within the type `rustc_data_structures::sync::Lock<std::option::Option<syntax::tokenstream::TokenStream>>` = note: required because it appears within the type `syntax::parse::token::LazyTokenStream` = note: required because it appears within the type `(syntax::parse::token::Nonterminal, syntax::parse::token::LazyTokenStream)` = note: required because of the requirements on the impl of `std::panic::UnwindSafe` for `std::rc::Rc<(syntax::parse::token::Nonterminal, syntax::parse::token::LazyTokenStream)>` = note: required because it appears within the type `syntax::parse::token::Token` = note: required because it appears within the type `syntax::tokenstream::TokenTree` = note: required because it appears within the type `syntax::tokenstream::TokenStreamKind` = note: required because it appears within the type `syntax::tokenstream::TokenStream` = note: required because it appears within the type `proc_macro::TokenStream` = note: required because it appears within the type `proc_macro2::imp::DeferredTokenStream` = note: required because it appears within the type `proc_macro2::imp::TokenStream` = note: required because it appears within the type `proc_macro2::TokenStream` note: required by `unwind_safe::TokenStream::assert_implemented` --> tests/marker.rs:8:13 | 8 | fn assert_implemented<T: $($marker +)+>() {} | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ... 74 | / assert_unwind_safe! { 75 | | Delimiter 76 | | Group 77 | | Ident ... | 84 | | TokenTree 85 | | } | |_____- in this macro invocation
2020-09-09 19:30:22 +00:00
($ty:ident is not $($marker:ident) or +) => {
2018-11-11 22:25:53 +00:00
#[test]
#[allow(non_snake_case)]
fn $ty() {
$(
{
// Implemented for types that implement $marker.
trait IsNotImplemented {
fn assert_not_implemented() {}
}
impl<T: $marker> IsNotImplemented for T {}
// Implemented for the type being tested.
trait IsImplemented {
fn assert_not_implemented() {}
}
impl IsImplemented for $ty {}
// If $ty does not implement $marker, there is no ambiguity
// in the following trait method call.
<$ty>::assert_not_implemented();
}
)+
}
};
}
Remove unwind-safe test on rust 1.31.0 On 1.31.0: error[E0277]: the type `std::cell::UnsafeCell<std::option::Option<syntax::tokenstream::TokenStream>>` may contain interior mutability and a reference may not be safely transferrable across a catch_unwind boundary --> tests/marker.rs:9:13 | 9 | assert_implemented::<$ty>(); | ^^^^^^^^^^^^^^^^^^^^^^^^^ `std::cell::UnsafeCell<std::option::Option<syntax::tokenstream::TokenStream>>` may contain interior mutability and a reference may not be safely transferrable across a catch_unwind boundary ... 74 | / assert_unwind_safe! { 75 | | Delimiter 76 | | Group 77 | | Ident ... | 84 | | TokenTree 85 | | } | |_____- in this macro invocation | = help: within `(syntax::parse::token::Nonterminal, syntax::parse::token::LazyTokenStream)`, the trait `std::panic::RefUnwindSafe` is not implemented for `std::cell::UnsafeCell<std::option::Option<syntax::tokenstream::TokenStream>>` = note: required because it appears within the type `std::cell::RefCell<std::option::Option<syntax::tokenstream::TokenStream>>` = note: required because it appears within the type `rustc_data_structures::sync::Lock<std::option::Option<syntax::tokenstream::TokenStream>>` = note: required because it appears within the type `syntax::parse::token::LazyTokenStream` = note: required because it appears within the type `(syntax::parse::token::Nonterminal, syntax::parse::token::LazyTokenStream)` = note: required because of the requirements on the impl of `std::panic::UnwindSafe` for `std::rc::Rc<(syntax::parse::token::Nonterminal, syntax::parse::token::LazyTokenStream)>` = note: required because it appears within the type `syntax::parse::token::Token` = note: required because it appears within the type `syntax::tokenstream::TokenTree` = note: required because it appears within the type `syntax::tokenstream::TokenStreamKind` = note: required because it appears within the type `syntax::tokenstream::TokenStream` = note: required because it appears within the type `proc_macro::TokenStream` = note: required because it appears within the type `proc_macro2::imp::DeferredTokenStream` = note: required because it appears within the type `proc_macro2::imp::TokenStream` = note: required because it appears within the type `proc_macro2::TokenStream` note: required by `unwind_safe::TokenStream::assert_implemented` --> tests/marker.rs:8:13 | 8 | fn assert_implemented<T: $($marker +)+>() {} | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ... 74 | / assert_unwind_safe! { 75 | | Delimiter 76 | | Group 77 | | Ident ... | 84 | | TokenTree 85 | | } | |_____- in this macro invocation
2020-09-09 19:30:22 +00:00
assert_impl!(Delimiter is Send and Sync);
assert_impl!(Spacing is Send and Sync);
2018-11-11 22:25:53 +00:00
Remove unwind-safe test on rust 1.31.0 On 1.31.0: error[E0277]: the type `std::cell::UnsafeCell<std::option::Option<syntax::tokenstream::TokenStream>>` may contain interior mutability and a reference may not be safely transferrable across a catch_unwind boundary --> tests/marker.rs:9:13 | 9 | assert_implemented::<$ty>(); | ^^^^^^^^^^^^^^^^^^^^^^^^^ `std::cell::UnsafeCell<std::option::Option<syntax::tokenstream::TokenStream>>` may contain interior mutability and a reference may not be safely transferrable across a catch_unwind boundary ... 74 | / assert_unwind_safe! { 75 | | Delimiter 76 | | Group 77 | | Ident ... | 84 | | TokenTree 85 | | } | |_____- in this macro invocation | = help: within `(syntax::parse::token::Nonterminal, syntax::parse::token::LazyTokenStream)`, the trait `std::panic::RefUnwindSafe` is not implemented for `std::cell::UnsafeCell<std::option::Option<syntax::tokenstream::TokenStream>>` = note: required because it appears within the type `std::cell::RefCell<std::option::Option<syntax::tokenstream::TokenStream>>` = note: required because it appears within the type `rustc_data_structures::sync::Lock<std::option::Option<syntax::tokenstream::TokenStream>>` = note: required because it appears within the type `syntax::parse::token::LazyTokenStream` = note: required because it appears within the type `(syntax::parse::token::Nonterminal, syntax::parse::token::LazyTokenStream)` = note: required because of the requirements on the impl of `std::panic::UnwindSafe` for `std::rc::Rc<(syntax::parse::token::Nonterminal, syntax::parse::token::LazyTokenStream)>` = note: required because it appears within the type `syntax::parse::token::Token` = note: required because it appears within the type `syntax::tokenstream::TokenTree` = note: required because it appears within the type `syntax::tokenstream::TokenStreamKind` = note: required because it appears within the type `syntax::tokenstream::TokenStream` = note: required because it appears within the type `proc_macro::TokenStream` = note: required because it appears within the type `proc_macro2::imp::DeferredTokenStream` = note: required because it appears within the type `proc_macro2::imp::TokenStream` = note: required because it appears within the type `proc_macro2::TokenStream` note: required by `unwind_safe::TokenStream::assert_implemented` --> tests/marker.rs:8:13 | 8 | fn assert_implemented<T: $($marker +)+>() {} | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ... 74 | / assert_unwind_safe! { 75 | | Delimiter 76 | | Group 77 | | Ident ... | 84 | | TokenTree 85 | | } | |_____- in this macro invocation
2020-09-09 19:30:22 +00:00
assert_impl!(Group is not Send or Sync);
assert_impl!(Ident is not Send or Sync);
assert_impl!(LexError is not Send or Sync);
assert_impl!(Literal is not Send or Sync);
assert_impl!(Punct is not Send or Sync);
assert_impl!(Span is not Send or Sync);
assert_impl!(TokenStream is not Send or Sync);
assert_impl!(TokenTree is not Send or Sync);
2018-11-11 22:25:53 +00:00
#[cfg(procmacro2_semver_exempt)]
mod semver_exempt {
2021-09-30 05:15:45 +00:00
use proc_macro2::{LineColumn, SourceFile};
2018-11-11 22:25:53 +00:00
Remove unwind-safe test on rust 1.31.0 On 1.31.0: error[E0277]: the type `std::cell::UnsafeCell<std::option::Option<syntax::tokenstream::TokenStream>>` may contain interior mutability and a reference may not be safely transferrable across a catch_unwind boundary --> tests/marker.rs:9:13 | 9 | assert_implemented::<$ty>(); | ^^^^^^^^^^^^^^^^^^^^^^^^^ `std::cell::UnsafeCell<std::option::Option<syntax::tokenstream::TokenStream>>` may contain interior mutability and a reference may not be safely transferrable across a catch_unwind boundary ... 74 | / assert_unwind_safe! { 75 | | Delimiter 76 | | Group 77 | | Ident ... | 84 | | TokenTree 85 | | } | |_____- in this macro invocation | = help: within `(syntax::parse::token::Nonterminal, syntax::parse::token::LazyTokenStream)`, the trait `std::panic::RefUnwindSafe` is not implemented for `std::cell::UnsafeCell<std::option::Option<syntax::tokenstream::TokenStream>>` = note: required because it appears within the type `std::cell::RefCell<std::option::Option<syntax::tokenstream::TokenStream>>` = note: required because it appears within the type `rustc_data_structures::sync::Lock<std::option::Option<syntax::tokenstream::TokenStream>>` = note: required because it appears within the type `syntax::parse::token::LazyTokenStream` = note: required because it appears within the type `(syntax::parse::token::Nonterminal, syntax::parse::token::LazyTokenStream)` = note: required because of the requirements on the impl of `std::panic::UnwindSafe` for `std::rc::Rc<(syntax::parse::token::Nonterminal, syntax::parse::token::LazyTokenStream)>` = note: required because it appears within the type `syntax::parse::token::Token` = note: required because it appears within the type `syntax::tokenstream::TokenTree` = note: required because it appears within the type `syntax::tokenstream::TokenStreamKind` = note: required because it appears within the type `syntax::tokenstream::TokenStream` = note: required because it appears within the type `proc_macro::TokenStream` = note: required because it appears within the type `proc_macro2::imp::DeferredTokenStream` = note: required because it appears within the type `proc_macro2::imp::TokenStream` = note: required because it appears within the type `proc_macro2::TokenStream` note: required by `unwind_safe::TokenStream::assert_implemented` --> tests/marker.rs:8:13 | 8 | fn assert_implemented<T: $($marker +)+>() {} | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ... 74 | / assert_unwind_safe! { 75 | | Delimiter 76 | | Group 77 | | Ident ... | 84 | | TokenTree 85 | | } | |_____- in this macro invocation
2020-09-09 19:30:22 +00:00
assert_impl!(LineColumn is Send and Sync);
assert_impl!(SourceFile is not Send or Sync);
}
#[cfg(not(no_libprocmacro_unwind_safe))]
mod unwind_safe {
use proc_macro2::{
Delimiter, Group, Ident, LexError, Literal, Punct, Spacing, Span, TokenStream, TokenTree,
};
2021-09-30 05:15:45 +00:00
#[cfg(procmacro2_semver_exempt)]
use proc_macro2::{LineColumn, SourceFile};
Remove unwind-safe test on rust 1.31.0 On 1.31.0: error[E0277]: the type `std::cell::UnsafeCell<std::option::Option<syntax::tokenstream::TokenStream>>` may contain interior mutability and a reference may not be safely transferrable across a catch_unwind boundary --> tests/marker.rs:9:13 | 9 | assert_implemented::<$ty>(); | ^^^^^^^^^^^^^^^^^^^^^^^^^ `std::cell::UnsafeCell<std::option::Option<syntax::tokenstream::TokenStream>>` may contain interior mutability and a reference may not be safely transferrable across a catch_unwind boundary ... 74 | / assert_unwind_safe! { 75 | | Delimiter 76 | | Group 77 | | Ident ... | 84 | | TokenTree 85 | | } | |_____- in this macro invocation | = help: within `(syntax::parse::token::Nonterminal, syntax::parse::token::LazyTokenStream)`, the trait `std::panic::RefUnwindSafe` is not implemented for `std::cell::UnsafeCell<std::option::Option<syntax::tokenstream::TokenStream>>` = note: required because it appears within the type `std::cell::RefCell<std::option::Option<syntax::tokenstream::TokenStream>>` = note: required because it appears within the type `rustc_data_structures::sync::Lock<std::option::Option<syntax::tokenstream::TokenStream>>` = note: required because it appears within the type `syntax::parse::token::LazyTokenStream` = note: required because it appears within the type `(syntax::parse::token::Nonterminal, syntax::parse::token::LazyTokenStream)` = note: required because of the requirements on the impl of `std::panic::UnwindSafe` for `std::rc::Rc<(syntax::parse::token::Nonterminal, syntax::parse::token::LazyTokenStream)>` = note: required because it appears within the type `syntax::parse::token::Token` = note: required because it appears within the type `syntax::tokenstream::TokenTree` = note: required because it appears within the type `syntax::tokenstream::TokenStreamKind` = note: required because it appears within the type `syntax::tokenstream::TokenStream` = note: required because it appears within the type `proc_macro::TokenStream` = note: required because it appears within the type `proc_macro2::imp::DeferredTokenStream` = note: required because it appears within the type `proc_macro2::imp::TokenStream` = note: required because it appears within the type `proc_macro2::TokenStream` note: required by `unwind_safe::TokenStream::assert_implemented` --> tests/marker.rs:8:13 | 8 | fn assert_implemented<T: $($marker +)+>() {} | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ... 74 | / assert_unwind_safe! { 75 | | Delimiter 76 | | Group 77 | | Ident ... | 84 | | TokenTree 85 | | } | |_____- in this macro invocation
2020-09-09 19:30:22 +00:00
use std::panic::{RefUnwindSafe, UnwindSafe};
macro_rules! assert_unwind_safe {
($($types:ident)*) => {
$(
assert_impl!($types is UnwindSafe and RefUnwindSafe);
)*
};
}
assert_unwind_safe! {
Delimiter
Group
Ident
LexError
Literal
Punct
Spacing
Span
TokenStream
TokenTree
}
2018-11-11 22:25:53 +00:00
Remove unwind-safe test on rust 1.31.0 On 1.31.0: error[E0277]: the type `std::cell::UnsafeCell<std::option::Option<syntax::tokenstream::TokenStream>>` may contain interior mutability and a reference may not be safely transferrable across a catch_unwind boundary --> tests/marker.rs:9:13 | 9 | assert_implemented::<$ty>(); | ^^^^^^^^^^^^^^^^^^^^^^^^^ `std::cell::UnsafeCell<std::option::Option<syntax::tokenstream::TokenStream>>` may contain interior mutability and a reference may not be safely transferrable across a catch_unwind boundary ... 74 | / assert_unwind_safe! { 75 | | Delimiter 76 | | Group 77 | | Ident ... | 84 | | TokenTree 85 | | } | |_____- in this macro invocation | = help: within `(syntax::parse::token::Nonterminal, syntax::parse::token::LazyTokenStream)`, the trait `std::panic::RefUnwindSafe` is not implemented for `std::cell::UnsafeCell<std::option::Option<syntax::tokenstream::TokenStream>>` = note: required because it appears within the type `std::cell::RefCell<std::option::Option<syntax::tokenstream::TokenStream>>` = note: required because it appears within the type `rustc_data_structures::sync::Lock<std::option::Option<syntax::tokenstream::TokenStream>>` = note: required because it appears within the type `syntax::parse::token::LazyTokenStream` = note: required because it appears within the type `(syntax::parse::token::Nonterminal, syntax::parse::token::LazyTokenStream)` = note: required because of the requirements on the impl of `std::panic::UnwindSafe` for `std::rc::Rc<(syntax::parse::token::Nonterminal, syntax::parse::token::LazyTokenStream)>` = note: required because it appears within the type `syntax::parse::token::Token` = note: required because it appears within the type `syntax::tokenstream::TokenTree` = note: required because it appears within the type `syntax::tokenstream::TokenStreamKind` = note: required because it appears within the type `syntax::tokenstream::TokenStream` = note: required because it appears within the type `proc_macro::TokenStream` = note: required because it appears within the type `proc_macro2::imp::DeferredTokenStream` = note: required because it appears within the type `proc_macro2::imp::TokenStream` = note: required because it appears within the type `proc_macro2::TokenStream` note: required by `unwind_safe::TokenStream::assert_implemented` --> tests/marker.rs:8:13 | 8 | fn assert_implemented<T: $($marker +)+>() {} | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ... 74 | / assert_unwind_safe! { 75 | | Delimiter 76 | | Group 77 | | Ident ... | 84 | | TokenTree 85 | | } | |_____- in this macro invocation
2020-09-09 19:30:22 +00:00
#[cfg(procmacro2_semver_exempt)]
assert_unwind_safe! {
LineColumn
SourceFile
}
2018-11-11 22:25:53 +00:00
}