summaryrefslogtreecommitdiffstats
path: root/src/test/ui/cross-crate/auxiliary
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/cross-crate/auxiliary')
-rw-r--r--src/test/ui/cross-crate/auxiliary/cci_borrow_lib.rs3
-rw-r--r--src/test/ui/cross-crate/auxiliary/cci_capture_clause.rs10
-rw-r--r--src/test/ui/cross-crate/auxiliary/cci_const.rs6
-rw-r--r--src/test/ui/cross-crate/auxiliary/cci_impl_lib.rs16
-rw-r--r--src/test/ui/cross-crate/auxiliary/cci_iter_lib.rs11
-rw-r--r--src/test/ui/cross-crate/auxiliary/cci_nested_lib.rs50
-rw-r--r--src/test/ui/cross-crate/auxiliary/cci_no_inline_lib.rs12
-rw-r--r--src/test/ui/cross-crate/auxiliary/moves_based_on_type_lib.rs17
-rw-r--r--src/test/ui/cross-crate/auxiliary/pub_static_array.rs1
-rw-r--r--src/test/ui/cross-crate/auxiliary/reexported_static_methods.rs43
-rw-r--r--src/test/ui/cross-crate/auxiliary/static_init_aux.rs10
-rw-r--r--src/test/ui/cross-crate/auxiliary/xcrate-trait-lifetime-param.rs3
-rw-r--r--src/test/ui/cross-crate/auxiliary/xcrate_address_insignificant.rs8
-rw-r--r--src/test/ui/cross-crate/auxiliary/xcrate_associated_type_defaults.rs12
-rw-r--r--src/test/ui/cross-crate/auxiliary/xcrate_generic_fn_nested_return.rs16
-rw-r--r--src/test/ui/cross-crate/auxiliary/xcrate_static_addresses.rs17
16 files changed, 235 insertions, 0 deletions
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<T:'static + Send + Clone>(x: T) -> Receiver<T> {
+ 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<F>(&self, v: usize, f: F) where F: FnMut(usize);
+}
+
+impl uint_helpers for usize {
+ #[inline]
+ fn to<F>(&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<T, F>(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<A,B> {
+ key: A,
+ value: B
+}
+
+pub struct alist<A,B> {
+ eq_fn: extern "Rust" fn(A,A) -> bool,
+ data: Box<RefCell<Vec<Entry<A,B>>>>,
+}
+
+pub fn alist_add<A:'static,B:'static>(lst: &alist<A,B>, k: A, v: B) {
+ let mut data = lst.data.borrow_mut();
+ (*data).push(Entry{key:k, value:v});
+}
+
+pub fn alist_get<A:Clone + 'static,
+ B:Clone + 'static>(
+ lst: &alist<A,B>,
+ 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<B:'static>() -> alist<isize, B> {
+ 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<B:'static>() -> alist<isize, B> {
+ #[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<F>(v: Vec<usize> , 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<T>() -> isize {
+ static a: isize = 3;
+ a
+}
+
+pub fn bar() -> isize {
+ foo::<isize>()
+}
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<T: Default + ToString> {
+ type Out: Default + ToString = T;
+}
+
+impl Foo<u32> for () {
+}
+
+impl Foo<u64> 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<T>() -> Result<Request, ()> {
+ (|| {
+ 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);
+}