提交 85a85c20 编写于 作者: S Steven Fackler

Switch missing_copy_implementations to default-allow

This was particularly helpful in the time just after OIBIT's
implementation to make sure things that were supposed to be Copy
continued to be, but it's now creates a lot of noise for types that
intentionally don't want to be Copy.
上级 3b2ed149
...@@ -1813,7 +1813,6 @@ default visibility with the `priv` keyword. When an item is declared as `pub`, ...@@ -1813,7 +1813,6 @@ default visibility with the `priv` keyword. When an item is declared as `pub`,
it can be thought of as being accessible to the outside world. For example: it can be thought of as being accessible to the outside world. For example:
``` ```
# #![allow(missing_copy_implementations)]
# fn main() {} # fn main() {}
// Declare a private struct // Declare a private struct
struct Foo; struct Foo;
......
...@@ -49,7 +49,6 @@ pub struct FromUtf8Error { ...@@ -49,7 +49,6 @@ pub struct FromUtf8Error {
/// A possible error value from the `String::from_utf16` function. /// A possible error value from the `String::from_utf16` function.
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
#[allow(missing_copy_implementations)]
#[derive(Debug)] #[derive(Debug)]
pub struct FromUtf16Error(()); pub struct FromUtf16Error(());
......
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
/// strong, this implementation has not been reviewed for such purposes. /// strong, this implementation has not been reviewed for such purposes.
/// As such, all cryptographic uses of this implementation are strongly /// As such, all cryptographic uses of this implementation are strongly
/// discouraged. /// discouraged.
#[allow(missing_copy_implementations)]
pub struct SipHasher { pub struct SipHasher {
k0: u64, k0: u64,
k1: u64, k1: u64,
......
...@@ -396,7 +396,6 @@ fn clone(&self) -> InvariantType<T> { *self } ...@@ -396,7 +396,6 @@ fn clone(&self) -> InvariantType<T> { *self }
reason = "likely to change with new variance strategy")] reason = "likely to change with new variance strategy")]
#[lang="no_copy_bound"] #[lang="no_copy_bound"]
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord)] #[derive(Clone, PartialEq, Eq, PartialOrd, Ord)]
#[allow(missing_copy_implementations)]
pub struct NoCopy; pub struct NoCopy;
/// A type which is considered managed by the GC. This is typically /// A type which is considered managed by the GC. This is typically
...@@ -405,5 +404,4 @@ fn clone(&self) -> InvariantType<T> { *self } ...@@ -405,5 +404,4 @@ fn clone(&self) -> InvariantType<T> { *self }
reason = "likely to change with new variance strategy")] reason = "likely to change with new variance strategy")]
#[lang="managed_bound"] #[lang="managed_bound"]
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord)] #[derive(Clone, PartialEq, Eq, PartialOrd, Ord)]
#[allow(missing_copy_implementations)]
pub struct Managed; pub struct Managed;
...@@ -149,7 +149,6 @@ fn from_str(s: &str) -> Result<bool, ParseBoolError> { ...@@ -149,7 +149,6 @@ fn from_str(s: &str) -> Result<bool, ParseBoolError> {
/// An error returned when parsing a `bool` from a string fails. /// An error returned when parsing a `bool` from a string fails.
#[derive(Debug, Clone, PartialEq)] #[derive(Debug, Clone, PartialEq)]
#[allow(missing_copy_implementations)]
#[stable(feature = "rust1", since = "1.0.0")] #[stable(feature = "rust1", since = "1.0.0")]
pub struct ParseBoolError { _priv: () } pub struct ParseBoolError { _priv: () }
......
...@@ -332,15 +332,12 @@ pub mod c95 { ...@@ -332,15 +332,12 @@ pub mod c95 {
/// variants, because the compiler complains about the repr attribute /// variants, because the compiler complains about the repr attribute
/// otherwise. /// otherwise.
#[repr(u8)] #[repr(u8)]
#[allow(missing_copy_implementations)]
pub enum c_void { pub enum c_void {
__variant1, __variant1,
__variant2, __variant2,
} }
#[allow(missing_copy_implementations)]
pub enum FILE {} pub enum FILE {}
#[allow(missing_copy_implementations)]
pub enum fpos_t {} pub enum fpos_t {}
} }
pub mod c99 { pub mod c99 {
...@@ -354,9 +351,7 @@ pub mod c99 { ...@@ -354,9 +351,7 @@ pub mod c99 {
pub type uint64_t = u64; pub type uint64_t = u64;
} }
pub mod posix88 { pub mod posix88 {
#[allow(missing_copy_implementations)]
pub enum DIR {} pub enum DIR {}
#[allow(missing_copy_implementations)]
pub enum dirent_t {} pub enum dirent_t {}
} }
pub mod posix01 {} pub mod posix01 {}
......
...@@ -383,7 +383,6 @@ pub trait SeedableRng<Seed>: Rng { ...@@ -383,7 +383,6 @@ pub trait SeedableRng<Seed>: Rng {
/// [1]: Marsaglia, George (July 2003). ["Xorshift /// [1]: Marsaglia, George (July 2003). ["Xorshift
/// RNGs"](http://www.jstatsoft.org/v08/i14/paper). *Journal of /// RNGs"](http://www.jstatsoft.org/v08/i14/paper). *Journal of
/// Statistical Software*. Vol. 8 (Issue 14). /// Statistical Software*. Vol. 8 (Issue 14).
#[allow(missing_copy_implementations)]
#[derive(Clone)] #[derive(Clone)]
pub struct XorShiftRng { pub struct XorShiftRng {
x: u32, x: u32,
......
...@@ -2038,7 +2038,7 @@ fn id_refers_to_this_method<'tcx>(tcx: &ty::ctxt<'tcx>, ...@@ -2038,7 +2038,7 @@ fn id_refers_to_this_method<'tcx>(tcx: &ty::ctxt<'tcx>,
declare_lint! { declare_lint! {
pub MISSING_COPY_IMPLEMENTATIONS, pub MISSING_COPY_IMPLEMENTATIONS,
Warn, Allow,
"detects potentially-forgotten implementations of `Copy`" "detects potentially-forgotten implementations of `Copy`"
} }
......
...@@ -224,7 +224,6 @@ pub struct RegionVarBindings<'a, 'tcx: 'a> { ...@@ -224,7 +224,6 @@ pub struct RegionVarBindings<'a, 'tcx: 'a> {
} }
#[derive(Debug)] #[derive(Debug)]
#[allow(missing_copy_implementations)]
pub struct RegionSnapshot { pub struct RegionSnapshot {
length: uint, length: uint,
skolemization_count: u32, skolemization_count: u32,
......
...@@ -59,7 +59,6 @@ pub fn impl_can_satisfy(infcx: &InferCtxt, ...@@ -59,7 +59,6 @@ pub fn impl_can_satisfy(infcx: &InferCtxt,
|o| selcx.evaluate_obligation(o)) |o| selcx.evaluate_obligation(o))
} }
#[allow(missing_copy_implementations)]
pub enum OrphanCheckErr<'tcx> { pub enum OrphanCheckErr<'tcx> {
NoLocalInputType, NoLocalInputType,
UncoveredTy(Ty<'tcx>), UncoveredTy(Ty<'tcx>),
......
...@@ -132,7 +132,6 @@ pub enum UnstableFeatures { ...@@ -132,7 +132,6 @@ pub enum UnstableFeatures {
} }
#[derive(Clone, PartialEq, Eq)] #[derive(Clone, PartialEq, Eq)]
#[allow(missing_copy_implementations)]
pub enum PrintRequest { pub enum PrintRequest {
FileNames, FileNames,
Sysroot, Sysroot,
...@@ -290,7 +289,6 @@ pub fn is_empty(&self) -> bool { ...@@ -290,7 +289,6 @@ pub fn is_empty(&self) -> bool {
$($opt:ident : $t:ty = ($init:expr, $parse:ident, $desc:expr)),* ,) => $($opt:ident : $t:ty = ($init:expr, $parse:ident, $desc:expr)),* ,) =>
( (
#[derive(Clone)] #[derive(Clone)]
#[allow(missing_copy_implementations)]
pub struct $struct_name { $(pub $opt: $t),* } pub struct $struct_name { $(pub $opt: $t),* }
pub fn $defaultfn() -> $struct_name { pub fn $defaultfn() -> $struct_name {
......
...@@ -46,7 +46,6 @@ pub fn DefIdSet() -> DefIdSet { FnvHashSet() } ...@@ -46,7 +46,6 @@ pub fn DefIdSet() -> DefIdSet { FnvHashSet() }
/// ///
/// This uses FNV hashing, as described here: /// This uses FNV hashing, as described here:
/// http://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function /// http://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function
#[allow(missing_copy_implementations)]
pub struct FnvHasher(u64); pub struct FnvHasher(u64);
impl Default for FnvHasher { impl Default for FnvHasher {
......
...@@ -46,7 +46,6 @@ pub struct SnapshotVec<D:SnapshotVecDelegate> { ...@@ -46,7 +46,6 @@ pub struct SnapshotVec<D:SnapshotVecDelegate> {
} }
// Snapshots are tokens that should be created/consumed linearly. // Snapshots are tokens that should be created/consumed linearly.
#[allow(missing_copy_implementations)]
pub struct Snapshot { pub struct Snapshot {
// Length of the undo log at the time the snapshot was taken. // Length of the undo log at the time the snapshot was taken.
length: uint, length: uint,
......
...@@ -464,7 +464,6 @@ pub fn opt_loan_path<'tcx>(cmt: &mc::cmt<'tcx>) -> Option<Rc<LoanPath<'tcx>>> { ...@@ -464,7 +464,6 @@ pub fn opt_loan_path<'tcx>(cmt: &mc::cmt<'tcx>) -> Option<Rc<LoanPath<'tcx>>> {
// Errors that can occur // Errors that can occur
#[derive(PartialEq)] #[derive(PartialEq)]
#[allow(missing_copy_implementations)]
pub enum bckerr_code { pub enum bckerr_code {
err_mutbl, err_mutbl,
err_out_of_scope(ty::Region, ty::Region), // superscope, subscope err_out_of_scope(ty::Region, ty::Region), // superscope, subscope
......
...@@ -430,73 +430,50 @@ pub enum DiagnosticKind { ...@@ -430,73 +430,50 @@ pub enum DiagnosticKind {
} }
// Opaque pointer types // Opaque pointer types
#[allow(missing_copy_implementations)]
pub enum Module_opaque {} pub enum Module_opaque {}
pub type ModuleRef = *mut Module_opaque; pub type ModuleRef = *mut Module_opaque;
#[allow(missing_copy_implementations)]
pub enum Context_opaque {} pub enum Context_opaque {}
pub type ContextRef = *mut Context_opaque; pub type ContextRef = *mut Context_opaque;
#[allow(missing_copy_implementations)]
pub enum Type_opaque {} pub enum Type_opaque {}
pub type TypeRef = *mut Type_opaque; pub type TypeRef = *mut Type_opaque;
#[allow(missing_copy_implementations)]
pub enum Value_opaque {} pub enum Value_opaque {}
pub type ValueRef = *mut Value_opaque; pub type ValueRef = *mut Value_opaque;
#[allow(missing_copy_implementations)]
pub enum Metadata_opaque {} pub enum Metadata_opaque {}
pub type MetadataRef = *mut Metadata_opaque; pub type MetadataRef = *mut Metadata_opaque;
#[allow(missing_copy_implementations)]
pub enum BasicBlock_opaque {} pub enum BasicBlock_opaque {}
pub type BasicBlockRef = *mut BasicBlock_opaque; pub type BasicBlockRef = *mut BasicBlock_opaque;
#[allow(missing_copy_implementations)]
pub enum Builder_opaque {} pub enum Builder_opaque {}
pub type BuilderRef = *mut Builder_opaque; pub type BuilderRef = *mut Builder_opaque;
#[allow(missing_copy_implementations)]
pub enum ExecutionEngine_opaque {} pub enum ExecutionEngine_opaque {}
pub type ExecutionEngineRef = *mut ExecutionEngine_opaque; pub type ExecutionEngineRef = *mut ExecutionEngine_opaque;
#[allow(missing_copy_implementations)]
pub enum RustJITMemoryManager_opaque {} pub enum RustJITMemoryManager_opaque {}
pub type RustJITMemoryManagerRef = *mut RustJITMemoryManager_opaque; pub type RustJITMemoryManagerRef = *mut RustJITMemoryManager_opaque;
#[allow(missing_copy_implementations)]
pub enum MemoryBuffer_opaque {} pub enum MemoryBuffer_opaque {}
pub type MemoryBufferRef = *mut MemoryBuffer_opaque; pub type MemoryBufferRef = *mut MemoryBuffer_opaque;
#[allow(missing_copy_implementations)]
pub enum PassManager_opaque {} pub enum PassManager_opaque {}
pub type PassManagerRef = *mut PassManager_opaque; pub type PassManagerRef = *mut PassManager_opaque;
#[allow(missing_copy_implementations)]
pub enum PassManagerBuilder_opaque {} pub enum PassManagerBuilder_opaque {}
pub type PassManagerBuilderRef = *mut PassManagerBuilder_opaque; pub type PassManagerBuilderRef = *mut PassManagerBuilder_opaque;
#[allow(missing_copy_implementations)]
pub enum Use_opaque {} pub enum Use_opaque {}
pub type UseRef = *mut Use_opaque; pub type UseRef = *mut Use_opaque;
#[allow(missing_copy_implementations)]
pub enum TargetData_opaque {} pub enum TargetData_opaque {}
pub type TargetDataRef = *mut TargetData_opaque; pub type TargetDataRef = *mut TargetData_opaque;
#[allow(missing_copy_implementations)]
pub enum ObjectFile_opaque {} pub enum ObjectFile_opaque {}
pub type ObjectFileRef = *mut ObjectFile_opaque; pub type ObjectFileRef = *mut ObjectFile_opaque;
#[allow(missing_copy_implementations)]
pub enum SectionIterator_opaque {} pub enum SectionIterator_opaque {}
pub type SectionIteratorRef = *mut SectionIterator_opaque; pub type SectionIteratorRef = *mut SectionIterator_opaque;
#[allow(missing_copy_implementations)]
pub enum Pass_opaque {} pub enum Pass_opaque {}
pub type PassRef = *mut Pass_opaque; pub type PassRef = *mut Pass_opaque;
#[allow(missing_copy_implementations)]
pub enum TargetMachine_opaque {} pub enum TargetMachine_opaque {}
pub type TargetMachineRef = *mut TargetMachine_opaque; pub type TargetMachineRef = *mut TargetMachine_opaque;
#[allow(missing_copy_implementations)]
pub enum Archive_opaque {} pub enum Archive_opaque {}
pub type ArchiveRef = *mut Archive_opaque; pub type ArchiveRef = *mut Archive_opaque;
#[allow(missing_copy_implementations)]
pub enum Twine_opaque {} pub enum Twine_opaque {}
pub type TwineRef = *mut Twine_opaque; pub type TwineRef = *mut Twine_opaque;
#[allow(missing_copy_implementations)]
pub enum DiagnosticInfo_opaque {} pub enum DiagnosticInfo_opaque {}
pub type DiagnosticInfoRef = *mut DiagnosticInfo_opaque; pub type DiagnosticInfoRef = *mut DiagnosticInfo_opaque;
#[allow(missing_copy_implementations)]
pub enum DebugLoc_opaque {} pub enum DebugLoc_opaque {}
pub type DebugLocRef = *mut DebugLoc_opaque; pub type DebugLocRef = *mut DebugLoc_opaque;
#[allow(missing_copy_implementations)]
pub enum SMDiagnostic_opaque {} pub enum SMDiagnostic_opaque {}
pub type SMDiagnosticRef = *mut SMDiagnostic_opaque; pub type SMDiagnosticRef = *mut SMDiagnostic_opaque;
...@@ -507,7 +484,6 @@ pub mod debuginfo { ...@@ -507,7 +484,6 @@ pub mod debuginfo {
pub use self::DIDescriptorFlags::*; pub use self::DIDescriptorFlags::*;
use super::{MetadataRef}; use super::{MetadataRef};
#[allow(missing_copy_implementations)]
pub enum DIBuilder_opaque {} pub enum DIBuilder_opaque {}
pub type DIBuilderRef = *mut DIBuilder_opaque; pub type DIBuilderRef = *mut DIBuilder_opaque;
...@@ -2209,7 +2185,6 @@ pub fn get_param(llfn: ValueRef, index: c_uint) -> ValueRef { ...@@ -2209,7 +2185,6 @@ pub fn get_param(llfn: ValueRef, index: c_uint) -> ValueRef {
} }
} }
#[allow(missing_copy_implementations)]
pub enum RustString_opaque {} pub enum RustString_opaque {}
pub type RustStringRef = *mut RustString_opaque; pub type RustStringRef = *mut RustString_opaque;
type RustStringRepr = *mut RefCell<Vec<u8>>; type RustStringRepr = *mut RefCell<Vec<u8>>;
......
...@@ -150,7 +150,6 @@ pub fn get_next_use(self) -> Option<Use> { ...@@ -150,7 +150,6 @@ pub fn get_next_use(self) -> Option<Use> {
} }
/// Iterator for the users of a value /// Iterator for the users of a value
#[allow(missing_copy_implementations)]
pub struct Users { pub struct Users {
next: Option<Use> next: Option<Use>
} }
......
...@@ -79,7 +79,6 @@ fn anon_regions(&self, ...@@ -79,7 +79,6 @@ fn anon_regions(&self,
// A scope in which any omitted region defaults to `default`. This is // A scope in which any omitted region defaults to `default`. This is
// used after the `->` in function signatures, but also for backwards // used after the `->` in function signatures, but also for backwards
// compatibility with object types. The latter use may go away. // compatibility with object types. The latter use may go away.
#[allow(missing_copy_implementations)]
pub struct SpecificRscope { pub struct SpecificRscope {
default: ty::Region default: ty::Region
} }
......
...@@ -1580,7 +1580,6 @@ fn extend<T: Iterator<Item=(K, V)>>(&mut self, iter: T) { ...@@ -1580,7 +1580,6 @@ fn extend<T: Iterator<Item=(K, V)>>(&mut self, iter: T) {
/// `Hasher`, but the hashers created by two different `RandomState` /// `Hasher`, but the hashers created by two different `RandomState`
/// instances are unlikely to produce the same result for the same values. /// instances are unlikely to produce the same result for the same values.
#[derive(Clone)] #[derive(Clone)]
#[allow(missing_copy_implementations)]
#[unstable(feature = "std_misc", #[unstable(feature = "std_misc",
reason = "hashing an hash maps may be altered")] reason = "hashing an hash maps may be altered")]
pub struct RandomState { pub struct RandomState {
...@@ -1622,7 +1621,6 @@ fn default() -> RandomState { ...@@ -1622,7 +1621,6 @@ fn default() -> RandomState {
/// This is the default hasher used in a `HashMap` to hash keys. Types do not /// This is the default hasher used in a `HashMap` to hash keys. Types do not
/// typically declare an ability to explicitly hash into this particular type, /// typically declare an ability to explicitly hash into this particular type,
/// but rather in a `H: hash::Writer` type parameter. /// but rather in a `H: hash::Writer` type parameter.
#[allow(missing_copy_implementations)]
#[unstable(feature = "std_misc", #[unstable(feature = "std_misc",
reason = "hashing an hash maps may be altered")] reason = "hashing an hash maps may be altered")]
pub struct Hasher { inner: SipHasher } pub struct Hasher { inner: SipHasher }
......
...@@ -22,7 +22,6 @@ ...@@ -22,7 +22,6 @@
use env; use env;
use str; use str;
#[allow(missing_copy_implementations)]
pub struct DynamicLibrary { pub struct DynamicLibrary {
handle: *mut u8 handle: *mut u8
} }
......
...@@ -759,7 +759,6 @@ pub fn page_size() -> uint { ...@@ -759,7 +759,6 @@ pub fn page_size() -> uint {
/// ///
/// The memory map is released (unmapped) when the destructor is run, so don't /// The memory map is released (unmapped) when the destructor is run, so don't
/// let it leave scope by accident if you want it to stick around. /// let it leave scope by accident if you want it to stick around.
#[allow(missing_copy_implementations)]
pub struct MemoryMap { pub struct MemoryMap {
data: *mut u8, data: *mut u8,
len: uint, len: uint,
......
...@@ -206,7 +206,6 @@ mod imp { ...@@ -206,7 +206,6 @@ mod imp {
/// - iOS: calls SecRandomCopyBytes as /dev/(u)random is sandboxed. /// - iOS: calls SecRandomCopyBytes as /dev/(u)random is sandboxed.
/// ///
/// This does not block. /// This does not block.
#[allow(missing_copy_implementations)]
pub struct OsRng { pub struct OsRng {
// dummy field to ensure that this struct cannot be constructed outside of this module // dummy field to ensure that this struct cannot be constructed outside of this module
_dummy: (), _dummy: (),
......
...@@ -390,13 +390,10 @@ pub mod eabi { ...@@ -390,13 +390,10 @@ pub mod eabi {
use libc::{c_void, c_int}; use libc::{c_void, c_int};
#[repr(C)] #[repr(C)]
#[allow(missing_copy_implementations)]
pub struct EXCEPTION_RECORD; pub struct EXCEPTION_RECORD;
#[repr(C)] #[repr(C)]
#[allow(missing_copy_implementations)]
pub struct CONTEXT; pub struct CONTEXT;
#[repr(C)] #[repr(C)]
#[allow(missing_copy_implementations)]
pub struct DISPATCHER_CONTEXT; pub struct DISPATCHER_CONTEXT;
#[repr(C)] #[repr(C)]
......
...@@ -88,7 +88,6 @@ pub fn default_sched_threads() -> uint { ...@@ -88,7 +88,6 @@ pub fn default_sched_threads() -> uint {
pub const ENFORCE_SANITY: bool = true || !cfg!(rtopt) || cfg!(rtdebug) || pub const ENFORCE_SANITY: bool = true || !cfg!(rtopt) || cfg!(rtdebug) ||
cfg!(rtassert); cfg!(rtassert);
#[allow(missing_copy_implementations)]
pub struct Stdio(libc::c_int); pub struct Stdio(libc::c_int);
#[allow(non_upper_case_globals)] #[allow(non_upper_case_globals)]
......
...@@ -46,7 +46,6 @@ struct BarrierState { ...@@ -46,7 +46,6 @@ struct BarrierState {
/// ///
/// Currently this opaque structure only has one method, `.is_leader()`. Only /// Currently this opaque structure only has one method, `.is_leader()`. Only
/// one thread will receive a result that will return `true` from this function. /// one thread will receive a result that will return `true` from this function.
#[allow(missing_copy_implementations)]
pub struct BarrierWaitResult(bool); pub struct BarrierWaitResult(bool);
impl Barrier { impl Barrier {
......
...@@ -42,7 +42,6 @@ pub fn get(&self) -> bool { ...@@ -42,7 +42,6 @@ pub fn get(&self) -> bool {
} }
} }
#[allow(missing_copy_implementations)]
pub struct Guard { pub struct Guard {
panicking: bool, panicking: bool,
} }
......
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
#![allow(unused_variables)] #![allow(unused_variables)]
#![allow(non_camel_case_types)] #![allow(non_camel_case_types)]
#![allow(non_upper_case_globals)] #![allow(non_upper_case_globals)]
#![allow(missing_copy_implementations)]
#![deny(dead_code)] #![deny(dead_code)]
#![feature(core)] #![feature(core)]
......
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
// injected intrinsics by the compiler. // injected intrinsics by the compiler.
#![deny(missing_docs)] #![deny(missing_docs)]
#![allow(dead_code)] #![allow(dead_code)]
#![allow(missing_copy_implementations)]
//! Some garbage docs for the crate here //! Some garbage docs for the crate here
#![doc="More garbage"] #![doc="More garbage"]
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
// compile-flags: --crate-type lib // compile-flags: --crate-type lib
#![deny(missing_debug_implementations)] #![deny(missing_debug_implementations)]
#![allow(unused, missing_copy_implementations)] #![allow(unused)]
use std::fmt; use std::fmt;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册