mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-28 01:34:21 +00:00
Workaround rust-lang/rust#49855 by forcing rustc_error in any mode, including NLL.
NOTE: I was careful to make each change in a manner that preserves the existing diagnostic output (usually by ensuring that no lines were added or removed). This means that the resulting source files are not as nice to read as they were at the start. But we will have to review these cases by hand anyway as follow-up work, so cleanup could reasonably happen then (or not at all).
This commit is contained in:
parent
ae05961fdf
commit
1c8d2bdda1
@ -7,9 +7,9 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
#![feature(rustc_attrs)]
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
fn main() {
|
fn main() { #![rustc_error] // rust-lang/rust#49855
|
||||||
// Original borrow ends at end of function
|
// Original borrow ends at end of function
|
||||||
let mut x = 1;
|
let mut x = 1;
|
||||||
let y = &mut x;
|
let y = &mut x;
|
||||||
|
@ -9,8 +9,8 @@
|
|||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// ensure borrowck messages are correct outside special case
|
// ensure borrowck messages are correct outside special case
|
||||||
|
#![feature(rustc_attrs)]
|
||||||
fn main() {
|
fn main() { #![rustc_error] // rust-lang/rust#49855
|
||||||
let mut void = ();
|
let mut void = ();
|
||||||
|
|
||||||
let first = &mut void;
|
let first = &mut void;
|
||||||
|
@ -93,8 +93,8 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#![feature(rustc_attrs)]
|
||||||
fn main() {
|
fn main() { #![rustc_error] // rust-lang/rust#49855
|
||||||
let mut x = "foo";
|
let mut x = "foo";
|
||||||
let y = &mut x;
|
let y = &mut x;
|
||||||
let z = &mut x; //~ ERROR cannot borrow
|
let z = &mut x; //~ ERROR cannot borrow
|
||||||
|
@ -19,12 +19,12 @@
|
|||||||
//
|
//
|
||||||
// See also dropck-eyepatch.rs for more information about the general
|
// See also dropck-eyepatch.rs for more information about the general
|
||||||
// structure of the test.
|
// structure of the test.
|
||||||
|
#![feature(rustc_attrs)]
|
||||||
extern crate dropck_eyepatch_extern_crate as other;
|
extern crate dropck_eyepatch_extern_crate as other;
|
||||||
|
|
||||||
use other::{Dt,Dr,Pt,Pr,St,Sr};
|
use other::{Dt,Dr,Pt,Pr,St,Sr};
|
||||||
|
|
||||||
fn main() {
|
fn main() { #![rustc_error] // rust-lang/rust#49855
|
||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
let c_long;
|
let c_long;
|
||||||
let (c, mut dt, mut dr, mut pt, mut pr, st, sr)
|
let (c, mut dt, mut dr, mut pt, mut pr, st, sr)
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(dropck_eyepatch)]
|
#![feature(dropck_eyepatch, rustc_attrs)]
|
||||||
|
|
||||||
// The point of this test is to test uses of `#[may_dangle]` attribute
|
// The point of this test is to test uses of `#[may_dangle]` attribute
|
||||||
// where the formal declaration order (in the impl generics) does not
|
// where the formal declaration order (in the impl generics) does not
|
||||||
@ -41,7 +41,7 @@ unsafe impl<'b, #[may_dangle] 'a, B: fmt::Debug> Drop for Pr<'a, 'b, B> {
|
|||||||
fn drop(&mut self) { println!("drop {} {:?}", self.0, self.2); }
|
fn drop(&mut self) { println!("drop {} {:?}", self.0, self.2); }
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() { #![rustc_error] // rust-lang/rust#49855
|
||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
let c_long;
|
let c_long;
|
||||||
let (c, mut dt, mut dr, mut pt, mut pr, st, sr)
|
let (c, mut dt, mut dr, mut pt, mut pr, st, sr)
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(dropck_eyepatch)]
|
#![feature(dropck_eyepatch, rustc_attrs)]
|
||||||
|
|
||||||
// The point of this test is to illustrate that the `#[may_dangle]`
|
// The point of this test is to illustrate that the `#[may_dangle]`
|
||||||
// attribute specifically allows, in the context of a type
|
// attribute specifically allows, in the context of a type
|
||||||
@ -64,7 +64,7 @@ unsafe impl<#[may_dangle] 'a, 'b, B: fmt::Debug> Drop for Pr<'a, 'b, B> {
|
|||||||
fn drop(&mut self) { println!("drop {} {:?}", self.0, self.2); }
|
fn drop(&mut self) { println!("drop {} {:?}", self.0, self.2); }
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() { #![rustc_error] // rust-lang/rust#49855
|
||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
let c_long;
|
let c_long;
|
||||||
let (c, mut dt, mut dr, mut pt, mut pr, st, sr)
|
let (c, mut dt, mut dr, mut pt, mut pr, st, sr)
|
||||||
|
@ -7,8 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
#![feature(rustc_attrs)]
|
||||||
fn main() {
|
fn main() { #![rustc_error] // rust-lang/rust#49855
|
||||||
let mut i = 0;
|
let mut i = 0;
|
||||||
let mut x = &mut i;
|
let mut x = &mut i;
|
||||||
let mut a = &mut i; //~ ERROR E0499
|
let mut a = &mut i; //~ ERROR E0499
|
||||||
|
@ -7,12 +7,12 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
#![feature(rustc_attrs)]
|
||||||
fn bar(x: &mut i32) {}
|
fn bar(x: &mut i32) {}
|
||||||
fn foo(a: &mut i32) {
|
fn foo(a: &mut i32) {
|
||||||
let ref y = a;
|
let ref y = a;
|
||||||
bar(a); //~ ERROR E0502
|
bar(a); //~ ERROR E0502
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() { #![rustc_error] // rust-lang/rust#49855
|
||||||
}
|
}
|
||||||
|
@ -7,8 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
#![feature(rustc_attrs)]
|
||||||
fn main() {
|
fn main() { #![rustc_error] // rust-lang/rust#49855
|
||||||
let mut value = 3;
|
let mut value = 3;
|
||||||
let _borrow = &mut value;
|
let _borrow = &mut value;
|
||||||
let _sum = value + 1; //~ ERROR E0503
|
let _sum = value + 1; //~ ERROR E0503
|
||||||
|
@ -7,12 +7,12 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
#![feature(rustc_attrs)]
|
||||||
struct Value {}
|
struct Value {}
|
||||||
|
|
||||||
fn eat(val: Value) {}
|
fn eat(val: Value) {}
|
||||||
|
|
||||||
fn main() {
|
fn main() { #![rustc_error] // rust-lang/rust#49855
|
||||||
let x = Value{};
|
let x = Value{};
|
||||||
{
|
{
|
||||||
let _ref_to_val: &Value = &x;
|
let _ref_to_val: &Value = &x;
|
||||||
|
@ -7,12 +7,12 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
#![feature(rustc_attrs)]
|
||||||
struct Foo<'a> {
|
struct Foo<'a> {
|
||||||
x: Option<&'a u32>,
|
x: Option<&'a u32>,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() { #![rustc_error] // rust-lang/rust#49855
|
||||||
let mut x = Foo { x: None };
|
let mut x = Foo { x: None };
|
||||||
let y = 0;
|
let y = 0;
|
||||||
x.x = Some(&y);
|
x.x = Some(&y);
|
||||||
|
@ -7,10 +7,10 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
#![feature(rustc_attrs)]
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code)]
|
||||||
|
|
||||||
fn main() {
|
fn main() { #![rustc_error] // rust-lang/rust#49855
|
||||||
let mut x = 33;
|
let mut x = 33;
|
||||||
|
|
||||||
let p = &x;
|
let p = &x;
|
||||||
|
@ -8,11 +8,11 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(generators, generator_trait)]
|
#![feature(generators, generator_trait, rustc_attrs)]
|
||||||
|
|
||||||
use std::ops::Generator;
|
use std::ops::Generator;
|
||||||
|
|
||||||
fn main() {
|
fn main() { #![rustc_error] // rust-lang/rust#49855
|
||||||
let _b = {
|
let _b = {
|
||||||
let a = 3;
|
let a = 3;
|
||||||
unsafe { (|| yield &a).resume() }
|
unsafe { (|| yield &a).resume() }
|
||||||
|
@ -8,12 +8,12 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(generators, generator_trait, box_leak)]
|
#![feature(generators, generator_trait, box_leak, rustc_attrs)]
|
||||||
|
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
use std::ops::Generator;
|
use std::ops::Generator;
|
||||||
|
|
||||||
fn main() {
|
fn main() { #![rustc_error] // rust-lang/rust#49855
|
||||||
let (cell, mut gen);
|
let (cell, mut gen);
|
||||||
cell = Box::new(RefCell::new(0));
|
cell = Box::new(RefCell::new(0));
|
||||||
let ref_ = Box::leak(Box::new(Some(cell.borrow_mut())));
|
let ref_ = Box::leak(Box::new(Some(cell.borrow_mut())));
|
||||||
|
@ -8,11 +8,11 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(generators)]
|
#![feature(generators, rustc_attrs)]
|
||||||
|
|
||||||
enum Test { A(i32), B, }
|
enum Test { A(i32), B, }
|
||||||
|
|
||||||
fn main() { }
|
fn main() { #![rustc_error] } // rust-lang/rust#49855
|
||||||
|
|
||||||
fn fun(test: Test) {
|
fn fun(test: Test) {
|
||||||
move || {
|
move || {
|
||||||
|
@ -8,11 +8,11 @@
|
|||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
#![feature(box_syntax)]
|
#![feature(box_syntax, rustc_attrs)]
|
||||||
|
|
||||||
struct Foo { a: isize, b: isize }
|
struct Foo { a: isize, b: isize }
|
||||||
|
|
||||||
fn main() {
|
fn main() { #![rustc_error] // rust-lang/rust#49855
|
||||||
let mut x: Box<_> = box Foo { a: 1, b: 2 };
|
let mut x: Box<_> = box Foo { a: 1, b: 2 };
|
||||||
let (a, b) = (&mut x.a, &mut x.b);
|
let (a, b) = (&mut x.a, &mut x.b);
|
||||||
//~^ ERROR cannot borrow `x` (via `x.b`) as mutable more than once at a time
|
//~^ ERROR cannot borrow `x` (via `x.b`) as mutable more than once at a time
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
#![feature(rustc_attrs)]
|
||||||
macro_rules! width(
|
macro_rules! width(
|
||||||
($this:expr) => {
|
($this:expr) => {
|
||||||
$this.width.unwrap()
|
$this.width.unwrap()
|
||||||
@ -29,4 +29,4 @@ impl HasInfo {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {}
|
fn main() { #![rustc_error] } // rust-lang/rust#49855
|
||||||
|
@ -7,10 +7,10 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
#![feature(rustc_attrs)]
|
||||||
fn do_something<T>(collection: &mut Vec<T>) {
|
fn do_something<T>(collection: &mut Vec<T>) {
|
||||||
let _a = &collection;
|
let _a = &collection;
|
||||||
collection.swap(1, 2); //~ ERROR also borrowed as immutable
|
collection.swap(1, 2); //~ ERROR also borrowed as immutable
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {}
|
fn main() { #![rustc_error] } // rust-lang/rust#49855
|
||||||
|
@ -7,11 +7,11 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
#![feature(rustc_attrs)]
|
||||||
fn f() {
|
fn f() {
|
||||||
let x = vec![1].iter();
|
let x = vec![1].iter();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() { #![rustc_error] // rust-lang/rust#49855
|
||||||
f();
|
f();
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
#![feature(rustc_attrs)]
|
||||||
fn id<T>(x: T) -> T { x }
|
fn id<T>(x: T) -> T { x }
|
||||||
|
|
||||||
fn f() {
|
fn f() {
|
||||||
@ -58,6 +58,6 @@ fn f() {
|
|||||||
//~| NOTE temporary value needs to live until here
|
//~| NOTE temporary value needs to live until here
|
||||||
//~| NOTE temporary value needs to live until here
|
//~| NOTE temporary value needs to live until here
|
||||||
|
|
||||||
fn main() {
|
fn main() { #![rustc_error] // rust-lang/rust#49855
|
||||||
f();
|
f();
|
||||||
}
|
}
|
||||||
|
@ -7,8 +7,8 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
#![feature(rustc_attrs)]
|
||||||
fn main() {
|
fn main() { #![rustc_error] // rust-lang/rust#49855
|
||||||
let p;
|
let p;
|
||||||
let a = 42;
|
let a = 42;
|
||||||
p = &a;
|
p = &a;
|
||||||
|
@ -7,10 +7,10 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
#![feature(rustc_attrs)]
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
|
|
||||||
fn main() {
|
fn main() { #![rustc_error] // rust-lang/rust#49855
|
||||||
let m = RefCell::new(0);
|
let m = RefCell::new(0);
|
||||||
let p;
|
let p;
|
||||||
{
|
{
|
||||||
|
@ -9,8 +9,8 @@
|
|||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
|
||||||
// Test range syntax - borrow errors.
|
// Test range syntax - borrow errors.
|
||||||
|
#![feature(rustc_attrs)]
|
||||||
pub fn main() {
|
pub fn main() { #![rustc_error] // rust-lang/rust#49855
|
||||||
let r = {
|
let r = {
|
||||||
let a = 42;
|
let a = 42;
|
||||||
let b = 42;
|
let b = 42;
|
||||||
|
@ -7,10 +7,10 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
#![feature(rustc_attrs)]
|
||||||
use std::ops::FnMut;
|
use std::ops::FnMut;
|
||||||
|
|
||||||
fn main() {
|
fn main() { #![rustc_error] // rust-lang/rust#49855
|
||||||
let mut f;
|
let mut f;
|
||||||
{
|
{
|
||||||
let c = 1;
|
let c = 1;
|
||||||
|
@ -7,10 +7,10 @@
|
|||||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
// option. This file may not be copied, modified, or distributed
|
// option. This file may not be copied, modified, or distributed
|
||||||
// except according to those terms.
|
// except according to those terms.
|
||||||
|
#![feature(rustc_attrs)]
|
||||||
// Test slicing expressions doesn't defeat the borrow checker.
|
// Test slicing expressions doesn't defeat the borrow checker.
|
||||||
|
|
||||||
fn main() {
|
fn main() { #![rustc_error] // rust-lang/rust#49855
|
||||||
let y;
|
let y;
|
||||||
{
|
{
|
||||||
let x: &[isize] = &vec![1, 2, 3, 4, 5];
|
let x: &[isize] = &vec![1, 2, 3, 4, 5];
|
||||||
|
@ -17,8 +17,8 @@
|
|||||||
// element it owns; thus, for data like this, it seems like we could
|
// element it owns; thus, for data like this, it seems like we could
|
||||||
// loosen the restrictions here if we wanted. But it also is not
|
// loosen the restrictions here if we wanted. But it also is not
|
||||||
// clear whether such loosening is terribly important.)
|
// clear whether such loosening is terribly important.)
|
||||||
|
#![feature(rustc_attrs)]
|
||||||
fn main() {
|
fn main() { #![rustc_error] // rust-lang/rust#49855
|
||||||
let mut v = Vec::new();
|
let mut v = Vec::new();
|
||||||
|
|
||||||
let x: i8 = 3;
|
let x: i8 = 3;
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
// A method's receiver must be well-formed, even if it has late-bound regions.
|
// A method's receiver must be well-formed, even if it has late-bound regions.
|
||||||
// Because of this, a method's substs being well-formed does not imply that
|
// Because of this, a method's substs being well-formed does not imply that
|
||||||
// the method's implied bounds are met.
|
// the method's implied bounds are met.
|
||||||
|
#![feature(rustc_attrs)]
|
||||||
struct Foo<'b>(Option<&'b ()>);
|
struct Foo<'b>(Option<&'b ()>);
|
||||||
|
|
||||||
trait Bar<'b> {
|
trait Bar<'b> {
|
||||||
@ -22,7 +22,7 @@ impl<'b> Bar<'b> for Foo<'b> {
|
|||||||
fn xmute<'a>(&'a self, u: &'b u32) -> &'a u32 { u }
|
fn xmute<'a>(&'a self, u: &'b u32) -> &'a u32 { u }
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() { #![rustc_error] // rust-lang/rust#49855
|
||||||
let f = Foo(None);
|
let f = Foo(None);
|
||||||
let f2 = f;
|
let f2 = f;
|
||||||
let dangling = {
|
let dangling = {
|
||||||
|
Loading…
Reference in New Issue
Block a user