diff options
| author | Ariel Ben-Yehuda <arielb1@mail.tau.ac.il> | 2015-07-04 15:30:00 +0300 |
|---|---|---|
| committer | Ariel Ben-Yehuda <arielb1@mail.tau.ac.il> | 2015-07-04 16:17:26 +0300 |
| commit | 90fcf261f2b9c174cf800a5ac63ebf23d022fe37 (patch) | |
| tree | 8d57efeb4eb1843d5b9f9d4a581c93b25040a1a8 | |
| parent | 0dc08240ea755679e3daec3832a04b22a8fc90bf (diff) | |
| download | rust-90fcf261f2b9c174cf800a5ac63ebf23d022fe37.tar.gz rust-90fcf261f2b9c174cf800a5ac63ebf23d022fe37.zip | |
Remove outdated errors for mutating strings
| -rw-r--r-- | src/librustc/diagnostics.rs | 4 | ||||
| -rw-r--r-- | src/librustc/middle/effect.rs | 26 | ||||
| -rw-r--r-- | src/test/compile-fail/str-mut-idx-2.rs | 16 | ||||
| -rw-r--r-- | src/test/compile-fail/str-mut-idx.rs | 22 |
4 files changed, 40 insertions, 28 deletions
diff --git a/src/librustc/diagnostics.rs b/src/librustc/diagnostics.rs index 38df0284371..eb504d03209 100644 --- a/src/librustc/diagnostics.rs +++ b/src/librustc/diagnostics.rs @@ -1205,8 +1205,8 @@ register_diagnostics! { E0017, E0022, E0038, - E0134, - E0135, +// E0134, +// E0135, E0136, E0138, E0139, diff --git a/src/librustc/middle/effect.rs b/src/librustc/middle/effect.rs index 8084c2b0c39..1ee557eb8cc 100644 --- a/src/librustc/middle/effect.rs +++ b/src/librustc/middle/effect.rs @@ -59,26 +59,6 @@ impl<'a, 'tcx> EffectCheckVisitor<'a, 'tcx> { UnsafeFn => {} } } - - fn check_str_index(&mut self, e: &ast::Expr) { - let base_type = match e.node { - ast::ExprIndex(ref base, _) => self.tcx.node_id_to_type(base.id), - _ => return - }; - debug!("effect: checking index with base type {:?}", - base_type); - match base_type.sty { - ty::TyBox(ty) | ty::TyRef(_, ty::mt{ty, ..}) => if ty::TyStr == ty.sty { - span_err!(self.tcx.sess, e.span, E0134, - "modification of string types is not allowed"); - }, - ty::TyStr => { - span_err!(self.tcx.sess, e.span, E0135, - "modification of string types is not allowed"); - } - _ => {} - } - } } impl<'a, 'tcx, 'v> Visitor<'v> for EffectCheckVisitor<'a, 'tcx> { @@ -164,12 +144,6 @@ impl<'a, 'tcx, 'v> Visitor<'v> for EffectCheckVisitor<'a, 'tcx> { self.require_unsafe(expr.span, "dereference of raw pointer") } } - ast::ExprAssign(ref base, _) | ast::ExprAssignOp(_, ref base, _) => { - self.check_str_index(&**base); - } - ast::ExprAddrOf(ast::MutMutable, ref base) => { - self.check_str_index(&**base); - } ast::ExprInlineAsm(..) => { self.require_unsafe(expr.span, "use of inline assembly"); } diff --git a/src/test/compile-fail/str-mut-idx-2.rs b/src/test/compile-fail/str-mut-idx-2.rs new file mode 100644 index 00000000000..aa05d7d5c54 --- /dev/null +++ b/src/test/compile-fail/str-mut-idx-2.rs @@ -0,0 +1,16 @@ +// Copyright 2015 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +fn mutate(mut s: &mut str) { + let _s: &mut str = &mut s[1..2]; + //~^ ERROR cannot borrow immutable indexed content as mutable +} + +pub fn main() {} diff --git a/src/test/compile-fail/str-mut-idx.rs b/src/test/compile-fail/str-mut-idx.rs new file mode 100644 index 00000000000..88e90c8244d --- /dev/null +++ b/src/test/compile-fail/str-mut-idx.rs @@ -0,0 +1,22 @@ +// Copyright 2015 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +fn bot<T>() -> T { loop {} } + +fn mutate(s: &mut str) { + s[1..2] = bot(); + //~^ ERROR `core::marker::Sized` is not implemented for the type `str` + //~^^ ERROR `core::marker::Sized` is not implemented for the type `str` + s[1usize] = bot(); + //~^ ERROR `core::ops::Index<usize>` is not implemented for the type `str` + //~^^ ERROR `core::ops::Index<usize>` is not implemented for the type `str` +} + +pub fn main() {} |
