From 9835e2ae736235810b4ea1c162ca5e65c547e770 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 18 May 2024 04:49:50 +0200 Subject: Merging upstream version 1.71.1+dfsg1. Signed-off-by: Daniel Baumann --- vendor/cxx/tests/ui/array_len_expr.rs | 10 +++ vendor/cxx/tests/ui/array_len_expr.stderr | 17 ++++ vendor/cxx/tests/ui/array_len_suffix.rs | 8 ++ vendor/cxx/tests/ui/array_len_suffix.stderr | 10 +++ vendor/cxx/tests/ui/async_fn.rs | 14 ++++ vendor/cxx/tests/ui/async_fn.stderr | 11 +++ vendor/cxx/tests/ui/bad_explicit_impl.rs | 10 +++ vendor/cxx/tests/ui/bad_explicit_impl.stderr | 5 ++ vendor/cxx/tests/ui/by_value_not_supported.rs | 22 +++++ vendor/cxx/tests/ui/by_value_not_supported.stderr | 59 ++++++++++++++ vendor/cxx/tests/ui/const_fn.rs | 10 +++ vendor/cxx/tests/ui/const_fn.stderr | 5 ++ vendor/cxx/tests/ui/data_enums.rs | 8 ++ vendor/cxx/tests/ui/data_enums.stderr | 5 ++ vendor/cxx/tests/ui/deny_elided_lifetimes.rs | 27 +++++++ vendor/cxx/tests/ui/deny_elided_lifetimes.stderr | 15 ++++ vendor/cxx/tests/ui/deny_missing_docs.rs | 94 ++++++++++++++++++++++ vendor/cxx/tests/ui/deny_missing_docs.stderr | 47 +++++++++++ vendor/cxx/tests/ui/derive_duplicate.rs | 9 +++ vendor/cxx/tests/ui/derive_duplicate.stderr | 7 ++ vendor/cxx/tests/ui/derive_noncopy.rs | 13 +++ vendor/cxx/tests/ui/derive_noncopy.stderr | 7 ++ vendor/cxx/tests/ui/drop_shared.rs | 14 ++++ vendor/cxx/tests/ui/drop_shared.stderr | 8 ++ vendor/cxx/tests/ui/empty_enum.rs | 6 ++ vendor/cxx/tests/ui/empty_enum.stderr | 5 ++ vendor/cxx/tests/ui/empty_struct.rs | 6 ++ vendor/cxx/tests/ui/empty_struct.stderr | 5 ++ vendor/cxx/tests/ui/enum_inconsistent.rs | 9 +++ vendor/cxx/tests/ui/enum_inconsistent.stderr | 5 ++ vendor/cxx/tests/ui/enum_match_without_wildcard.rs | 16 ++++ .../tests/ui/enum_match_without_wildcard.stderr | 17 ++++ vendor/cxx/tests/ui/enum_out_of_bounds.rs | 13 +++ vendor/cxx/tests/ui/enum_out_of_bounds.stderr | 11 +++ vendor/cxx/tests/ui/enum_overflows.rs | 17 ++++ vendor/cxx/tests/ui/enum_overflows.stderr | 5 ++ vendor/cxx/tests/ui/enum_receiver.rs | 11 +++ vendor/cxx/tests/ui/enum_receiver.stderr | 5 ++ vendor/cxx/tests/ui/enum_unsatisfiable.rs | 9 +++ vendor/cxx/tests/ui/enum_unsatisfiable.stderr | 8 ++ vendor/cxx/tests/ui/expected_named.rs | 9 +++ vendor/cxx/tests/ui/expected_named.stderr | 11 +++ vendor/cxx/tests/ui/extern_fn_abi.rs | 8 ++ vendor/cxx/tests/ui/extern_fn_abi.stderr | 5 ++ vendor/cxx/tests/ui/extern_type_bound.rs | 15 ++++ vendor/cxx/tests/ui/extern_type_bound.stderr | 11 +++ vendor/cxx/tests/ui/extern_type_generic.rs | 8 ++ vendor/cxx/tests/ui/extern_type_generic.stderr | 5 ++ vendor/cxx/tests/ui/extern_type_lifetime_bound.rs | 8 ++ .../cxx/tests/ui/extern_type_lifetime_bound.stderr | 5 ++ vendor/cxx/tests/ui/fallible_fnptr.rs | 8 ++ vendor/cxx/tests/ui/fallible_fnptr.stderr | 5 ++ vendor/cxx/tests/ui/function_with_body.rs | 8 ++ vendor/cxx/tests/ui/function_with_body.stderr | 5 ++ vendor/cxx/tests/ui/generic_enum.rs | 16 ++++ vendor/cxx/tests/ui/generic_enum.stderr | 17 ++++ vendor/cxx/tests/ui/impl_trait_for_type.rs | 10 +++ vendor/cxx/tests/ui/impl_trait_for_type.stderr | 5 ++ vendor/cxx/tests/ui/include.rs | 12 +++ vendor/cxx/tests/ui/include.stderr | 29 +++++++ vendor/cxx/tests/ui/lifetime_extern_cxx.rs | 9 +++ vendor/cxx/tests/ui/lifetime_extern_cxx.stderr | 5 ++ vendor/cxx/tests/ui/lifetime_extern_rust.rs | 17 ++++ vendor/cxx/tests/ui/lifetime_extern_rust.stderr | 5 ++ vendor/cxx/tests/ui/missing_unsafe.rs | 10 +++ vendor/cxx/tests/ui/missing_unsafe.stderr | 9 +++ vendor/cxx/tests/ui/multiple_parse_error.rs | 8 ++ vendor/cxx/tests/ui/multiple_parse_error.stderr | 11 +++ vendor/cxx/tests/ui/mut_return.rs | 18 +++++ vendor/cxx/tests/ui/mut_return.stderr | 11 +++ .../cxx/tests/ui/non_integer_discriminant_enum.rs | 8 ++ .../tests/ui/non_integer_discriminant_enum.stderr | 5 ++ vendor/cxx/tests/ui/nonempty_impl_block.rs | 12 +++ vendor/cxx/tests/ui/nonempty_impl_block.stderr | 8 ++ vendor/cxx/tests/ui/nonlocal_rust_type.rs | 18 +++++ vendor/cxx/tests/ui/nonlocal_rust_type.stderr | 21 +++++ vendor/cxx/tests/ui/opaque_autotraits.rs | 16 ++++ vendor/cxx/tests/ui/opaque_autotraits.stderr | 59 ++++++++++++++ vendor/cxx/tests/ui/opaque_not_sized.rs | 10 +++ vendor/cxx/tests/ui/opaque_not_sized.stderr | 17 ++++ vendor/cxx/tests/ui/pin_mut_opaque.rs | 14 ++++ vendor/cxx/tests/ui/pin_mut_opaque.stderr | 35 ++++++++ vendor/cxx/tests/ui/ptr_in_fnptr.rs | 8 ++ vendor/cxx/tests/ui/ptr_in_fnptr.stderr | 5 ++ vendor/cxx/tests/ui/ptr_missing_unsafe.rs | 10 +++ vendor/cxx/tests/ui/ptr_missing_unsafe.stderr | 5 ++ vendor/cxx/tests/ui/ptr_no_const_mut.rs | 10 +++ vendor/cxx/tests/ui/ptr_no_const_mut.stderr | 18 +++++ vendor/cxx/tests/ui/ptr_unsupported.rs | 12 +++ vendor/cxx/tests/ui/ptr_unsupported.stderr | 17 ++++ vendor/cxx/tests/ui/raw_ident_namespace.rs | 53 ++++++++++++ vendor/cxx/tests/ui/raw_ident_namespace.stderr | 11 +++ vendor/cxx/tests/ui/reference_to_reference.rs | 13 +++ vendor/cxx/tests/ui/reference_to_reference.stderr | 11 +++ vendor/cxx/tests/ui/reserved_lifetime.rs | 10 +++ vendor/cxx/tests/ui/reserved_lifetime.stderr | 5 ++ vendor/cxx/tests/ui/reserved_name.rs | 16 ++++ vendor/cxx/tests/ui/reserved_name.stderr | 17 ++++ vendor/cxx/tests/ui/result_no_display.rs | 14 ++++ vendor/cxx/tests/ui/result_no_display.stderr | 8 ++ vendor/cxx/tests/ui/root_namespace.rs | 13 +++ vendor/cxx/tests/ui/root_namespace.stderr | 5 ++ vendor/cxx/tests/ui/rust_pinned.rs | 14 ++++ vendor/cxx/tests/ui/rust_pinned.stderr | 17 ++++ vendor/cxx/tests/ui/slice_of_type_alias.rs | 30 +++++++ vendor/cxx/tests/ui/slice_of_type_alias.stderr | 16 ++++ vendor/cxx/tests/ui/slice_unsupported.rs | 10 +++ vendor/cxx/tests/ui/slice_unsupported.stderr | 11 +++ vendor/cxx/tests/ui/struct_cycle.rs | 34 ++++++++ vendor/cxx/tests/ui/struct_cycle.stderr | 23 ++++++ vendor/cxx/tests/ui/type_alias_rust.rs | 9 +++ vendor/cxx/tests/ui/type_alias_rust.stderr | 5 ++ vendor/cxx/tests/ui/unique_ptr_as_mut.rs | 23 ++++++ vendor/cxx/tests/ui/unique_ptr_as_mut.stderr | 7 ++ vendor/cxx/tests/ui/unique_ptr_to_opaque.rs | 23 ++++++ vendor/cxx/tests/ui/unique_ptr_to_opaque.stderr | 18 +++++ vendor/cxx/tests/ui/unique_ptr_twice.rs | 19 +++++ vendor/cxx/tests/ui/unique_ptr_twice.stderr | 8 ++ vendor/cxx/tests/ui/unnamed_receiver.rs | 14 ++++ vendor/cxx/tests/ui/unnamed_receiver.stderr | 11 +++ vendor/cxx/tests/ui/unpin_impl.rs | 10 +++ vendor/cxx/tests/ui/unpin_impl.stderr | 18 +++++ vendor/cxx/tests/ui/unrecognized_receiver.rs | 8 ++ vendor/cxx/tests/ui/unrecognized_receiver.stderr | 5 ++ vendor/cxx/tests/ui/unsupported_elided.rs | 20 +++++ vendor/cxx/tests/ui/unsupported_elided.stderr | 22 +++++ vendor/cxx/tests/ui/vec_opaque.rs | 34 ++++++++ vendor/cxx/tests/ui/vec_opaque.stderr | 23 ++++++ vendor/cxx/tests/ui/vector_autotraits.rs | 21 +++++ vendor/cxx/tests/ui/vector_autotraits.stderr | 22 +++++ vendor/cxx/tests/ui/wrong_type_id.rs | 15 ++++ vendor/cxx/tests/ui/wrong_type_id.stderr | 13 +++ 132 files changed, 1873 insertions(+) create mode 100644 vendor/cxx/tests/ui/array_len_expr.rs create mode 100644 vendor/cxx/tests/ui/array_len_expr.stderr create mode 100644 vendor/cxx/tests/ui/array_len_suffix.rs create mode 100644 vendor/cxx/tests/ui/array_len_suffix.stderr create mode 100644 vendor/cxx/tests/ui/async_fn.rs create mode 100644 vendor/cxx/tests/ui/async_fn.stderr create mode 100644 vendor/cxx/tests/ui/bad_explicit_impl.rs create mode 100644 vendor/cxx/tests/ui/bad_explicit_impl.stderr create mode 100644 vendor/cxx/tests/ui/by_value_not_supported.rs create mode 100644 vendor/cxx/tests/ui/by_value_not_supported.stderr create mode 100644 vendor/cxx/tests/ui/const_fn.rs create mode 100644 vendor/cxx/tests/ui/const_fn.stderr create mode 100644 vendor/cxx/tests/ui/data_enums.rs create mode 100644 vendor/cxx/tests/ui/data_enums.stderr create mode 100644 vendor/cxx/tests/ui/deny_elided_lifetimes.rs create mode 100644 vendor/cxx/tests/ui/deny_elided_lifetimes.stderr create mode 100644 vendor/cxx/tests/ui/deny_missing_docs.rs create mode 100644 vendor/cxx/tests/ui/deny_missing_docs.stderr create mode 100644 vendor/cxx/tests/ui/derive_duplicate.rs create mode 100644 vendor/cxx/tests/ui/derive_duplicate.stderr create mode 100644 vendor/cxx/tests/ui/derive_noncopy.rs create mode 100644 vendor/cxx/tests/ui/derive_noncopy.stderr create mode 100644 vendor/cxx/tests/ui/drop_shared.rs create mode 100644 vendor/cxx/tests/ui/drop_shared.stderr create mode 100644 vendor/cxx/tests/ui/empty_enum.rs create mode 100644 vendor/cxx/tests/ui/empty_enum.stderr create mode 100644 vendor/cxx/tests/ui/empty_struct.rs create mode 100644 vendor/cxx/tests/ui/empty_struct.stderr create mode 100644 vendor/cxx/tests/ui/enum_inconsistent.rs create mode 100644 vendor/cxx/tests/ui/enum_inconsistent.stderr create mode 100644 vendor/cxx/tests/ui/enum_match_without_wildcard.rs create mode 100644 vendor/cxx/tests/ui/enum_match_without_wildcard.stderr create mode 100644 vendor/cxx/tests/ui/enum_out_of_bounds.rs create mode 100644 vendor/cxx/tests/ui/enum_out_of_bounds.stderr create mode 100644 vendor/cxx/tests/ui/enum_overflows.rs create mode 100644 vendor/cxx/tests/ui/enum_overflows.stderr create mode 100644 vendor/cxx/tests/ui/enum_receiver.rs create mode 100644 vendor/cxx/tests/ui/enum_receiver.stderr create mode 100644 vendor/cxx/tests/ui/enum_unsatisfiable.rs create mode 100644 vendor/cxx/tests/ui/enum_unsatisfiable.stderr create mode 100644 vendor/cxx/tests/ui/expected_named.rs create mode 100644 vendor/cxx/tests/ui/expected_named.stderr create mode 100644 vendor/cxx/tests/ui/extern_fn_abi.rs create mode 100644 vendor/cxx/tests/ui/extern_fn_abi.stderr create mode 100644 vendor/cxx/tests/ui/extern_type_bound.rs create mode 100644 vendor/cxx/tests/ui/extern_type_bound.stderr create mode 100644 vendor/cxx/tests/ui/extern_type_generic.rs create mode 100644 vendor/cxx/tests/ui/extern_type_generic.stderr create mode 100644 vendor/cxx/tests/ui/extern_type_lifetime_bound.rs create mode 100644 vendor/cxx/tests/ui/extern_type_lifetime_bound.stderr create mode 100644 vendor/cxx/tests/ui/fallible_fnptr.rs create mode 100644 vendor/cxx/tests/ui/fallible_fnptr.stderr create mode 100644 vendor/cxx/tests/ui/function_with_body.rs create mode 100644 vendor/cxx/tests/ui/function_with_body.stderr create mode 100644 vendor/cxx/tests/ui/generic_enum.rs create mode 100644 vendor/cxx/tests/ui/generic_enum.stderr create mode 100644 vendor/cxx/tests/ui/impl_trait_for_type.rs create mode 100644 vendor/cxx/tests/ui/impl_trait_for_type.stderr create mode 100644 vendor/cxx/tests/ui/include.rs create mode 100644 vendor/cxx/tests/ui/include.stderr create mode 100644 vendor/cxx/tests/ui/lifetime_extern_cxx.rs create mode 100644 vendor/cxx/tests/ui/lifetime_extern_cxx.stderr create mode 100644 vendor/cxx/tests/ui/lifetime_extern_rust.rs create mode 100644 vendor/cxx/tests/ui/lifetime_extern_rust.stderr create mode 100644 vendor/cxx/tests/ui/missing_unsafe.rs create mode 100644 vendor/cxx/tests/ui/missing_unsafe.stderr create mode 100644 vendor/cxx/tests/ui/multiple_parse_error.rs create mode 100644 vendor/cxx/tests/ui/multiple_parse_error.stderr create mode 100644 vendor/cxx/tests/ui/mut_return.rs create mode 100644 vendor/cxx/tests/ui/mut_return.stderr create mode 100644 vendor/cxx/tests/ui/non_integer_discriminant_enum.rs create mode 100644 vendor/cxx/tests/ui/non_integer_discriminant_enum.stderr create mode 100644 vendor/cxx/tests/ui/nonempty_impl_block.rs create mode 100644 vendor/cxx/tests/ui/nonempty_impl_block.stderr create mode 100644 vendor/cxx/tests/ui/nonlocal_rust_type.rs create mode 100644 vendor/cxx/tests/ui/nonlocal_rust_type.stderr create mode 100644 vendor/cxx/tests/ui/opaque_autotraits.rs create mode 100644 vendor/cxx/tests/ui/opaque_autotraits.stderr create mode 100644 vendor/cxx/tests/ui/opaque_not_sized.rs create mode 100644 vendor/cxx/tests/ui/opaque_not_sized.stderr create mode 100644 vendor/cxx/tests/ui/pin_mut_opaque.rs create mode 100644 vendor/cxx/tests/ui/pin_mut_opaque.stderr create mode 100644 vendor/cxx/tests/ui/ptr_in_fnptr.rs create mode 100644 vendor/cxx/tests/ui/ptr_in_fnptr.stderr create mode 100644 vendor/cxx/tests/ui/ptr_missing_unsafe.rs create mode 100644 vendor/cxx/tests/ui/ptr_missing_unsafe.stderr create mode 100644 vendor/cxx/tests/ui/ptr_no_const_mut.rs create mode 100644 vendor/cxx/tests/ui/ptr_no_const_mut.stderr create mode 100644 vendor/cxx/tests/ui/ptr_unsupported.rs create mode 100644 vendor/cxx/tests/ui/ptr_unsupported.stderr create mode 100644 vendor/cxx/tests/ui/raw_ident_namespace.rs create mode 100644 vendor/cxx/tests/ui/raw_ident_namespace.stderr create mode 100644 vendor/cxx/tests/ui/reference_to_reference.rs create mode 100644 vendor/cxx/tests/ui/reference_to_reference.stderr create mode 100644 vendor/cxx/tests/ui/reserved_lifetime.rs create mode 100644 vendor/cxx/tests/ui/reserved_lifetime.stderr create mode 100644 vendor/cxx/tests/ui/reserved_name.rs create mode 100644 vendor/cxx/tests/ui/reserved_name.stderr create mode 100644 vendor/cxx/tests/ui/result_no_display.rs create mode 100644 vendor/cxx/tests/ui/result_no_display.stderr create mode 100644 vendor/cxx/tests/ui/root_namespace.rs create mode 100644 vendor/cxx/tests/ui/root_namespace.stderr create mode 100644 vendor/cxx/tests/ui/rust_pinned.rs create mode 100644 vendor/cxx/tests/ui/rust_pinned.stderr create mode 100644 vendor/cxx/tests/ui/slice_of_type_alias.rs create mode 100644 vendor/cxx/tests/ui/slice_of_type_alias.stderr create mode 100644 vendor/cxx/tests/ui/slice_unsupported.rs create mode 100644 vendor/cxx/tests/ui/slice_unsupported.stderr create mode 100644 vendor/cxx/tests/ui/struct_cycle.rs create mode 100644 vendor/cxx/tests/ui/struct_cycle.stderr create mode 100644 vendor/cxx/tests/ui/type_alias_rust.rs create mode 100644 vendor/cxx/tests/ui/type_alias_rust.stderr create mode 100644 vendor/cxx/tests/ui/unique_ptr_as_mut.rs create mode 100644 vendor/cxx/tests/ui/unique_ptr_as_mut.stderr create mode 100644 vendor/cxx/tests/ui/unique_ptr_to_opaque.rs create mode 100644 vendor/cxx/tests/ui/unique_ptr_to_opaque.stderr create mode 100644 vendor/cxx/tests/ui/unique_ptr_twice.rs create mode 100644 vendor/cxx/tests/ui/unique_ptr_twice.stderr create mode 100644 vendor/cxx/tests/ui/unnamed_receiver.rs create mode 100644 vendor/cxx/tests/ui/unnamed_receiver.stderr create mode 100644 vendor/cxx/tests/ui/unpin_impl.rs create mode 100644 vendor/cxx/tests/ui/unpin_impl.stderr create mode 100644 vendor/cxx/tests/ui/unrecognized_receiver.rs create mode 100644 vendor/cxx/tests/ui/unrecognized_receiver.stderr create mode 100644 vendor/cxx/tests/ui/unsupported_elided.rs create mode 100644 vendor/cxx/tests/ui/unsupported_elided.stderr create mode 100644 vendor/cxx/tests/ui/vec_opaque.rs create mode 100644 vendor/cxx/tests/ui/vec_opaque.stderr create mode 100644 vendor/cxx/tests/ui/vector_autotraits.rs create mode 100644 vendor/cxx/tests/ui/vector_autotraits.stderr create mode 100644 vendor/cxx/tests/ui/wrong_type_id.rs create mode 100644 vendor/cxx/tests/ui/wrong_type_id.stderr (limited to 'vendor/cxx/tests/ui') diff --git a/vendor/cxx/tests/ui/array_len_expr.rs b/vendor/cxx/tests/ui/array_len_expr.rs new file mode 100644 index 000000000..73da57c8f --- /dev/null +++ b/vendor/cxx/tests/ui/array_len_expr.rs @@ -0,0 +1,10 @@ +#[cxx::bridge] +mod ffi { + struct Shared { + arraystr: [String; "13"], + arraysub: [String; 15 - 1], + arrayzero: [String; 0], + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/array_len_expr.stderr b/vendor/cxx/tests/ui/array_len_expr.stderr new file mode 100644 index 000000000..c58cfbc2c --- /dev/null +++ b/vendor/cxx/tests/ui/array_len_expr.stderr @@ -0,0 +1,17 @@ +error: array length must be an integer literal + --> tests/ui/array_len_expr.rs:4:28 + | +4 | arraystr: [String; "13"], + | ^^^^ + +error: unsupported expression, array length must be an integer literal + --> tests/ui/array_len_expr.rs:5:28 + | +5 | arraysub: [String; 15 - 1], + | ^^^^^^ + +error: array with zero size is not supported + --> tests/ui/array_len_expr.rs:6:20 + | +6 | arrayzero: [String; 0], + | ^^^^^^^^^^^ diff --git a/vendor/cxx/tests/ui/array_len_suffix.rs b/vendor/cxx/tests/ui/array_len_suffix.rs new file mode 100644 index 000000000..1e9d514fc --- /dev/null +++ b/vendor/cxx/tests/ui/array_len_suffix.rs @@ -0,0 +1,8 @@ +#[cxx::bridge] +mod ffi { + unsafe extern "C++" { + fn array() -> [String; 12u16]; + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/array_len_suffix.stderr b/vendor/cxx/tests/ui/array_len_suffix.stderr new file mode 100644 index 000000000..1dde790e8 --- /dev/null +++ b/vendor/cxx/tests/ui/array_len_suffix.stderr @@ -0,0 +1,10 @@ +error[E0308]: mismatched types + --> tests/ui/array_len_suffix.rs:4:32 + | +4 | fn array() -> [String; 12u16]; + | ^^^^^ expected `usize`, found `u16` + | +help: change the type of the numeric literal from `u16` to `usize` + | +4 | fn array() -> [String; 12usize]; + | ~~~~~ diff --git a/vendor/cxx/tests/ui/async_fn.rs b/vendor/cxx/tests/ui/async_fn.rs new file mode 100644 index 000000000..4e663a0b6 --- /dev/null +++ b/vendor/cxx/tests/ui/async_fn.rs @@ -0,0 +1,14 @@ +#[cxx::bridge] +mod ffi { + extern "Rust" { + async fn f(); + } + + extern "C++" { + async fn g(); + } +} + +async fn f() {} + +fn main() {} diff --git a/vendor/cxx/tests/ui/async_fn.stderr b/vendor/cxx/tests/ui/async_fn.stderr new file mode 100644 index 000000000..78108650f --- /dev/null +++ b/vendor/cxx/tests/ui/async_fn.stderr @@ -0,0 +1,11 @@ +error: async function is not directly supported yet, but see https://cxx.rs/async.html for a working approach, and https://github.com/pcwalton/cxx-async for some helpers; eventually what you wrote will work but it isn't integrated into the cxx::bridge macro yet + --> tests/ui/async_fn.rs:4:9 + | +4 | async fn f(); + | ^^^^^^^^^^^^^ + +error: async function is not directly supported yet, but see https://cxx.rs/async.html for a working approach, and https://github.com/pcwalton/cxx-async for some helpers; eventually what you wrote will work but it isn't integrated into the cxx::bridge macro yet + --> tests/ui/async_fn.rs:8:9 + | +8 | async fn g(); + | ^^^^^^^^^^^^^ diff --git a/vendor/cxx/tests/ui/bad_explicit_impl.rs b/vendor/cxx/tests/ui/bad_explicit_impl.rs new file mode 100644 index 000000000..210644661 --- /dev/null +++ b/vendor/cxx/tests/ui/bad_explicit_impl.rs @@ -0,0 +1,10 @@ +#[cxx::bridge] +mod ffi { + struct S { + x: u8, + } + + impl fn() -> &S {} +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/bad_explicit_impl.stderr b/vendor/cxx/tests/ui/bad_explicit_impl.stderr new file mode 100644 index 000000000..c4748f421 --- /dev/null +++ b/vendor/cxx/tests/ui/bad_explicit_impl.stderr @@ -0,0 +1,5 @@ +error: unsupported Self type of explicit impl + --> tests/ui/bad_explicit_impl.rs:7:5 + | +7 | impl fn() -> &S {} + | ^^^^^^^^^^^^^^^^^^ diff --git a/vendor/cxx/tests/ui/by_value_not_supported.rs b/vendor/cxx/tests/ui/by_value_not_supported.rs new file mode 100644 index 000000000..62bf8d4f3 --- /dev/null +++ b/vendor/cxx/tests/ui/by_value_not_supported.rs @@ -0,0 +1,22 @@ +#[cxx::bridge] +mod ffi { + struct S { + c: C, + r: R, + s: CxxString, + } + + extern "C++" { + type C; + } + + extern "Rust" { + type R; + + fn f(c: C) -> C; + fn g(r: R) -> R; + fn h(s: CxxString) -> CxxString; + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/by_value_not_supported.stderr b/vendor/cxx/tests/ui/by_value_not_supported.stderr new file mode 100644 index 000000000..254c7bb45 --- /dev/null +++ b/vendor/cxx/tests/ui/by_value_not_supported.stderr @@ -0,0 +1,59 @@ +error: using opaque C++ type by value is not supported + --> tests/ui/by_value_not_supported.rs:4:9 + | +4 | c: C, + | ^^^^ + +error: using opaque Rust type by value is not supported + --> tests/ui/by_value_not_supported.rs:5:9 + | +5 | r: R, + | ^^^^ + +error: using C++ string by value is not supported + --> tests/ui/by_value_not_supported.rs:6:9 + | +6 | s: CxxString, + | ^^^^^^^^^^^^ + +error: needs a cxx::ExternType impl in order to be used as a field of `S`, argument of `f` or return value of `f` + --> tests/ui/by_value_not_supported.rs:10:9 + | +10 | type C; + | ^^^^^^ + +error: passing opaque C++ type by value is not supported + --> tests/ui/by_value_not_supported.rs:16:14 + | +16 | fn f(c: C) -> C; + | ^^^^ + +error: returning opaque C++ type by value is not supported + --> tests/ui/by_value_not_supported.rs:16:23 + | +16 | fn f(c: C) -> C; + | ^ + +error: passing opaque Rust type by value is not supported + --> tests/ui/by_value_not_supported.rs:17:14 + | +17 | fn g(r: R) -> R; + | ^^^^ + +error: returning opaque Rust type by value is not supported + --> tests/ui/by_value_not_supported.rs:17:23 + | +17 | fn g(r: R) -> R; + | ^ + +error: passing C++ string by value is not supported + --> tests/ui/by_value_not_supported.rs:18:14 + | +18 | fn h(s: CxxString) -> CxxString; + | ^^^^^^^^^^^^ + +error: returning C++ string by value is not supported + --> tests/ui/by_value_not_supported.rs:18:31 + | +18 | fn h(s: CxxString) -> CxxString; + | ^^^^^^^^^ diff --git a/vendor/cxx/tests/ui/const_fn.rs b/vendor/cxx/tests/ui/const_fn.rs new file mode 100644 index 000000000..1ad489411 --- /dev/null +++ b/vendor/cxx/tests/ui/const_fn.rs @@ -0,0 +1,10 @@ +#[cxx::bridge] +mod ffi { + extern "Rust" { + const fn f(); + } +} + +const fn f() {} + +fn main() {} diff --git a/vendor/cxx/tests/ui/const_fn.stderr b/vendor/cxx/tests/ui/const_fn.stderr new file mode 100644 index 000000000..2dd6608af --- /dev/null +++ b/vendor/cxx/tests/ui/const_fn.stderr @@ -0,0 +1,5 @@ +error: const extern function is not supported + --> tests/ui/const_fn.rs:4:9 + | +4 | const fn f(); + | ^^^^^^^^^^^^^ diff --git a/vendor/cxx/tests/ui/data_enums.rs b/vendor/cxx/tests/ui/data_enums.rs new file mode 100644 index 000000000..aa23200dc --- /dev/null +++ b/vendor/cxx/tests/ui/data_enums.rs @@ -0,0 +1,8 @@ +#[cxx::bridge] +mod ffi { + enum A { + Field(u64), + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/data_enums.stderr b/vendor/cxx/tests/ui/data_enums.stderr new file mode 100644 index 000000000..d8aa09e39 --- /dev/null +++ b/vendor/cxx/tests/ui/data_enums.stderr @@ -0,0 +1,5 @@ +error: enums with data are not supported yet + --> tests/ui/data_enums.rs:4:9 + | +4 | Field(u64), + | ^^^^^^^^^^ diff --git a/vendor/cxx/tests/ui/deny_elided_lifetimes.rs b/vendor/cxx/tests/ui/deny_elided_lifetimes.rs new file mode 100644 index 000000000..0ab3f750a --- /dev/null +++ b/vendor/cxx/tests/ui/deny_elided_lifetimes.rs @@ -0,0 +1,27 @@ +#![deny(elided_lifetimes_in_paths)] + +#[cxx::bridge] +mod ffi { + #[derive(PartialEq, PartialOrd, Hash)] + struct Struct<'a> { + reference: &'a i32, + } + + extern "Rust" { + type Rust<'a>; + } + + unsafe extern "C++" { + type Cpp<'a>; + + fn lifetime_named<'a>(s: &'a i32) -> UniquePtr>; + + fn lifetime_underscore(s: &i32) -> UniquePtr>; + + fn lifetime_elided(s: &i32) -> UniquePtr; + } +} + +pub struct Rust<'a>(&'a i32); + +fn main() {} diff --git a/vendor/cxx/tests/ui/deny_elided_lifetimes.stderr b/vendor/cxx/tests/ui/deny_elided_lifetimes.stderr new file mode 100644 index 000000000..857bb5b7f --- /dev/null +++ b/vendor/cxx/tests/ui/deny_elided_lifetimes.stderr @@ -0,0 +1,15 @@ +error: hidden lifetime parameters in types are deprecated + --> tests/ui/deny_elided_lifetimes.rs:21:50 + | +21 | fn lifetime_elided(s: &i32) -> UniquePtr; + | ^^^ expected lifetime parameter + | +note: the lint level is defined here + --> tests/ui/deny_elided_lifetimes.rs:1:9 + | +1 | #![deny(elided_lifetimes_in_paths)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^ +help: indicate the anonymous lifetime + | +21 | fn lifetime_elided(s: &i32) -> UniquePtr>; + | ++++ diff --git a/vendor/cxx/tests/ui/deny_missing_docs.rs b/vendor/cxx/tests/ui/deny_missing_docs.rs new file mode 100644 index 000000000..037894bb8 --- /dev/null +++ b/vendor/cxx/tests/ui/deny_missing_docs.rs @@ -0,0 +1,94 @@ +// TODO: More work is needed so that the missing_docs lints produced by rustc +// are properly positioned inside of the bridge. + +//! ... + +#![deny(missing_docs)] + +/// ... +#[cxx::bridge] +pub mod ffi { + pub struct UndocumentedStruct { + pub undocumented_field: u8, + } + + /// ... + pub struct DocumentedStruct { + /// ... + pub documented_field: u8, + } + + pub enum UndocumentedEnum { + UndocumentedVariant = 0, + } + + /// ... + pub enum DocumentedEnum { + /// ... + DocumentedVariant = 0, + } + + extern "Rust" { + pub type UndocumentedRustType; + + /// ... + pub type DocumentedRustType; + + pub fn undocumented_rust_fn() -> u8; + + /// ... + pub fn documented_rust_fn() -> u8; + } + + unsafe extern "C++" { + pub type UndocumentedForeignType; + + /// ... + pub type DocumentedForeignType; + + pub type UndocumentedTypeAlias = crate::bindgen::UndocumentedTypeAlias; + + /// ... + pub type DocumentedTypeAlias = crate::bindgen::DocumentedTypeAlias; + + pub fn undocumented_foreign_fn() -> u8; + + /// ... + pub fn documented_foreign_fn() -> u8; + } + + #[allow(missing_docs)] + pub struct SuppressUndocumentedStruct { + pub undocumented_field: u8, + } +} + +struct UndocumentedRustType; +struct DocumentedRustType; + +mod bindgen { + use cxx::{type_id, ExternType}; + + pub struct UndocumentedTypeAlias; + pub struct DocumentedTypeAlias; + + unsafe impl ExternType for UndocumentedTypeAlias { + type Id = type_id!("UndocumentedTypeAlias"); + type Kind = cxx::kind::Opaque; + } + + unsafe impl ExternType for DocumentedTypeAlias { + type Id = type_id!("DocumentedTypeAlias"); + type Kind = cxx::kind::Opaque; + } +} + +fn undocumented_rust_fn() -> u8 { + 0 +} + +fn documented_rust_fn() -> u8 { + 0 +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/deny_missing_docs.stderr b/vendor/cxx/tests/ui/deny_missing_docs.stderr new file mode 100644 index 000000000..54ab987b4 --- /dev/null +++ b/vendor/cxx/tests/ui/deny_missing_docs.stderr @@ -0,0 +1,47 @@ +error: missing documentation for a struct + --> tests/ui/deny_missing_docs.rs:11:5 + | +11 | pub struct UndocumentedStruct { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | +note: the lint level is defined here + --> tests/ui/deny_missing_docs.rs:6:9 + | +6 | #![deny(missing_docs)] + | ^^^^^^^^^^^^ + +error: missing documentation for a struct field + --> tests/ui/deny_missing_docs.rs:12:9 + | +12 | pub undocumented_field: u8, + | ^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: missing documentation for a struct + --> tests/ui/deny_missing_docs.rs:21:5 + | +21 | pub enum UndocumentedEnum { + | ^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: missing documentation for an associated constant + --> tests/ui/deny_missing_docs.rs:22:9 + | +22 | UndocumentedVariant = 0, + | ^^^^^^^^^^^^^^^^^^^ + +error: missing documentation for a struct + --> tests/ui/deny_missing_docs.rs:44:9 + | +44 | pub type UndocumentedForeignType; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: missing documentation for a type alias + --> tests/ui/deny_missing_docs.rs:49:9 + | +49 | pub type UndocumentedTypeAlias = crate::bindgen::UndocumentedTypeAlias; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: missing documentation for a function + --> tests/ui/deny_missing_docs.rs:54:9 + | +54 | pub fn undocumented_foreign_fn() -> u8; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/vendor/cxx/tests/ui/derive_duplicate.rs b/vendor/cxx/tests/ui/derive_duplicate.rs new file mode 100644 index 000000000..3061f765c --- /dev/null +++ b/vendor/cxx/tests/ui/derive_duplicate.rs @@ -0,0 +1,9 @@ +#[cxx::bridge] +mod ffi { + #[derive(Clone, Clone)] + struct Struct { + x: usize, + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/derive_duplicate.stderr b/vendor/cxx/tests/ui/derive_duplicate.stderr new file mode 100644 index 000000000..759208629 --- /dev/null +++ b/vendor/cxx/tests/ui/derive_duplicate.stderr @@ -0,0 +1,7 @@ +error[E0119]: conflicting implementations of trait `Clone` for type `Struct` + --> tests/ui/derive_duplicate.rs:3:21 + | +3 | #[derive(Clone, Clone)] + | ----- ^^^^^ conflicting implementation for `Struct` + | | + | first implementation here diff --git a/vendor/cxx/tests/ui/derive_noncopy.rs b/vendor/cxx/tests/ui/derive_noncopy.rs new file mode 100644 index 000000000..ae705fd00 --- /dev/null +++ b/vendor/cxx/tests/ui/derive_noncopy.rs @@ -0,0 +1,13 @@ +#[cxx::bridge] +mod ffi { + #[derive(Copy)] + struct TryCopy { + other: Other, + } + + struct Other { + x: usize, + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/derive_noncopy.stderr b/vendor/cxx/tests/ui/derive_noncopy.stderr new file mode 100644 index 000000000..b4f35d3e4 --- /dev/null +++ b/vendor/cxx/tests/ui/derive_noncopy.stderr @@ -0,0 +1,7 @@ +error[E0204]: the trait `Copy` cannot be implemented for this type + --> tests/ui/derive_noncopy.rs:4:12 + | +4 | struct TryCopy { + | ^^^^^^^ +5 | other: Other, + | ------------ this field does not implement `Copy` diff --git a/vendor/cxx/tests/ui/drop_shared.rs b/vendor/cxx/tests/ui/drop_shared.rs new file mode 100644 index 000000000..5e3de4a1e --- /dev/null +++ b/vendor/cxx/tests/ui/drop_shared.rs @@ -0,0 +1,14 @@ +#[cxx::bridge] +mod ffi { + struct Shared { + fd: i32, + } +} + +impl Drop for ffi::Shared { + fn drop(&mut self) { + println!("close({})", self.fd); + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/drop_shared.stderr b/vendor/cxx/tests/ui/drop_shared.stderr new file mode 100644 index 000000000..41a5287f7 --- /dev/null +++ b/vendor/cxx/tests/ui/drop_shared.stderr @@ -0,0 +1,8 @@ +error[E0119]: conflicting implementations of trait `forbid::Drop` for type `Shared` + --> tests/ui/drop_shared.rs:3:5 + | +1 | #[cxx::bridge] + | -------------- first implementation here +2 | mod ffi { +3 | struct Shared { + | ^^^^^^^^^^^^^ conflicting implementation for `Shared` diff --git a/vendor/cxx/tests/ui/empty_enum.rs b/vendor/cxx/tests/ui/empty_enum.rs new file mode 100644 index 000000000..987004bb3 --- /dev/null +++ b/vendor/cxx/tests/ui/empty_enum.rs @@ -0,0 +1,6 @@ +#[cxx::bridge] +mod ffi { + enum A {} +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/empty_enum.stderr b/vendor/cxx/tests/ui/empty_enum.stderr new file mode 100644 index 000000000..60d3b5da3 --- /dev/null +++ b/vendor/cxx/tests/ui/empty_enum.stderr @@ -0,0 +1,5 @@ +error: explicit #[repr(...)] is required for enum without any variants + --> tests/ui/empty_enum.rs:3:5 + | +3 | enum A {} + | ^^^^^^^^^ diff --git a/vendor/cxx/tests/ui/empty_struct.rs b/vendor/cxx/tests/ui/empty_struct.rs new file mode 100644 index 000000000..060cfe0fa --- /dev/null +++ b/vendor/cxx/tests/ui/empty_struct.rs @@ -0,0 +1,6 @@ +#[cxx::bridge] +mod ffi { + struct Empty {} +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/empty_struct.stderr b/vendor/cxx/tests/ui/empty_struct.stderr new file mode 100644 index 000000000..f6fbfc117 --- /dev/null +++ b/vendor/cxx/tests/ui/empty_struct.stderr @@ -0,0 +1,5 @@ +error: structs without any fields are not supported + --> tests/ui/empty_struct.rs:3:5 + | +3 | struct Empty {} + | ^^^^^^^^^^^^^^^ diff --git a/vendor/cxx/tests/ui/enum_inconsistent.rs b/vendor/cxx/tests/ui/enum_inconsistent.rs new file mode 100644 index 000000000..cd5ffa5b9 --- /dev/null +++ b/vendor/cxx/tests/ui/enum_inconsistent.rs @@ -0,0 +1,9 @@ +#[cxx::bridge] +mod ffi { + enum Bad { + A = 1u16, + B = 2i64, + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/enum_inconsistent.stderr b/vendor/cxx/tests/ui/enum_inconsistent.stderr new file mode 100644 index 000000000..d6d7837e1 --- /dev/null +++ b/vendor/cxx/tests/ui/enum_inconsistent.stderr @@ -0,0 +1,5 @@ +error: expected u16, found i64 + --> tests/ui/enum_inconsistent.rs:5:9 + | +5 | B = 2i64, + | ^^^^^^^^ diff --git a/vendor/cxx/tests/ui/enum_match_without_wildcard.rs b/vendor/cxx/tests/ui/enum_match_without_wildcard.rs new file mode 100644 index 000000000..1a119429b --- /dev/null +++ b/vendor/cxx/tests/ui/enum_match_without_wildcard.rs @@ -0,0 +1,16 @@ +#[cxx::bridge] +mod ffi { + enum A { + FieldA, + FieldB, + } +} + +fn main() {} + +fn matcher(a: ffi::A) -> u32 { + match a { + ffi::A::FieldA => 2020, + ffi::A::FieldB => 2021, + } +} diff --git a/vendor/cxx/tests/ui/enum_match_without_wildcard.stderr b/vendor/cxx/tests/ui/enum_match_without_wildcard.stderr new file mode 100644 index 000000000..5808d6f8f --- /dev/null +++ b/vendor/cxx/tests/ui/enum_match_without_wildcard.stderr @@ -0,0 +1,17 @@ +error[E0004]: non-exhaustive patterns: `ffi::A { repr: 2_u8..=u8::MAX }` not covered + --> tests/ui/enum_match_without_wildcard.rs:12:11 + | +12 | match a { + | ^ pattern `ffi::A { repr: 2_u8..=u8::MAX }` not covered + | +note: `ffi::A` defined here + --> tests/ui/enum_match_without_wildcard.rs:3:10 + | +3 | enum A { + | ^ + = note: the matched value is of type `ffi::A` +help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown + | +14 ~ ffi::A::FieldB => 2021, +15 ~ ffi::A { repr: 2_u8..=u8::MAX } => todo!(), + | diff --git a/vendor/cxx/tests/ui/enum_out_of_bounds.rs b/vendor/cxx/tests/ui/enum_out_of_bounds.rs new file mode 100644 index 000000000..9e0090b08 --- /dev/null +++ b/vendor/cxx/tests/ui/enum_out_of_bounds.rs @@ -0,0 +1,13 @@ +#[cxx::bridge] +mod ffi { + #[repr(u32)] + enum Bad1 { + A = 0xFFFF_FFFF_FFFF_FFFF, + } + enum Bad2 { + A = 2000, + B = 1u8, + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/enum_out_of_bounds.stderr b/vendor/cxx/tests/ui/enum_out_of_bounds.stderr new file mode 100644 index 000000000..3244b6a7b --- /dev/null +++ b/vendor/cxx/tests/ui/enum_out_of_bounds.stderr @@ -0,0 +1,11 @@ +error: discriminant value `18446744073709551615` is outside the limits of u32 + --> tests/ui/enum_out_of_bounds.rs:5:9 + | +5 | A = 0xFFFF_FFFF_FFFF_FFFF, + | ^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: discriminant value `2000` is outside the limits of u8 + --> tests/ui/enum_out_of_bounds.rs:9:9 + | +9 | B = 1u8, + | ^^^^^^^ diff --git a/vendor/cxx/tests/ui/enum_overflows.rs b/vendor/cxx/tests/ui/enum_overflows.rs new file mode 100644 index 000000000..29de1a008 --- /dev/null +++ b/vendor/cxx/tests/ui/enum_overflows.rs @@ -0,0 +1,17 @@ +#[cxx::bridge] +mod ffi { + enum Good1 { + A = 0xFFFF_FFFF_FFFF_FFFF, + } + enum Good2 { + B = 0xFFFF_FFFF_FFFF_FFFF, + C = 2020, + } + enum Bad { + D = 0xFFFF_FFFF_FFFF_FFFE, + E, + F, + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/enum_overflows.stderr b/vendor/cxx/tests/ui/enum_overflows.stderr new file mode 100644 index 000000000..76c37bb03 --- /dev/null +++ b/vendor/cxx/tests/ui/enum_overflows.stderr @@ -0,0 +1,5 @@ +error: discriminant overflow on value after 18446744073709551615 + --> tests/ui/enum_overflows.rs:13:9 + | +13 | F, + | ^ diff --git a/vendor/cxx/tests/ui/enum_receiver.rs b/vendor/cxx/tests/ui/enum_receiver.rs new file mode 100644 index 000000000..a27f27468 --- /dev/null +++ b/vendor/cxx/tests/ui/enum_receiver.rs @@ -0,0 +1,11 @@ +#[cxx::bridge] +mod ffi { + enum Enum { + Variant, + } + extern "Rust" { + fn f(self: &Enum); + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/enum_receiver.stderr b/vendor/cxx/tests/ui/enum_receiver.stderr new file mode 100644 index 000000000..ace767760 --- /dev/null +++ b/vendor/cxx/tests/ui/enum_receiver.stderr @@ -0,0 +1,5 @@ +error: unsupported receiver type; C++ does not allow member functions on enums + --> tests/ui/enum_receiver.rs:7:20 + | +7 | fn f(self: &Enum); + | ^^^^^ diff --git a/vendor/cxx/tests/ui/enum_unsatisfiable.rs b/vendor/cxx/tests/ui/enum_unsatisfiable.rs new file mode 100644 index 000000000..619128743 --- /dev/null +++ b/vendor/cxx/tests/ui/enum_unsatisfiable.rs @@ -0,0 +1,9 @@ +#[cxx::bridge] +mod ffi { + enum Bad { + A = -0xFFFF_FFFF_FFFF_FFFF, + B = 0xFFFF_FFFF_FFFF_FFFF, + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/enum_unsatisfiable.stderr b/vendor/cxx/tests/ui/enum_unsatisfiable.stderr new file mode 100644 index 000000000..e2b37bdd0 --- /dev/null +++ b/vendor/cxx/tests/ui/enum_unsatisfiable.stderr @@ -0,0 +1,8 @@ +error: these discriminant values do not fit in any supported enum repr type + --> tests/ui/enum_unsatisfiable.rs:3:5 + | +3 | / enum Bad { +4 | | A = -0xFFFF_FFFF_FFFF_FFFF, +5 | | B = 0xFFFF_FFFF_FFFF_FFFF, +6 | | } + | |_____^ diff --git a/vendor/cxx/tests/ui/expected_named.rs b/vendor/cxx/tests/ui/expected_named.rs new file mode 100644 index 000000000..31626d1f6 --- /dev/null +++ b/vendor/cxx/tests/ui/expected_named.rs @@ -0,0 +1,9 @@ +#[cxx::bridge] +mod ffi { + unsafe extern "C++" { + type Borrowed<'a>; + fn borrowed() -> UniquePtr; + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/expected_named.stderr b/vendor/cxx/tests/ui/expected_named.stderr new file mode 100644 index 000000000..0068bdf36 --- /dev/null +++ b/vendor/cxx/tests/ui/expected_named.stderr @@ -0,0 +1,11 @@ +error[E0106]: missing lifetime specifier + --> tests/ui/expected_named.rs:5:36 + | +5 | fn borrowed() -> UniquePtr; + | ^^^^^^^^ expected named lifetime parameter + | + = help: this function's return type contains a borrowed value, but there is no value for it to be borrowed from +help: consider using the `'static` lifetime + | +5 | fn borrowed() -> UniquePtr>; + | +++++++++ diff --git a/vendor/cxx/tests/ui/extern_fn_abi.rs b/vendor/cxx/tests/ui/extern_fn_abi.rs new file mode 100644 index 000000000..1f9333885 --- /dev/null +++ b/vendor/cxx/tests/ui/extern_fn_abi.rs @@ -0,0 +1,8 @@ +#[cxx::bridge] +mod ffi { + extern "C++" { + extern "Java" fn f(); + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/extern_fn_abi.stderr b/vendor/cxx/tests/ui/extern_fn_abi.stderr new file mode 100644 index 000000000..32ef9c3e0 --- /dev/null +++ b/vendor/cxx/tests/ui/extern_fn_abi.stderr @@ -0,0 +1,5 @@ +error: explicit ABI on extern function is not supported + --> tests/ui/extern_fn_abi.rs:4:9 + | +4 | extern "Java" fn f(); + | ^^^^^^^^^^^^^ diff --git a/vendor/cxx/tests/ui/extern_type_bound.rs b/vendor/cxx/tests/ui/extern_type_bound.rs new file mode 100644 index 000000000..958accd38 --- /dev/null +++ b/vendor/cxx/tests/ui/extern_type_bound.rs @@ -0,0 +1,15 @@ +#[cxx::bridge] +mod ffi { + extern "C++" { + type Opaque: PartialEq + PartialOrd; + } +} + +#[cxx::bridge] +mod ffi { + extern "C++" { + type Opaque: for<'de> Deserialize<'de>; + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/extern_type_bound.stderr b/vendor/cxx/tests/ui/extern_type_bound.stderr new file mode 100644 index 000000000..1d6796bc6 --- /dev/null +++ b/vendor/cxx/tests/ui/extern_type_bound.stderr @@ -0,0 +1,11 @@ +error: extern type bounds are not implemented yet + --> tests/ui/extern_type_bound.rs:4:22 + | +4 | type Opaque: PartialEq + PartialOrd; + | ^^^^^^^^^^^^^^^^^^^^^^ + +error: unsupported trait + --> tests/ui/extern_type_bound.rs:11:22 + | +11 | type Opaque: for<'de> Deserialize<'de>; + | ^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/vendor/cxx/tests/ui/extern_type_generic.rs b/vendor/cxx/tests/ui/extern_type_generic.rs new file mode 100644 index 000000000..4de2c981f --- /dev/null +++ b/vendor/cxx/tests/ui/extern_type_generic.rs @@ -0,0 +1,8 @@ +#[cxx::bridge] +mod ffi { + extern "C++" { + type Generic; + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/extern_type_generic.stderr b/vendor/cxx/tests/ui/extern_type_generic.stderr new file mode 100644 index 000000000..2b312f0e0 --- /dev/null +++ b/vendor/cxx/tests/ui/extern_type_generic.stderr @@ -0,0 +1,5 @@ +error: extern type with generic type parameter is not supported yet + --> tests/ui/extern_type_generic.rs:4:22 + | +4 | type Generic; + | ^ diff --git a/vendor/cxx/tests/ui/extern_type_lifetime_bound.rs b/vendor/cxx/tests/ui/extern_type_lifetime_bound.rs new file mode 100644 index 000000000..ad581818b --- /dev/null +++ b/vendor/cxx/tests/ui/extern_type_lifetime_bound.rs @@ -0,0 +1,8 @@ +#[cxx::bridge] +mod ffi { + extern "C++" { + type Complex<'a, 'b: 'a>; + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/extern_type_lifetime_bound.stderr b/vendor/cxx/tests/ui/extern_type_lifetime_bound.stderr new file mode 100644 index 000000000..6c3fc7f19 --- /dev/null +++ b/vendor/cxx/tests/ui/extern_type_lifetime_bound.stderr @@ -0,0 +1,5 @@ +error: lifetime parameter with bounds is not supported yet + --> tests/ui/extern_type_lifetime_bound.rs:4:26 + | +4 | type Complex<'a, 'b: 'a>; + | ^^^^^^ diff --git a/vendor/cxx/tests/ui/fallible_fnptr.rs b/vendor/cxx/tests/ui/fallible_fnptr.rs new file mode 100644 index 000000000..c45813de5 --- /dev/null +++ b/vendor/cxx/tests/ui/fallible_fnptr.rs @@ -0,0 +1,8 @@ +#[cxx::bridge] +mod ffi { + unsafe extern "C++" { + fn f(callback: fn() -> Result<()>); + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/fallible_fnptr.stderr b/vendor/cxx/tests/ui/fallible_fnptr.stderr new file mode 100644 index 000000000..4635ec8f7 --- /dev/null +++ b/vendor/cxx/tests/ui/fallible_fnptr.stderr @@ -0,0 +1,5 @@ +error: function pointer returning Result is not supported yet + --> tests/ui/fallible_fnptr.rs:4:24 + | +4 | fn f(callback: fn() -> Result<()>); + | ^^^^^^^^^^^^^^^^^^ diff --git a/vendor/cxx/tests/ui/function_with_body.rs b/vendor/cxx/tests/ui/function_with_body.rs new file mode 100644 index 000000000..52be79af0 --- /dev/null +++ b/vendor/cxx/tests/ui/function_with_body.rs @@ -0,0 +1,8 @@ +#[cxx::bridge] +mod ffi { + unsafe extern "C++" { + fn f() {} + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/function_with_body.stderr b/vendor/cxx/tests/ui/function_with_body.stderr new file mode 100644 index 000000000..f2078df4d --- /dev/null +++ b/vendor/cxx/tests/ui/function_with_body.stderr @@ -0,0 +1,5 @@ +error: expected `;` + --> tests/ui/function_with_body.rs:4:16 + | +4 | fn f() {} + | ^ diff --git a/vendor/cxx/tests/ui/generic_enum.rs b/vendor/cxx/tests/ui/generic_enum.rs new file mode 100644 index 000000000..feeb94be6 --- /dev/null +++ b/vendor/cxx/tests/ui/generic_enum.rs @@ -0,0 +1,16 @@ +#[cxx::bridge] +mod ffi { + enum A { + Field, + } + + enum B where T: Copy { + Field, + } + + enum C where void: Copy { + Field, + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/generic_enum.stderr b/vendor/cxx/tests/ui/generic_enum.stderr new file mode 100644 index 000000000..2529af733 --- /dev/null +++ b/vendor/cxx/tests/ui/generic_enum.stderr @@ -0,0 +1,17 @@ +error: enum with generic parameters is not supported + --> tests/ui/generic_enum.rs:3:5 + | +3 | enum A { + | ^^^^^^^^^ + +error: enum with generic parameters is not supported + --> tests/ui/generic_enum.rs:7:5 + | +7 | enum B where T: Copy { + | ^^^^^^^^^ + +error: enum with where-clause is not supported + --> tests/ui/generic_enum.rs:11:12 + | +11 | enum C where void: Copy { + | ^^^^^^^^^^^^^^^^ diff --git a/vendor/cxx/tests/ui/impl_trait_for_type.rs b/vendor/cxx/tests/ui/impl_trait_for_type.rs new file mode 100644 index 000000000..9284f738b --- /dev/null +++ b/vendor/cxx/tests/ui/impl_trait_for_type.rs @@ -0,0 +1,10 @@ +#[cxx::bridge] +mod ffi { + struct S { + x: u8, + } + + impl UniquePtrTarget for S {} +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/impl_trait_for_type.stderr b/vendor/cxx/tests/ui/impl_trait_for_type.stderr new file mode 100644 index 000000000..fa99de5a9 --- /dev/null +++ b/vendor/cxx/tests/ui/impl_trait_for_type.stderr @@ -0,0 +1,5 @@ +error: unexpected impl, expected something like `impl UniquePtr {}` + --> tests/ui/impl_trait_for_type.rs:7:10 + | +7 | impl UniquePtrTarget for S {} + | ^^^^^^^^^^^^^^^^^^^^^ diff --git a/vendor/cxx/tests/ui/include.rs b/vendor/cxx/tests/ui/include.rs new file mode 100644 index 000000000..3e848b581 --- /dev/null +++ b/vendor/cxx/tests/ui/include.rs @@ -0,0 +1,12 @@ +#[cxx::bridge] +mod ffi { + extern "C++" { + include!("path/to" what); + include!( what); + include!(); + include!(...); + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/include.stderr b/vendor/cxx/tests/ui/include.stderr new file mode 100644 index 000000000..b801530e1 --- /dev/null +++ b/vendor/cxx/tests/ui/include.stderr @@ -0,0 +1,29 @@ +error: unexpected token + --> tests/ui/include.rs:4:28 + | +4 | include!("path/to" what); + | ^^^^ + +error: unexpected token + --> tests/ui/include.rs:5:28 + | +5 | include!( what); + | ^^^^ + +error: expected `>` + --> tests/ui/include.rs:6:26 + | +6 | include!( tests/ui/include.rs:7:23 + | +7 | include!(); + | ^^^^ + +error: expected "quoted/path/to" or + --> tests/ui/include.rs:8:18 + | +8 | include!(...); + | ^ diff --git a/vendor/cxx/tests/ui/lifetime_extern_cxx.rs b/vendor/cxx/tests/ui/lifetime_extern_cxx.rs new file mode 100644 index 000000000..e85b3392e --- /dev/null +++ b/vendor/cxx/tests/ui/lifetime_extern_cxx.rs @@ -0,0 +1,9 @@ +#[cxx::bridge] +mod ffi { + extern "C++" { + type Opaque; + unsafe fn f<'a>(&'a self, arg: &str) -> &'a str; + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/lifetime_extern_cxx.stderr b/vendor/cxx/tests/ui/lifetime_extern_cxx.stderr new file mode 100644 index 000000000..a5cc3bdaa --- /dev/null +++ b/vendor/cxx/tests/ui/lifetime_extern_cxx.stderr @@ -0,0 +1,5 @@ +error: extern C++ function with lifetimes must be declared in `unsafe extern "C++"` block + --> tests/ui/lifetime_extern_cxx.rs:5:9 + | +5 | unsafe fn f<'a>(&'a self, arg: &str) -> &'a str; + | ^^^^^^^^^^^^^^^ diff --git a/vendor/cxx/tests/ui/lifetime_extern_rust.rs b/vendor/cxx/tests/ui/lifetime_extern_rust.rs new file mode 100644 index 000000000..72c37cba7 --- /dev/null +++ b/vendor/cxx/tests/ui/lifetime_extern_rust.rs @@ -0,0 +1,17 @@ +#[cxx::bridge] +mod ffi { + extern "Rust" { + type Opaque; + fn f<'a>(&'a self, arg: &str) -> &'a str; + } +} + +pub struct Opaque; + +impl Opaque { + fn f(&self, _arg: &str) -> &str { + "" + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/lifetime_extern_rust.stderr b/vendor/cxx/tests/ui/lifetime_extern_rust.stderr new file mode 100644 index 000000000..b2ca4950b --- /dev/null +++ b/vendor/cxx/tests/ui/lifetime_extern_rust.stderr @@ -0,0 +1,5 @@ +error: must be `unsafe fn f` in order to expose explicit lifetimes to C++ + --> tests/ui/lifetime_extern_rust.rs:5:9 + | +5 | fn f<'a>(&'a self, arg: &str) -> &'a str; + | ^^^^^^^^ diff --git a/vendor/cxx/tests/ui/missing_unsafe.rs b/vendor/cxx/tests/ui/missing_unsafe.rs new file mode 100644 index 000000000..d8c0a23a2 --- /dev/null +++ b/vendor/cxx/tests/ui/missing_unsafe.rs @@ -0,0 +1,10 @@ +#[cxx::bridge] +mod ffi { + extern "Rust" { + fn f(x: i32); + } +} + +unsafe fn f(_x: i32) {} + +fn main() {} diff --git a/vendor/cxx/tests/ui/missing_unsafe.stderr b/vendor/cxx/tests/ui/missing_unsafe.stderr new file mode 100644 index 000000000..e7dcba749 --- /dev/null +++ b/vendor/cxx/tests/ui/missing_unsafe.stderr @@ -0,0 +1,9 @@ +error[E0133]: call to unsafe function is unsafe and requires unsafe function or block + --> tests/ui/missing_unsafe.rs:4:12 + | +4 | fn f(x: i32); + | ^ - items do not inherit unsafety from separate enclosing items + | | + | call to unsafe function + | + = note: consult the function's documentation for information on how to avoid undefined behavior diff --git a/vendor/cxx/tests/ui/multiple_parse_error.rs b/vendor/cxx/tests/ui/multiple_parse_error.rs new file mode 100644 index 000000000..138d6d6c2 --- /dev/null +++ b/vendor/cxx/tests/ui/multiple_parse_error.rs @@ -0,0 +1,8 @@ +#[cxx::bridge] +mod ffi { + struct Monad; + + extern "Haskell" {} +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/multiple_parse_error.stderr b/vendor/cxx/tests/ui/multiple_parse_error.stderr new file mode 100644 index 000000000..32b8e5601 --- /dev/null +++ b/vendor/cxx/tests/ui/multiple_parse_error.stderr @@ -0,0 +1,11 @@ +error: unit structs are not supported + --> tests/ui/multiple_parse_error.rs:3:5 + | +3 | struct Monad; + | ^^^^^^^^^^^^^^^^ + +error: unrecognized ABI, requires either "C++" or "Rust" + --> tests/ui/multiple_parse_error.rs:5:5 + | +5 | extern "Haskell" {} + | ^^^^^^^^^^^^^^^^ diff --git a/vendor/cxx/tests/ui/mut_return.rs b/vendor/cxx/tests/ui/mut_return.rs new file mode 100644 index 000000000..f30988b8c --- /dev/null +++ b/vendor/cxx/tests/ui/mut_return.rs @@ -0,0 +1,18 @@ +#[cxx::bridge] +mod ffi { + extern "Rust" { + type Mut<'a>; + } + + unsafe extern "C++" { + type Thing; + + fn f(t: &Thing) -> Pin<&mut CxxString>; + unsafe fn g(t: &Thing) -> Pin<&mut CxxString>; + fn h(t: Box) -> Pin<&mut CxxString>; + fn i<'a>(t: Box>) -> Pin<&'a mut CxxString>; + fn j(t: &Thing) -> &mut [u8]; + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/mut_return.stderr b/vendor/cxx/tests/ui/mut_return.stderr new file mode 100644 index 000000000..37e947a79 --- /dev/null +++ b/vendor/cxx/tests/ui/mut_return.stderr @@ -0,0 +1,11 @@ +error: &mut return type is not allowed unless there is a &mut argument + --> tests/ui/mut_return.rs:10:9 + | +10 | fn f(t: &Thing) -> Pin<&mut CxxString>; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: &mut return type is not allowed unless there is a &mut argument + --> tests/ui/mut_return.rs:14:9 + | +14 | fn j(t: &Thing) -> &mut [u8]; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/vendor/cxx/tests/ui/non_integer_discriminant_enum.rs b/vendor/cxx/tests/ui/non_integer_discriminant_enum.rs new file mode 100644 index 000000000..388b46398 --- /dev/null +++ b/vendor/cxx/tests/ui/non_integer_discriminant_enum.rs @@ -0,0 +1,8 @@ +#[cxx::bridge] +mod ffi { + enum A { + Field = 2020 + 1, + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/non_integer_discriminant_enum.stderr b/vendor/cxx/tests/ui/non_integer_discriminant_enum.stderr new file mode 100644 index 000000000..aa4388fb9 --- /dev/null +++ b/vendor/cxx/tests/ui/non_integer_discriminant_enum.stderr @@ -0,0 +1,5 @@ +error: enums with non-integer literal discriminants are not supported yet + --> tests/ui/non_integer_discriminant_enum.rs:4:9 + | +4 | Field = 2020 + 1, + | ^^^^^^^^^^^^^^^^ diff --git a/vendor/cxx/tests/ui/nonempty_impl_block.rs b/vendor/cxx/tests/ui/nonempty_impl_block.rs new file mode 100644 index 000000000..239d1ece6 --- /dev/null +++ b/vendor/cxx/tests/ui/nonempty_impl_block.rs @@ -0,0 +1,12 @@ +#[cxx::bridge] +mod ffi { + struct S { + x: u8, + } + + impl UniquePtr { + fn new() -> Self; + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/nonempty_impl_block.stderr b/vendor/cxx/tests/ui/nonempty_impl_block.stderr new file mode 100644 index 000000000..6f6983053 --- /dev/null +++ b/vendor/cxx/tests/ui/nonempty_impl_block.stderr @@ -0,0 +1,8 @@ +error: expected an empty impl block + --> tests/ui/nonempty_impl_block.rs:7:23 + | +7 | impl UniquePtr { + | _______________________^ +8 | | fn new() -> Self; +9 | | } + | |_____^ diff --git a/vendor/cxx/tests/ui/nonlocal_rust_type.rs b/vendor/cxx/tests/ui/nonlocal_rust_type.rs new file mode 100644 index 000000000..d8a238aee --- /dev/null +++ b/vendor/cxx/tests/ui/nonlocal_rust_type.rs @@ -0,0 +1,18 @@ +pub struct MyBuilder<'a> { + _s: &'a str, +} + +type OptBuilder<'a> = Option>; + +#[cxx::bridge] +mod ffi { + extern "Rust" { + type OptBuilder<'a>; + } + + struct MyBuilder<'a> { + rs: Box>, + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/nonlocal_rust_type.stderr b/vendor/cxx/tests/ui/nonlocal_rust_type.stderr new file mode 100644 index 000000000..f6cb06cb6 --- /dev/null +++ b/vendor/cxx/tests/ui/nonlocal_rust_type.stderr @@ -0,0 +1,21 @@ +error[E0117]: only traits defined in the current crate can be implemented for types defined outside of the crate + --> tests/ui/nonlocal_rust_type.rs:10:9 + | +10 | type OptBuilder<'a>; + | ^^^^^-------------- + | | | + | | `Option` is not defined in the current crate + | impl doesn't use only types from inside the current crate + | + = note: define and implement a trait or new type instead + +error[E0117]: only traits defined in the current crate can be implemented for types defined outside of the crate + --> tests/ui/nonlocal_rust_type.rs:14:13 + | +14 | rs: Box>, + | ^^^^-------------- + | | | + | | `Option` is not defined in the current crate + | impl doesn't use only types from inside the current crate + | + = note: define and implement a trait or new type instead diff --git a/vendor/cxx/tests/ui/opaque_autotraits.rs b/vendor/cxx/tests/ui/opaque_autotraits.rs new file mode 100644 index 000000000..99406d74e --- /dev/null +++ b/vendor/cxx/tests/ui/opaque_autotraits.rs @@ -0,0 +1,16 @@ +#[cxx::bridge] +mod ffi { + extern "C++" { + type Opaque; + } +} + +fn assert_send() {} +fn assert_sync() {} +fn assert_unpin() {} + +fn main() { + assert_send::(); + assert_sync::(); + assert_unpin::(); +} diff --git a/vendor/cxx/tests/ui/opaque_autotraits.stderr b/vendor/cxx/tests/ui/opaque_autotraits.stderr new file mode 100644 index 000000000..c6447c558 --- /dev/null +++ b/vendor/cxx/tests/ui/opaque_autotraits.stderr @@ -0,0 +1,59 @@ +error[E0277]: `*const cxx::void` cannot be sent between threads safely + --> tests/ui/opaque_autotraits.rs:13:19 + | +13 | assert_send::(); + | ^^^^^^^^^^^ `*const cxx::void` cannot be sent between threads safely + | + = help: within `ffi::Opaque`, the trait `Send` is not implemented for `*const cxx::void` + = note: required because it appears within the type `[*const void; 0]` + = note: required because it appears within the type `Opaque` +note: required because it appears within the type `Opaque` + --> tests/ui/opaque_autotraits.rs:4:14 + | +4 | type Opaque; + | ^^^^^^ +note: required by a bound in `assert_send` + --> tests/ui/opaque_autotraits.rs:8:19 + | +8 | fn assert_send() {} + | ^^^^ required by this bound in `assert_send` + +error[E0277]: `*const cxx::void` cannot be shared between threads safely + --> tests/ui/opaque_autotraits.rs:14:19 + | +14 | assert_sync::(); + | ^^^^^^^^^^^ `*const cxx::void` cannot be shared between threads safely + | + = help: within `ffi::Opaque`, the trait `Sync` is not implemented for `*const cxx::void` + = note: required because it appears within the type `[*const void; 0]` + = note: required because it appears within the type `Opaque` +note: required because it appears within the type `Opaque` + --> tests/ui/opaque_autotraits.rs:4:14 + | +4 | type Opaque; + | ^^^^^^ +note: required by a bound in `assert_sync` + --> tests/ui/opaque_autotraits.rs:9:19 + | +9 | fn assert_sync() {} + | ^^^^ required by this bound in `assert_sync` + +error[E0277]: `PhantomPinned` cannot be unpinned + --> tests/ui/opaque_autotraits.rs:15:20 + | +15 | assert_unpin::(); + | ^^^^^^^^^^^ within `ffi::Opaque`, the trait `Unpin` is not implemented for `PhantomPinned` + | + = note: consider using `Box::pin` + = note: required because it appears within the type `PhantomData` + = note: required because it appears within the type `Opaque` +note: required because it appears within the type `Opaque` + --> tests/ui/opaque_autotraits.rs:4:14 + | +4 | type Opaque; + | ^^^^^^ +note: required by a bound in `assert_unpin` + --> tests/ui/opaque_autotraits.rs:10:20 + | +10 | fn assert_unpin() {} + | ^^^^^ required by this bound in `assert_unpin` diff --git a/vendor/cxx/tests/ui/opaque_not_sized.rs b/vendor/cxx/tests/ui/opaque_not_sized.rs new file mode 100644 index 000000000..754e8d36c --- /dev/null +++ b/vendor/cxx/tests/ui/opaque_not_sized.rs @@ -0,0 +1,10 @@ +#[cxx::bridge] +mod ffi { + extern "Rust" { + type TypeR; + } +} + +struct TypeR(str); + +fn main() {} diff --git a/vendor/cxx/tests/ui/opaque_not_sized.stderr b/vendor/cxx/tests/ui/opaque_not_sized.stderr new file mode 100644 index 000000000..85be4af3b --- /dev/null +++ b/vendor/cxx/tests/ui/opaque_not_sized.stderr @@ -0,0 +1,17 @@ +error[E0277]: the size for values of type `str` cannot be known at compilation time + --> tests/ui/opaque_not_sized.rs:4:14 + | +4 | type TypeR; + | ^^^^^ doesn't have a size known at compile-time + | + = help: within `TypeR`, the trait `Sized` is not implemented for `str` +note: required because it appears within the type `TypeR` + --> tests/ui/opaque_not_sized.rs:8:8 + | +8 | struct TypeR(str); + | ^^^^^ +note: required by a bound in `__AssertSized` + --> tests/ui/opaque_not_sized.rs:4:9 + | +4 | type TypeR; + | ^^^^^^^^^^^ required by this bound in `__AssertSized` diff --git a/vendor/cxx/tests/ui/pin_mut_opaque.rs b/vendor/cxx/tests/ui/pin_mut_opaque.rs new file mode 100644 index 000000000..ac1ca43af --- /dev/null +++ b/vendor/cxx/tests/ui/pin_mut_opaque.rs @@ -0,0 +1,14 @@ +#[cxx::bridge] +mod ffi { + unsafe extern "C++" { + type Opaque; + fn f(arg: &mut Opaque); + fn g(&mut self); + fn h(self: &mut Opaque); + fn s(s: &mut CxxString); + fn v(v: &mut CxxVector); + } + +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/pin_mut_opaque.stderr b/vendor/cxx/tests/ui/pin_mut_opaque.stderr new file mode 100644 index 000000000..8a5e019b3 --- /dev/null +++ b/vendor/cxx/tests/ui/pin_mut_opaque.stderr @@ -0,0 +1,35 @@ +error: mutable reference to C++ type requires a pin -- use Pin<&mut Opaque> + --> tests/ui/pin_mut_opaque.rs:5:19 + | +5 | fn f(arg: &mut Opaque); + | ^^^^^^^^^^^ + +error: mutable reference to C++ type requires a pin -- use Pin<&mut CxxString> + --> tests/ui/pin_mut_opaque.rs:8:17 + | +8 | fn s(s: &mut CxxString); + | ^^^^^^^^^^^^^^ + +error: mutable reference to C++ type requires a pin -- use Pin<&mut CxxVector<...>> + --> tests/ui/pin_mut_opaque.rs:9:17 + | +9 | fn v(v: &mut CxxVector); + | ^^^^^^^^^^^^^^^^^^ + +error: needs a cxx::ExternType impl in order to be used as a non-pinned mutable reference in signature of `f`, `g`, `h` + --> tests/ui/pin_mut_opaque.rs:4:9 + | +4 | type Opaque; + | ^^^^^^^^^^^ + +error: mutable reference to opaque C++ type requires a pin -- use `self: Pin<&mut Opaque>` + --> tests/ui/pin_mut_opaque.rs:6:14 + | +6 | fn g(&mut self); + | ^^^^^^^^^ + +error: mutable reference to opaque C++ type requires a pin -- use `self: Pin<&mut Opaque>` + --> tests/ui/pin_mut_opaque.rs:7:20 + | +7 | fn h(self: &mut Opaque); + | ^^^^^^^^^^^ diff --git a/vendor/cxx/tests/ui/ptr_in_fnptr.rs b/vendor/cxx/tests/ui/ptr_in_fnptr.rs new file mode 100644 index 000000000..73c97c666 --- /dev/null +++ b/vendor/cxx/tests/ui/ptr_in_fnptr.rs @@ -0,0 +1,8 @@ +#[cxx::bridge] +mod ffi { + unsafe extern "C++" { + fn f(callback: fn(p: *const u8)); + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/ptr_in_fnptr.stderr b/vendor/cxx/tests/ui/ptr_in_fnptr.stderr new file mode 100644 index 000000000..f429b1bd3 --- /dev/null +++ b/vendor/cxx/tests/ui/ptr_in_fnptr.stderr @@ -0,0 +1,5 @@ +error: pointer argument requires that the function pointer be marked unsafe + --> tests/ui/ptr_in_fnptr.rs:4:27 + | +4 | fn f(callback: fn(p: *const u8)); + | ^^^^^^^^^^^^ diff --git a/vendor/cxx/tests/ui/ptr_missing_unsafe.rs b/vendor/cxx/tests/ui/ptr_missing_unsafe.rs new file mode 100644 index 000000000..56f0007cb --- /dev/null +++ b/vendor/cxx/tests/ui/ptr_missing_unsafe.rs @@ -0,0 +1,10 @@ +#[cxx::bridge] +mod ffi { + unsafe extern "C++" { + type C; + + fn not_unsafe_ptr(c: *mut C); + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/ptr_missing_unsafe.stderr b/vendor/cxx/tests/ui/ptr_missing_unsafe.stderr new file mode 100644 index 000000000..d65481bce --- /dev/null +++ b/vendor/cxx/tests/ui/ptr_missing_unsafe.stderr @@ -0,0 +1,5 @@ +error: pointer argument requires that the function be marked unsafe + --> tests/ui/ptr_missing_unsafe.rs:6:27 + | +6 | fn not_unsafe_ptr(c: *mut C); + | ^^^^^^^^^ diff --git a/vendor/cxx/tests/ui/ptr_no_const_mut.rs b/vendor/cxx/tests/ui/ptr_no_const_mut.rs new file mode 100644 index 000000000..eecec3fb4 --- /dev/null +++ b/vendor/cxx/tests/ui/ptr_no_const_mut.rs @@ -0,0 +1,10 @@ +#[cxx::bridge] +mod ffi { + unsafe extern "C++" { + type C; + + fn get_neither_const_nor_mut() -> *C; + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/ptr_no_const_mut.stderr b/vendor/cxx/tests/ui/ptr_no_const_mut.stderr new file mode 100644 index 000000000..4b1bf06fd --- /dev/null +++ b/vendor/cxx/tests/ui/ptr_no_const_mut.stderr @@ -0,0 +1,18 @@ +error: expected `mut` or `const` keyword in raw pointer type + --> tests/ui/ptr_no_const_mut.rs:6:43 + | +6 | fn get_neither_const_nor_mut() -> *C; + | ^ + | +help: add `mut` or `const` here + | +6 | fn get_neither_const_nor_mut() -> *const C; + | +++++ +6 | fn get_neither_const_nor_mut() -> *mut C; + | +++ + +error: expected `const` or `mut` + --> tests/ui/ptr_no_const_mut.rs:6:44 + | +6 | fn get_neither_const_nor_mut() -> *C; + | ^ diff --git a/vendor/cxx/tests/ui/ptr_unsupported.rs b/vendor/cxx/tests/ui/ptr_unsupported.rs new file mode 100644 index 000000000..9d59c0330 --- /dev/null +++ b/vendor/cxx/tests/ui/ptr_unsupported.rs @@ -0,0 +1,12 @@ +#[cxx::bridge] +mod ffi { + unsafe extern "C++" { + type C; + + fn get_ptr_to_reference() -> *mut &C; + fn get_uniqueptr_to_ptr() -> UniquePtr<*mut C>; + fn get_vector_of_ptr() -> UniquePtr>; + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/ptr_unsupported.stderr b/vendor/cxx/tests/ui/ptr_unsupported.stderr new file mode 100644 index 000000000..ea1dafd86 --- /dev/null +++ b/vendor/cxx/tests/ui/ptr_unsupported.stderr @@ -0,0 +1,17 @@ +error: C++ does not allow pointer to reference as a type + --> tests/ui/ptr_unsupported.rs:6:38 + | +6 | fn get_ptr_to_reference() -> *mut &C; + | ^^^^^^^ + +error: unsupported unique_ptr target type + --> tests/ui/ptr_unsupported.rs:7:38 + | +7 | fn get_uniqueptr_to_ptr() -> UniquePtr<*mut C>; + | ^^^^^^^^^^^^^^^^^ + +error: unsupported vector element type + --> tests/ui/ptr_unsupported.rs:8:45 + | +8 | fn get_vector_of_ptr() -> UniquePtr>; + | ^^^^^^^^^^^^^^^^^ diff --git a/vendor/cxx/tests/ui/raw_ident_namespace.rs b/vendor/cxx/tests/ui/raw_ident_namespace.rs new file mode 100644 index 000000000..2c8286c70 --- /dev/null +++ b/vendor/cxx/tests/ui/raw_ident_namespace.rs @@ -0,0 +1,53 @@ +use cxx::{type_id, ExternType}; + +#[repr(transparent)] +pub struct QuotedRaw(usize); + +unsafe impl ExternType for QuotedRaw { + type Id = type_id!("org::r#box::implementation::QuotedRaw"); + type Kind = cxx::kind::Trivial; +} + +#[repr(transparent)] +pub struct QuotedKeyword(usize); + +unsafe impl ExternType for QuotedKeyword { + type Id = type_id!("org::box::implementation::QuotedKeyword"); + type Kind = cxx::kind::Trivial; +} + +#[repr(transparent)] +pub struct UnquotedRaw(usize); + +unsafe impl ExternType for UnquotedRaw { + type Id = type_id!(org::r#box::implementation::UnquotedRaw); + type Kind = cxx::kind::Trivial; +} + +#[repr(transparent)] +pub struct UnquotedKeyword(usize); + +unsafe impl ExternType for UnquotedKeyword { + type Id = type_id!(org::box::implementation::UnquotedKeyword); + type Kind = cxx::kind::Trivial; +} + +#[cxx::bridge] +pub mod ffi { + extern "C++" { + #[namespace = "org::r#box::implementation"] + type QuotedRaw = crate::QuotedRaw; + + #[namespace = "org::box::implementation"] + type QuotedKeyword = crate::QuotedKeyword; + + #[namespace = org::r#box::implementation] + type UnquotedRaw = crate::UnquotedRaw; + + // Not allowed by rustc (independent of cxx): + // #[namespace = org::box::implementation] + // type UnquotedKeyword = crate::UnquotedKeyword; + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/raw_ident_namespace.stderr b/vendor/cxx/tests/ui/raw_ident_namespace.stderr new file mode 100644 index 000000000..86c8b6fd6 --- /dev/null +++ b/vendor/cxx/tests/ui/raw_ident_namespace.stderr @@ -0,0 +1,11 @@ +error: raw identifier `r#box` is not allowed in a quoted namespace; use `box`, or remove quotes + --> tests/ui/raw_ident_namespace.rs:7:24 + | +7 | type Id = type_id!("org::r#box::implementation::QuotedRaw"); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: raw identifier `r#box` is not allowed in a quoted namespace; use `box`, or remove quotes + --> tests/ui/raw_ident_namespace.rs:38:23 + | +38 | #[namespace = "org::r#box::implementation"] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/vendor/cxx/tests/ui/reference_to_reference.rs b/vendor/cxx/tests/ui/reference_to_reference.rs new file mode 100644 index 000000000..91fe16003 --- /dev/null +++ b/vendor/cxx/tests/ui/reference_to_reference.rs @@ -0,0 +1,13 @@ +#[cxx::bridge] +mod ffi { + unsafe extern "C++" { + type ThingC; + fn repro_c(t: &&ThingC); + } + extern "Rust" { + type ThingR; + fn repro_r(t: &&ThingR); + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/reference_to_reference.stderr b/vendor/cxx/tests/ui/reference_to_reference.stderr new file mode 100644 index 000000000..765e44271 --- /dev/null +++ b/vendor/cxx/tests/ui/reference_to_reference.stderr @@ -0,0 +1,11 @@ +error: C++ does not allow references to references + --> tests/ui/reference_to_reference.rs:5:23 + | +5 | fn repro_c(t: &&ThingC); + | ^^^^^^^^ + +error: C++ does not allow references to references + --> tests/ui/reference_to_reference.rs:9:23 + | +9 | fn repro_r(t: &&ThingR); + | ^^^^^^^^ diff --git a/vendor/cxx/tests/ui/reserved_lifetime.rs b/vendor/cxx/tests/ui/reserved_lifetime.rs new file mode 100644 index 000000000..179a4db54 --- /dev/null +++ b/vendor/cxx/tests/ui/reserved_lifetime.rs @@ -0,0 +1,10 @@ +#[cxx::bridge] +mod ffi { + unsafe extern "C++" { + type Logger; + + fn logger<'static>() -> Pin<&'static Logger>; + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/reserved_lifetime.stderr b/vendor/cxx/tests/ui/reserved_lifetime.stderr new file mode 100644 index 000000000..e95826719 --- /dev/null +++ b/vendor/cxx/tests/ui/reserved_lifetime.stderr @@ -0,0 +1,5 @@ +error[E0262]: invalid lifetime parameter name: `'static` + --> tests/ui/reserved_lifetime.rs:6:19 + | +6 | fn logger<'static>() -> Pin<&'static Logger>; + | ^^^^^^^ 'static is a reserved lifetime name diff --git a/vendor/cxx/tests/ui/reserved_name.rs b/vendor/cxx/tests/ui/reserved_name.rs new file mode 100644 index 000000000..409e67c0c --- /dev/null +++ b/vendor/cxx/tests/ui/reserved_name.rs @@ -0,0 +1,16 @@ +#[cxx::bridge] +mod ffi { + struct UniquePtr { + val: usize, + } + + extern "C++" { + type Box; + } + + extern "Rust" { + type String; + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/reserved_name.stderr b/vendor/cxx/tests/ui/reserved_name.stderr new file mode 100644 index 000000000..7636f872b --- /dev/null +++ b/vendor/cxx/tests/ui/reserved_name.stderr @@ -0,0 +1,17 @@ +error: reserved name + --> tests/ui/reserved_name.rs:3:12 + | +3 | struct UniquePtr { + | ^^^^^^^^^ + +error: reserved name + --> tests/ui/reserved_name.rs:8:14 + | +8 | type Box; + | ^^^ + +error: reserved name + --> tests/ui/reserved_name.rs:12:14 + | +12 | type String; + | ^^^^^^ diff --git a/vendor/cxx/tests/ui/result_no_display.rs b/vendor/cxx/tests/ui/result_no_display.rs new file mode 100644 index 000000000..b53567751 --- /dev/null +++ b/vendor/cxx/tests/ui/result_no_display.rs @@ -0,0 +1,14 @@ +#[cxx::bridge] +mod ffi { + extern "Rust" { + fn f() -> Result<()>; + } +} + +pub struct NonError; + +fn f() -> Result<(), NonError> { + Ok(()) +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/result_no_display.stderr b/vendor/cxx/tests/ui/result_no_display.stderr new file mode 100644 index 000000000..44d4b31da --- /dev/null +++ b/vendor/cxx/tests/ui/result_no_display.stderr @@ -0,0 +1,8 @@ +error[E0277]: `NonError` doesn't implement `std::fmt::Display` + --> tests/ui/result_no_display.rs:4:19 + | +4 | fn f() -> Result<()>; + | ^^^^^^^^^^ `NonError` cannot be formatted with the default formatter + | + = help: the trait `std::fmt::Display` is not implemented for `NonError` + = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead diff --git a/vendor/cxx/tests/ui/root_namespace.rs b/vendor/cxx/tests/ui/root_namespace.rs new file mode 100644 index 000000000..886fbd946 --- /dev/null +++ b/vendor/cxx/tests/ui/root_namespace.rs @@ -0,0 +1,13 @@ +#[cxx::bridge] +mod ffi { + #[namespace = "::"] + extern "Rust" {} + + #[namespace = ""] + extern "Rust" {} + + #[namespace = ] + extern "Rust" {} +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/root_namespace.stderr b/vendor/cxx/tests/ui/root_namespace.stderr new file mode 100644 index 000000000..b834d91a0 --- /dev/null +++ b/vendor/cxx/tests/ui/root_namespace.stderr @@ -0,0 +1,5 @@ +error: expected expression, found `]` + --> tests/ui/root_namespace.rs:9:19 + | +9 | #[namespace = ] + | ^ expected expression diff --git a/vendor/cxx/tests/ui/rust_pinned.rs b/vendor/cxx/tests/ui/rust_pinned.rs new file mode 100644 index 000000000..34ca7e331 --- /dev/null +++ b/vendor/cxx/tests/ui/rust_pinned.rs @@ -0,0 +1,14 @@ +use std::marker::PhantomPinned; + +#[cxx::bridge] +mod ffi { + extern "Rust" { + type Pinned; + } +} + +pub struct Pinned { + _pinned: PhantomPinned, +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/rust_pinned.stderr b/vendor/cxx/tests/ui/rust_pinned.stderr new file mode 100644 index 000000000..a0fc03382 --- /dev/null +++ b/vendor/cxx/tests/ui/rust_pinned.stderr @@ -0,0 +1,17 @@ +error[E0277]: `PhantomPinned` cannot be unpinned + --> tests/ui/rust_pinned.rs:6:14 + | +6 | type Pinned; + | ^^^^^^ within `Pinned`, the trait `Unpin` is not implemented for `PhantomPinned` + | + = note: consider using `Box::pin` +note: required because it appears within the type `Pinned` + --> tests/ui/rust_pinned.rs:10:12 + | +10 | pub struct Pinned { + | ^^^^^^ +note: required by a bound in `__AssertUnpin` + --> tests/ui/rust_pinned.rs:6:9 + | +6 | type Pinned; + | ^^^^^^^^^^^^ required by this bound in `__AssertUnpin` diff --git a/vendor/cxx/tests/ui/slice_of_type_alias.rs b/vendor/cxx/tests/ui/slice_of_type_alias.rs new file mode 100644 index 000000000..a7bbc1147 --- /dev/null +++ b/vendor/cxx/tests/ui/slice_of_type_alias.rs @@ -0,0 +1,30 @@ +use cxx::{type_id, ExternType}; + +#[repr(C)] +struct ElementTrivial(usize); + +#[repr(C)] +struct ElementOpaque(usize); + +#[cxx::bridge] +mod ffi { + unsafe extern "C++" { + type ElementTrivial = crate::ElementTrivial; + type ElementOpaque = crate::ElementOpaque; + + fn f(slice: &mut [ElementTrivial]); + fn g(slice: &[ElementOpaque]); + } +} + +unsafe impl ExternType for ElementTrivial { + type Id = type_id!("ElementTrivial"); + type Kind = cxx::kind::Trivial; +} + +unsafe impl ExternType for ElementOpaque { + type Id = type_id!("ElementOpaque"); + type Kind = cxx::kind::Opaque; +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/slice_of_type_alias.stderr b/vendor/cxx/tests/ui/slice_of_type_alias.stderr new file mode 100644 index 000000000..9339da37a --- /dev/null +++ b/vendor/cxx/tests/ui/slice_of_type_alias.stderr @@ -0,0 +1,16 @@ +error[E0271]: type mismatch resolving `::Kind == Trivial` + --> tests/ui/slice_of_type_alias.rs:13:14 + | +13 | type ElementOpaque = crate::ElementOpaque; + | ^^^^^^^^^^^^^ type mismatch resolving `::Kind == Trivial` + | +note: expected this to be `Trivial` + --> tests/ui/slice_of_type_alias.rs:27:17 + | +27 | type Kind = cxx::kind::Opaque; + | ^^^^^^^^^^^^^^^^^ +note: required by a bound in `verify_extern_kind` + --> src/extern_type.rs + | + | pub fn verify_extern_kind, Kind: self::Kind>() {} + | ^^^^^^^^^^^ required by this bound in `verify_extern_kind` diff --git a/vendor/cxx/tests/ui/slice_unsupported.rs b/vendor/cxx/tests/ui/slice_unsupported.rs new file mode 100644 index 000000000..7a148dd7e --- /dev/null +++ b/vendor/cxx/tests/ui/slice_unsupported.rs @@ -0,0 +1,10 @@ +#[cxx::bridge] +mod ffi { + unsafe extern "C++" { + type Opaque; + + fn f(_: &mut [Opaque]); + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/slice_unsupported.stderr b/vendor/cxx/tests/ui/slice_unsupported.stderr new file mode 100644 index 000000000..b781bfd46 --- /dev/null +++ b/vendor/cxx/tests/ui/slice_unsupported.stderr @@ -0,0 +1,11 @@ +error: unsupported &mut [T] element type: opaque C++ type is not supported yet + --> tests/ui/slice_unsupported.rs:6:17 + | +6 | fn f(_: &mut [Opaque]); + | ^^^^^^^^^^^^^ + +error: needs a cxx::ExternType impl in order to be used as a slice element in &mut [Opaque] + --> tests/ui/slice_unsupported.rs:4:9 + | +4 | type Opaque; + | ^^^^^^^^^^^ diff --git a/vendor/cxx/tests/ui/struct_cycle.rs b/vendor/cxx/tests/ui/struct_cycle.rs new file mode 100644 index 000000000..e74c2b1ca --- /dev/null +++ b/vendor/cxx/tests/ui/struct_cycle.rs @@ -0,0 +1,34 @@ +#[cxx::bridge] +mod ffi { + struct Node0 { + i: i32, + } + + struct Node1 { + node2: Node2, + vec: Vec, + } + + struct Node2 { + node4: Node4, + } + + struct Node3 { + node1: Node1, + } + + struct Node4 { + node0: Node0, + node5: Node5, + } + + struct Node5 { + node2: Node2, + } + + struct Node6 { + node2: Node2, + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/struct_cycle.stderr b/vendor/cxx/tests/ui/struct_cycle.stderr new file mode 100644 index 000000000..9ee2d8316 --- /dev/null +++ b/vendor/cxx/tests/ui/struct_cycle.stderr @@ -0,0 +1,23 @@ +error: unsupported cyclic data structure + --> tests/ui/struct_cycle.rs:26:9 + | +26 | node2: Node2, + | ^^^^^^^^^^^^ + +error: unsupported cyclic data structure + --> tests/ui/struct_cycle.rs:22:9 + | +22 | node5: Node5, + | ^^^^^^^^^^^^ + +error: unsupported cyclic data structure + --> tests/ui/struct_cycle.rs:13:9 + | +13 | node4: Node4, + | ^^^^^^^^^^^^ + +error: unsupported cyclic data structure + --> tests/ui/struct_cycle.rs:8:9 + | +8 | node2: Node2, + | ^^^^^^^^^^^^ diff --git a/vendor/cxx/tests/ui/type_alias_rust.rs b/vendor/cxx/tests/ui/type_alias_rust.rs new file mode 100644 index 000000000..67df48926 --- /dev/null +++ b/vendor/cxx/tests/ui/type_alias_rust.rs @@ -0,0 +1,9 @@ +#[cxx::bridge] +mod ffi { + extern "Rust" { + /// Incorrect. + type Alias = crate::Type; + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/type_alias_rust.stderr b/vendor/cxx/tests/ui/type_alias_rust.stderr new file mode 100644 index 000000000..8cf9a56fb --- /dev/null +++ b/vendor/cxx/tests/ui/type_alias_rust.stderr @@ -0,0 +1,5 @@ +error: type alias in extern "Rust" block is not supported + --> tests/ui/type_alias_rust.rs:5:9 + | +5 | type Alias = crate::Type; + | ^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/vendor/cxx/tests/ui/unique_ptr_as_mut.rs b/vendor/cxx/tests/ui/unique_ptr_as_mut.rs new file mode 100644 index 000000000..d2c758a9f --- /dev/null +++ b/vendor/cxx/tests/ui/unique_ptr_as_mut.rs @@ -0,0 +1,23 @@ +use cxx::UniquePtr; + +#[cxx::bridge] +mod ffi { + struct Shared { + x: i32, + } + + extern "C++" { + type Opaque; + } + + impl UniquePtr {} + impl UniquePtr {} +} + +fn main() { + let mut shared = UniquePtr::::null(); + let _: &mut ffi::Shared = &mut shared; + + let mut opaque = UniquePtr::::null(); + let _: &mut ffi::Opaque = &mut opaque; +} diff --git a/vendor/cxx/tests/ui/unique_ptr_as_mut.stderr b/vendor/cxx/tests/ui/unique_ptr_as_mut.stderr new file mode 100644 index 000000000..a8248dbe6 --- /dev/null +++ b/vendor/cxx/tests/ui/unique_ptr_as_mut.stderr @@ -0,0 +1,7 @@ +error[E0596]: cannot borrow data in dereference of `UniquePtr` as mutable + --> tests/ui/unique_ptr_as_mut.rs:22:31 + | +22 | let _: &mut ffi::Opaque = &mut opaque; + | ^^^^^^^^^^^ cannot borrow as mutable + | + = help: trait `DerefMut` is required to modify through a dereference, but it is not implemented for `UniquePtr` diff --git a/vendor/cxx/tests/ui/unique_ptr_to_opaque.rs b/vendor/cxx/tests/ui/unique_ptr_to_opaque.rs new file mode 100644 index 000000000..5226ca81b --- /dev/null +++ b/vendor/cxx/tests/ui/unique_ptr_to_opaque.rs @@ -0,0 +1,23 @@ +mod outside { + #[repr(C)] + pub struct C { + pub a: u8, + } + unsafe impl cxx::ExternType for C { + type Id = cxx::type_id!("C"); + type Kind = cxx::kind::Opaque; + } +} + +#[cxx::bridge] +mod ffi { + extern "C++" { + type C = crate::outside::C; + } + + impl UniquePtr {} +} + +fn main() { + cxx::UniquePtr::new(outside::C { a: 4 }); +} diff --git a/vendor/cxx/tests/ui/unique_ptr_to_opaque.stderr b/vendor/cxx/tests/ui/unique_ptr_to_opaque.stderr new file mode 100644 index 000000000..3c121e54c --- /dev/null +++ b/vendor/cxx/tests/ui/unique_ptr_to_opaque.stderr @@ -0,0 +1,18 @@ +error[E0271]: type mismatch resolving `::Kind == Trivial` + --> tests/ui/unique_ptr_to_opaque.rs:22:25 + | +22 | cxx::UniquePtr::new(outside::C { a: 4 }); + | ------------------- ^^^^^^^^^^^^^^^^^^^ type mismatch resolving `::Kind == Trivial` + | | + | required by a bound introduced by this call + | +note: expected this to be `Trivial` + --> tests/ui/unique_ptr_to_opaque.rs:8:21 + | +8 | type Kind = cxx::kind::Opaque; + | ^^^^^^^^^^^^^^^^^ +note: required by a bound in `UniquePtr::::new` + --> src/unique_ptr.rs + | + | T: ExternType, + | ^^^^^^^^^^^^^^ required by this bound in `UniquePtr::::new` diff --git a/vendor/cxx/tests/ui/unique_ptr_twice.rs b/vendor/cxx/tests/ui/unique_ptr_twice.rs new file mode 100644 index 000000000..14c6f62a4 --- /dev/null +++ b/vendor/cxx/tests/ui/unique_ptr_twice.rs @@ -0,0 +1,19 @@ +#[cxx::bridge] +mod here { + extern "C++" { + type C; + } + + impl UniquePtr {} +} + +#[cxx::bridge] +mod there { + extern "C++" { + type C = crate::here::C; + } + + impl UniquePtr {} +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/unique_ptr_twice.stderr b/vendor/cxx/tests/ui/unique_ptr_twice.stderr new file mode 100644 index 000000000..b21791fbe --- /dev/null +++ b/vendor/cxx/tests/ui/unique_ptr_twice.stderr @@ -0,0 +1,8 @@ +error[E0119]: conflicting implementations of trait `UniquePtrTarget` for type `here::C` + --> tests/ui/unique_ptr_twice.rs:16:5 + | +7 | impl UniquePtr {} + | ---------------- first implementation here +... +16 | impl UniquePtr {} + | ^^^^^^^^^^^^^^^^ conflicting implementation for `here::C` diff --git a/vendor/cxx/tests/ui/unnamed_receiver.rs b/vendor/cxx/tests/ui/unnamed_receiver.rs new file mode 100644 index 000000000..5f53a0a5f --- /dev/null +++ b/vendor/cxx/tests/ui/unnamed_receiver.rs @@ -0,0 +1,14 @@ +#[cxx::bridge] +mod ffi { + unsafe extern "C++" { + type One; + type Two; + fn f(&mut self); + } + + extern "Rust" { + fn f(self: &Self); + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/unnamed_receiver.stderr b/vendor/cxx/tests/ui/unnamed_receiver.stderr new file mode 100644 index 000000000..d903b2311 --- /dev/null +++ b/vendor/cxx/tests/ui/unnamed_receiver.stderr @@ -0,0 +1,11 @@ +error: unnamed receiver type is only allowed if the surrounding extern block contains exactly one extern type; use `self: &mut TheType` + --> tests/ui/unnamed_receiver.rs:6:14 + | +6 | fn f(&mut self); + | ^^^^^^^^^ + +error: unnamed receiver type is only allowed if the surrounding extern block contains exactly one extern type; use `self: &TheType` + --> tests/ui/unnamed_receiver.rs:10:20 + | +10 | fn f(self: &Self); + | ^^^^^ diff --git a/vendor/cxx/tests/ui/unpin_impl.rs b/vendor/cxx/tests/ui/unpin_impl.rs new file mode 100644 index 000000000..129fcb11d --- /dev/null +++ b/vendor/cxx/tests/ui/unpin_impl.rs @@ -0,0 +1,10 @@ +#[cxx::bridge] +mod ffi { + extern "C++" { + type Opaque; + } +} + +impl Unpin for ffi::Opaque {} + +fn main() {} diff --git a/vendor/cxx/tests/ui/unpin_impl.stderr b/vendor/cxx/tests/ui/unpin_impl.stderr new file mode 100644 index 000000000..afe5a8066 --- /dev/null +++ b/vendor/cxx/tests/ui/unpin_impl.stderr @@ -0,0 +1,18 @@ +error[E0282]: type annotations needed + --> tests/ui/unpin_impl.rs:4:14 + | +4 | type Opaque; + | ^^^^^^ cannot infer type + +error[E0283]: type annotations needed + --> tests/ui/unpin_impl.rs:1:1 + | +1 | #[cxx::bridge] + | ^^^^^^^^^^^^^^ cannot infer type + | +note: multiple `impl`s satisfying `ffi::Opaque: __AmbiguousIfImpl<_>` found + --> tests/ui/unpin_impl.rs:1:1 + | +1 | #[cxx::bridge] + | ^^^^^^^^^^^^^^ + = note: this error originates in the attribute macro `cxx::bridge` (in Nightly builds, run with -Z macro-backtrace for more info) diff --git a/vendor/cxx/tests/ui/unrecognized_receiver.rs b/vendor/cxx/tests/ui/unrecognized_receiver.rs new file mode 100644 index 000000000..eee825932 --- /dev/null +++ b/vendor/cxx/tests/ui/unrecognized_receiver.rs @@ -0,0 +1,8 @@ +#[cxx::bridge] +mod ffi { + unsafe extern "C++" { + fn f(self: &Unrecognized); + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/unrecognized_receiver.stderr b/vendor/cxx/tests/ui/unrecognized_receiver.stderr new file mode 100644 index 000000000..bc645fec2 --- /dev/null +++ b/vendor/cxx/tests/ui/unrecognized_receiver.stderr @@ -0,0 +1,5 @@ +error: unrecognized receiver type + --> tests/ui/unrecognized_receiver.rs:4:20 + | +4 | fn f(self: &Unrecognized); + | ^^^^^^^^^^^^^ diff --git a/vendor/cxx/tests/ui/unsupported_elided.rs b/vendor/cxx/tests/ui/unsupported_elided.rs new file mode 100644 index 000000000..403331968 --- /dev/null +++ b/vendor/cxx/tests/ui/unsupported_elided.rs @@ -0,0 +1,20 @@ +use std::marker::PhantomData; + +#[cxx::bridge] +mod ffi { + extern "Rust" { + type T; + + fn f(t: &T) -> &str; + } +} + +pub struct T<'a> { + _lifetime: PhantomData<&'a ()>, +} + +fn f<'a>(_t: &T<'a>) -> &'a str { + "" +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/unsupported_elided.stderr b/vendor/cxx/tests/ui/unsupported_elided.stderr new file mode 100644 index 000000000..4ccac6fb7 --- /dev/null +++ b/vendor/cxx/tests/ui/unsupported_elided.stderr @@ -0,0 +1,22 @@ +error[E0726]: implicit elided lifetime not allowed here + --> tests/ui/unsupported_elided.rs:6:14 + | +6 | type T; + | ^ expected lifetime parameter + | +help: indicate the anonymous lifetime + | +6 | type T<'_>; + | ++++ + +error[E0106]: missing lifetime specifier + --> tests/ui/unsupported_elided.rs:8:24 + | +8 | fn f(t: &T) -> &str; + | -- ^ expected named lifetime parameter + | + = help: this function's return type contains a borrowed value, but the signature does not say which one of `t`'s 2 lifetimes it is borrowed from +help: consider introducing a named lifetime parameter + | +8 | fn f<'a>(t: &'a T<'a>) -> &'a str; + | ++++ ++ ++++ ++ diff --git a/vendor/cxx/tests/ui/vec_opaque.rs b/vendor/cxx/tests/ui/vec_opaque.rs new file mode 100644 index 000000000..d0b279cf6 --- /dev/null +++ b/vendor/cxx/tests/ui/vec_opaque.rs @@ -0,0 +1,34 @@ +#[cxx::bridge] +mod handle { + extern "C++" { + type Job; + } +} + +#[cxx::bridge] +mod ffi1 { + extern "C++" { + type Job; + } + + extern "Rust" { + fn f() -> Vec; + } +} + +#[cxx::bridge] +mod ffi2 { + extern "C++" { + type Job = crate::handle::Job; + } + + extern "Rust" { + fn f() -> Vec; + } +} + +fn f() -> Vec { + unimplemented!() +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/vec_opaque.stderr b/vendor/cxx/tests/ui/vec_opaque.stderr new file mode 100644 index 000000000..ae01adfc3 --- /dev/null +++ b/vendor/cxx/tests/ui/vec_opaque.stderr @@ -0,0 +1,23 @@ +error: Rust Vec containing C++ type is not supported yet + --> tests/ui/vec_opaque.rs:15:19 + | +15 | fn f() -> Vec; + | ^^^^^^^^ + +error: needs a cxx::ExternType impl in order to be used as a vector element in Vec + --> tests/ui/vec_opaque.rs:11:9 + | +11 | type Job; + | ^^^^^^^^ + +error[E0271]: type mismatch resolving `::Kind == Trivial` + --> tests/ui/vec_opaque.rs:22:14 + | +22 | type Job = crate::handle::Job; + | ^^^ expected `Trivial`, found `Opaque` + | +note: required by a bound in `verify_extern_kind` + --> src/extern_type.rs + | + | pub fn verify_extern_kind, Kind: self::Kind>() {} + | ^^^^^^^^^^^ required by this bound in `verify_extern_kind` diff --git a/vendor/cxx/tests/ui/vector_autotraits.rs b/vendor/cxx/tests/ui/vector_autotraits.rs new file mode 100644 index 000000000..cc918d58c --- /dev/null +++ b/vendor/cxx/tests/ui/vector_autotraits.rs @@ -0,0 +1,21 @@ +use cxx::CxxVector; + +#[cxx::bridge] +mod ffi { + extern "C++" { + type ThreadSafe; + type NotThreadSafe; + } + + impl CxxVector {} + impl CxxVector {} +} + +unsafe impl Send for ffi::ThreadSafe {} + +fn assert_send() {} + +fn main() { + assert_send::>(); + assert_send::>(); +} diff --git a/vendor/cxx/tests/ui/vector_autotraits.stderr b/vendor/cxx/tests/ui/vector_autotraits.stderr new file mode 100644 index 000000000..8851cedc1 --- /dev/null +++ b/vendor/cxx/tests/ui/vector_autotraits.stderr @@ -0,0 +1,22 @@ +error[E0277]: `*const cxx::void` cannot be sent between threads safely + --> tests/ui/vector_autotraits.rs:20:19 + | +20 | assert_send::>(); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `*const cxx::void` cannot be sent between threads safely + | + = help: within `CxxVector`, the trait `Send` is not implemented for `*const cxx::void` + = note: required because it appears within the type `[*const void; 0]` + = note: required because it appears within the type `Opaque` +note: required because it appears within the type `NotThreadSafe` + --> tests/ui/vector_autotraits.rs:7:14 + | +7 | type NotThreadSafe; + | ^^^^^^^^^^^^^ + = note: required because it appears within the type `[NotThreadSafe]` + = note: required because it appears within the type `PhantomData<[NotThreadSafe]>` + = note: required because it appears within the type `CxxVector` +note: required by a bound in `assert_send` + --> tests/ui/vector_autotraits.rs:16:19 + | +16 | fn assert_send() {} + | ^^^^ required by this bound in `assert_send` diff --git a/vendor/cxx/tests/ui/wrong_type_id.rs b/vendor/cxx/tests/ui/wrong_type_id.rs new file mode 100644 index 000000000..9137e5166 --- /dev/null +++ b/vendor/cxx/tests/ui/wrong_type_id.rs @@ -0,0 +1,15 @@ +#[cxx::bridge(namespace = "folly")] +mod here { + extern "C++" { + type StringPiece; + } +} + +#[cxx::bridge(namespace = "folly")] +mod there { + extern "C++" { + type ByteRange = crate::here::StringPiece; + } +} + +fn main() {} diff --git a/vendor/cxx/tests/ui/wrong_type_id.stderr b/vendor/cxx/tests/ui/wrong_type_id.stderr new file mode 100644 index 000000000..d3ed3a0c1 --- /dev/null +++ b/vendor/cxx/tests/ui/wrong_type_id.stderr @@ -0,0 +1,13 @@ +error[E0271]: type mismatch resolving `::Id == (f, o, l, l, y, (), B, y, t, e, ..., ..., ..., ..., ...)` + --> tests/ui/wrong_type_id.rs:11:14 + | +11 | type ByteRange = crate::here::StringPiece; + | ^^^^^^^^^ expected a tuple with 15 elements, found one with 17 elements + | + = note: expected tuple `(f, o, l, l, y, (), B, y, t, e, R, a, n, g, e)` + found tuple `(f, o, l, l, y, (), S, t, r, i, n, g, P, i, e, c, e)` +note: required by a bound in `verify_extern_type` + --> src/extern_type.rs + | + | pub fn verify_extern_type, Id>() {} + | ^^^^^^^ required by this bound in `verify_extern_type` -- cgit v1.2.3