From 698f8c2f01ea549d77d7dc3338a12e04c11057b9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 14:02:58 +0200 Subject: Adding upstream version 1.64.0+dfsg1. Signed-off-by: Daniel Baumann --- .../ui/cross-crate/auxiliary/cci_borrow_lib.rs | 3 ++ .../ui/cross-crate/auxiliary/cci_capture_clause.rs | 10 +++++ src/test/ui/cross-crate/auxiliary/cci_const.rs | 6 +++ src/test/ui/cross-crate/auxiliary/cci_impl_lib.rs | 16 +++++++ src/test/ui/cross-crate/auxiliary/cci_iter_lib.rs | 11 +++++ .../ui/cross-crate/auxiliary/cci_nested_lib.rs | 50 ++++++++++++++++++++++ .../ui/cross-crate/auxiliary/cci_no_inline_lib.rs | 12 ++++++ .../auxiliary/moves_based_on_type_lib.rs | 17 ++++++++ .../ui/cross-crate/auxiliary/pub_static_array.rs | 1 + .../auxiliary/reexported_static_methods.rs | 43 +++++++++++++++++++ .../ui/cross-crate/auxiliary/static_init_aux.rs | 10 +++++ .../auxiliary/xcrate-trait-lifetime-param.rs | 3 ++ .../auxiliary/xcrate_address_insignificant.rs | 8 ++++ .../auxiliary/xcrate_associated_type_defaults.rs | 12 ++++++ .../auxiliary/xcrate_generic_fn_nested_return.rs | 16 +++++++ .../auxiliary/xcrate_static_addresses.rs | 17 ++++++++ 16 files changed, 235 insertions(+) create mode 100644 src/test/ui/cross-crate/auxiliary/cci_borrow_lib.rs create mode 100644 src/test/ui/cross-crate/auxiliary/cci_capture_clause.rs create mode 100644 src/test/ui/cross-crate/auxiliary/cci_const.rs create mode 100644 src/test/ui/cross-crate/auxiliary/cci_impl_lib.rs create mode 100644 src/test/ui/cross-crate/auxiliary/cci_iter_lib.rs create mode 100644 src/test/ui/cross-crate/auxiliary/cci_nested_lib.rs create mode 100644 src/test/ui/cross-crate/auxiliary/cci_no_inline_lib.rs create mode 100644 src/test/ui/cross-crate/auxiliary/moves_based_on_type_lib.rs create mode 100644 src/test/ui/cross-crate/auxiliary/pub_static_array.rs create mode 100644 src/test/ui/cross-crate/auxiliary/reexported_static_methods.rs create mode 100644 src/test/ui/cross-crate/auxiliary/static_init_aux.rs create mode 100644 src/test/ui/cross-crate/auxiliary/xcrate-trait-lifetime-param.rs create mode 100644 src/test/ui/cross-crate/auxiliary/xcrate_address_insignificant.rs create mode 100644 src/test/ui/cross-crate/auxiliary/xcrate_associated_type_defaults.rs create mode 100644 src/test/ui/cross-crate/auxiliary/xcrate_generic_fn_nested_return.rs create mode 100644 src/test/ui/cross-crate/auxiliary/xcrate_static_addresses.rs (limited to 'src/test/ui/cross-crate/auxiliary') diff --git a/src/test/ui/cross-crate/auxiliary/cci_borrow_lib.rs b/src/test/ui/cross-crate/auxiliary/cci_borrow_lib.rs new file mode 100644 index 000000000..7c57a1c66 --- /dev/null +++ b/src/test/ui/cross-crate/auxiliary/cci_borrow_lib.rs @@ -0,0 +1,3 @@ +pub fn foo(x: &usize) -> usize { + *x +} diff --git a/src/test/ui/cross-crate/auxiliary/cci_capture_clause.rs b/src/test/ui/cross-crate/auxiliary/cci_capture_clause.rs new file mode 100644 index 000000000..4cd001ecc --- /dev/null +++ b/src/test/ui/cross-crate/auxiliary/cci_capture_clause.rs @@ -0,0 +1,10 @@ +use std::thread; +use std::sync::mpsc::{Receiver, channel}; + +pub fn foo(x: T) -> Receiver { + let (tx, rx) = channel(); + thread::spawn(move|| { + tx.send(x.clone()); + }); + rx +} diff --git a/src/test/ui/cross-crate/auxiliary/cci_const.rs b/src/test/ui/cross-crate/auxiliary/cci_const.rs new file mode 100644 index 000000000..c83b3f4a5 --- /dev/null +++ b/src/test/ui/cross-crate/auxiliary/cci_const.rs @@ -0,0 +1,6 @@ +pub extern "C" fn bar() { +} + +pub const foopy: &'static str = "hi there"; +pub const uint_val: usize = 12; +pub const uint_expr: usize = (1 << uint_val) - 1; diff --git a/src/test/ui/cross-crate/auxiliary/cci_impl_lib.rs b/src/test/ui/cross-crate/auxiliary/cci_impl_lib.rs new file mode 100644 index 000000000..0db0037b2 --- /dev/null +++ b/src/test/ui/cross-crate/auxiliary/cci_impl_lib.rs @@ -0,0 +1,16 @@ +#![crate_name="cci_impl_lib"] + +pub trait uint_helpers { + fn to(&self, v: usize, f: F) where F: FnMut(usize); +} + +impl uint_helpers for usize { + #[inline] + fn to(&self, v: usize, mut f: F) where F: FnMut(usize) { + let mut i = *self; + while i < v { + f(i); + i += 1; + } + } +} diff --git a/src/test/ui/cross-crate/auxiliary/cci_iter_lib.rs b/src/test/ui/cross-crate/auxiliary/cci_iter_lib.rs new file mode 100644 index 000000000..60c36bc7d --- /dev/null +++ b/src/test/ui/cross-crate/auxiliary/cci_iter_lib.rs @@ -0,0 +1,11 @@ +#![crate_name="cci_iter_lib"] + +#[inline] +pub fn iter(v: &[T], mut f: F) where F: FnMut(&T) { + let mut i = 0; + let n = v.len(); + while i < n { + f(&v[i]); + i += 1; + } +} diff --git a/src/test/ui/cross-crate/auxiliary/cci_nested_lib.rs b/src/test/ui/cross-crate/auxiliary/cci_nested_lib.rs new file mode 100644 index 000000000..23d76ef36 --- /dev/null +++ b/src/test/ui/cross-crate/auxiliary/cci_nested_lib.rs @@ -0,0 +1,50 @@ +use std::cell::RefCell; + +pub struct Entry { + key: A, + value: B +} + +pub struct alist { + eq_fn: extern "Rust" fn(A,A) -> bool, + data: Box>>>, +} + +pub fn alist_add(lst: &alist, k: A, v: B) { + let mut data = lst.data.borrow_mut(); + (*data).push(Entry{key:k, value:v}); +} + +pub fn alist_get( + lst: &alist, + k: A) + -> B { + let eq_fn = lst.eq_fn; + let data = lst.data.borrow(); + for entry in &(*data) { + if eq_fn(entry.key.clone(), k.clone()) { + return entry.value.clone(); + } + } + panic!(); +} + +#[inline] +pub fn new_int_alist() -> alist { + fn eq_int(a: isize, b: isize) -> bool { a == b } + return alist { + eq_fn: eq_int, + data: Box::new(RefCell::new(Vec::new())), + }; +} + +#[inline] +pub fn new_int_alist_2() -> alist { + #[inline] + fn eq_int(a: isize, b: isize) -> bool { a == b } + return alist { + eq_fn: eq_int, + data: Box::new(RefCell::new(Vec::new())), + }; +} diff --git a/src/test/ui/cross-crate/auxiliary/cci_no_inline_lib.rs b/src/test/ui/cross-crate/auxiliary/cci_no_inline_lib.rs new file mode 100644 index 000000000..177dba217 --- /dev/null +++ b/src/test/ui/cross-crate/auxiliary/cci_no_inline_lib.rs @@ -0,0 +1,12 @@ +#![crate_name="cci_no_inline_lib"] + + +// same as cci_iter_lib, more-or-less, but not marked inline +pub fn iter(v: Vec , mut f: F) where F: FnMut(usize) { + let mut i = 0; + let n = v.len(); + while i < n { + f(v[i]); + i += 1; + } +} diff --git a/src/test/ui/cross-crate/auxiliary/moves_based_on_type_lib.rs b/src/test/ui/cross-crate/auxiliary/moves_based_on_type_lib.rs new file mode 100644 index 000000000..7e7e3b860 --- /dev/null +++ b/src/test/ui/cross-crate/auxiliary/moves_based_on_type_lib.rs @@ -0,0 +1,17 @@ +#![crate_type="lib"] + +pub struct S { + x: isize, +} + +impl Drop for S { + fn drop(&mut self) { + println!("goodbye"); + } +} + +pub fn f() { + let x = S { x: 1 }; + let y = x; + let _z = y; +} diff --git a/src/test/ui/cross-crate/auxiliary/pub_static_array.rs b/src/test/ui/cross-crate/auxiliary/pub_static_array.rs new file mode 100644 index 000000000..49cb76921 --- /dev/null +++ b/src/test/ui/cross-crate/auxiliary/pub_static_array.rs @@ -0,0 +1 @@ +pub static ARRAY: [u8; 1] = [1]; diff --git a/src/test/ui/cross-crate/auxiliary/reexported_static_methods.rs b/src/test/ui/cross-crate/auxiliary/reexported_static_methods.rs new file mode 100644 index 000000000..cc961625f --- /dev/null +++ b/src/test/ui/cross-crate/auxiliary/reexported_static_methods.rs @@ -0,0 +1,43 @@ +pub use sub_foo::Foo; +pub use self::Bar as Baz; +pub use sub_foo::Boz; +pub use sub_foo::Bort; + +pub trait Bar { + fn bar() -> Self; +} + +impl Bar for isize { + fn bar() -> isize { 84 } +} + +pub mod sub_foo { + pub trait Foo { + fn foo() -> Self; + } + + impl Foo for isize { + fn foo() -> isize { 42 } + } + + pub struct Boz { + unused_str: String + } + + impl Boz { + pub fn boz(i: isize) -> bool { + i > 0 + } + } + + pub enum Bort { + Bort1, + Bort2 + } + + impl Bort { + pub fn bort() -> String { + "bort()".to_string() + } + } +} diff --git a/src/test/ui/cross-crate/auxiliary/static_init_aux.rs b/src/test/ui/cross-crate/auxiliary/static_init_aux.rs new file mode 100644 index 000000000..3b664f436 --- /dev/null +++ b/src/test/ui/cross-crate/auxiliary/static_init_aux.rs @@ -0,0 +1,10 @@ +pub static V: &u32 = &X; +pub static F: fn() = f; + +static X: u32 = 42; + +pub fn v() -> *const u32 { + V +} + +fn f() {} diff --git a/src/test/ui/cross-crate/auxiliary/xcrate-trait-lifetime-param.rs b/src/test/ui/cross-crate/auxiliary/xcrate-trait-lifetime-param.rs new file mode 100644 index 000000000..7c1175f7a --- /dev/null +++ b/src/test/ui/cross-crate/auxiliary/xcrate-trait-lifetime-param.rs @@ -0,0 +1,3 @@ +pub trait FromBuf<'a> { + fn from_buf(_: &'a [u8]) -> Self; +} diff --git a/src/test/ui/cross-crate/auxiliary/xcrate_address_insignificant.rs b/src/test/ui/cross-crate/auxiliary/xcrate_address_insignificant.rs new file mode 100644 index 000000000..e79e334b5 --- /dev/null +++ b/src/test/ui/cross-crate/auxiliary/xcrate_address_insignificant.rs @@ -0,0 +1,8 @@ +pub fn foo() -> isize { + static a: isize = 3; + a +} + +pub fn bar() -> isize { + foo::() +} diff --git a/src/test/ui/cross-crate/auxiliary/xcrate_associated_type_defaults.rs b/src/test/ui/cross-crate/auxiliary/xcrate_associated_type_defaults.rs new file mode 100644 index 000000000..d8a55dd34 --- /dev/null +++ b/src/test/ui/cross-crate/auxiliary/xcrate_associated_type_defaults.rs @@ -0,0 +1,12 @@ +#![feature(associated_type_defaults)] + +pub trait Foo { + type Out: Default + ToString = T; +} + +impl Foo for () { +} + +impl Foo for () { + type Out = bool; +} diff --git a/src/test/ui/cross-crate/auxiliary/xcrate_generic_fn_nested_return.rs b/src/test/ui/cross-crate/auxiliary/xcrate_generic_fn_nested_return.rs new file mode 100644 index 000000000..2ab23b4d7 --- /dev/null +++ b/src/test/ui/cross-crate/auxiliary/xcrate_generic_fn_nested_return.rs @@ -0,0 +1,16 @@ +pub struct Request { + pub id: String, + pub arg: String, +} + +pub fn decode() -> Result { + (|| { + Ok(Request { + id: "hi".to_owned(), + arg: match Err(()) { + Ok(v) => v, + Err(e) => return Err(e) + }, + }) + })() +} diff --git a/src/test/ui/cross-crate/auxiliary/xcrate_static_addresses.rs b/src/test/ui/cross-crate/auxiliary/xcrate_static_addresses.rs new file mode 100644 index 000000000..e18d34799 --- /dev/null +++ b/src/test/ui/cross-crate/auxiliary/xcrate_static_addresses.rs @@ -0,0 +1,17 @@ +pub static global: isize = 3; + +static global0: isize = 4; + +pub static global2: &'static isize = &global0; + +pub fn verify_same(a: &'static isize) { + let a = a as *const isize as usize; + let b = &global as *const isize as usize; + assert_eq!(a, b); +} + +pub fn verify_same2(a: &'static isize) { + let a = a as *const isize as usize; + let b = global2 as *const isize as usize; + assert_eq!(a, b); +} -- cgit v1.2.3