summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_error_codes/src/error_codes/E0303.md
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rustc_error_codes/src/error_codes/E0303.md')
-rw-r--r--compiler/rustc_error_codes/src/error_codes/E0303.md38
1 files changed, 38 insertions, 0 deletions
diff --git a/compiler/rustc_error_codes/src/error_codes/E0303.md b/compiler/rustc_error_codes/src/error_codes/E0303.md
new file mode 100644
index 000000000..459906047
--- /dev/null
+++ b/compiler/rustc_error_codes/src/error_codes/E0303.md
@@ -0,0 +1,38 @@
+#### Note: this error code is no longer emitted by the compiler.
+
+Sub-bindings, e.g. `ref x @ Some(ref y)` are now allowed under
+`#![feature(bindings_after_at)]` and checked to make sure that
+memory safety is upheld.
+
+--------------
+
+In certain cases it is possible for sub-bindings to violate memory safety.
+Updates to the borrow checker in a future version of Rust may remove this
+restriction, but for now patterns must be rewritten without sub-bindings.
+
+Before:
+
+```compile_fail
+match Some("hi".to_string()) {
+ ref op_string_ref @ Some(s) => {},
+ None => {},
+}
+```
+
+After:
+
+```
+match Some("hi".to_string()) {
+ Some(ref s) => {
+ let op_string_ref = &Some(s);
+ // ...
+ },
+ None => {},
+}
+```
+
+The `op_string_ref` binding has type `&Option<&String>` in both cases.
+
+See also [Issue 14587][issue-14587].
+
+[issue-14587]: https://github.com/rust-lang/rust/issues/14587