about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAriel Ben-Yehuda <arielb1@mail.tau.ac.il>2015-07-04 15:30:00 +0300
committerAriel Ben-Yehuda <arielb1@mail.tau.ac.il>2015-07-04 16:17:26 +0300
commit90fcf261f2b9c174cf800a5ac63ebf23d022fe37 (patch)
tree8d57efeb4eb1843d5b9f9d4a581c93b25040a1a8
parent0dc08240ea755679e3daec3832a04b22a8fc90bf (diff)
downloadrust-90fcf261f2b9c174cf800a5ac63ebf23d022fe37.tar.gz
rust-90fcf261f2b9c174cf800a5ac63ebf23d022fe37.zip
Remove outdated errors for mutating strings
-rw-r--r--src/librustc/diagnostics.rs4
-rw-r--r--src/librustc/middle/effect.rs26
-rw-r--r--src/test/compile-fail/str-mut-idx-2.rs16
-rw-r--r--src/test/compile-fail/str-mut-idx.rs22
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() {}