You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

182 lines
3.4 KiB

#[macro_use]
mod compiletest;
assert_no_panic! {
mod test_readme {
#[no_panic]
fn demo(s: &str) -> &str {
&s[1..]
}
fn main() {
println!("{}", demo("input string"));
}
}
mod test_method_in_impl {
struct S;
impl S {
#[no_panic]
fn demo(self) -> &'static str {
"test"
}
}
fn main() {
println!("{}", S.demo());
}
}
mod test_lifetime_elision {
struct Buffer {
bytes: [u8; 24],
}
#[no_panic]
fn demo(buffer: &mut Buffer) -> &[u8] {
&buffer.bytes[..]
}
fn main() {
let mut buffer = Buffer {
bytes: [0u8; 24],
};
println!("{:?}", demo(&mut buffer));
}
}
mod test_receiver_lifetime_elision {
struct Buffer {
bytes: [u8; 24],
}
impl Buffer {
#[no_panic]
fn demo(&mut self, _s: &str) -> &[u8] {
&self.bytes[..]
}
}
fn main() {
let mut buffer = Buffer {
bytes: [0u8; 24],
};
println!("{:?}", buffer.demo(""));
}
}
mod test_ref_argument {
#[no_panic]
fn demo(ref i: i32) -> i32 {
*i
}
fn main() {
println!("{}", demo(0));
}
}
mod test_mut_argument {
#[no_panic]
fn demo(mut i: i32) -> i32 {
i += 1;
i
}
fn main() {
println!("{}", demo(0));
}
}
mod test_ref_mut_argument {
#[no_panic]
fn demo(ref mut i: i32) -> i32 {
*i += 1;
*i
}
fn main() {
println!("{}", demo(0));
}
}
mod test_borrow_from_mut_self {
struct S {
data: usize,
}
impl S {
#[no_panic]
fn get_mut(&mut self) -> &mut usize {
&mut self.data
}
}
fn main() {
let mut s = S { data: 0 };
println!("{}", s.get_mut());
}
}
mod test_self_in_vec {
struct S {
data: usize,
}
impl S {
#[no_panic]
fn get_mut(&mut self) -> Vec<usize> {
vec![self.data]
}
}
fn main() {
let mut s = S { data: 0 };
println!("{}", s.get_mut()[0]);
}
}
mod test_self_in_macro_containing_fn {
pub struct S {
data: usize,
}
macro_rules! emit {
($($tt:tt)*) => {
$($tt)*
};
}
impl S {
#[no_panic]
fn get_mut(&mut self) -> usize {
let _ = emit!({
impl S {
pub fn f(self) {}
}
});
self.data
}
}
fn main() {
let mut s = S { data: 0 };
println!("{}", s.get_mut());
}
}
}
assert_link_error! {
mod test_readme {
#[no_panic]
fn demo(s: &str) -> &str {
&s[1..]
}
fn main() {
println!("{}", demo("\u{1f980}input string"));
}
}
}