]> git.lizzy.rs Git - rust.git/blobdiff - src/librustc/middle/resolve.rs
Add support for patterns referencing non-trivial statics
[rust.git] / src / librustc / middle / resolve.rs
index f1e6db1cab1731531413ee646e2d9998ef9cb177..cd736197a24cd317849066a8ed411d94281d5602 100644 (file)
@@ -4398,7 +4398,7 @@ fn resolve_pattern(&mut self,
                     let ident = path1.node;
                     let renamed = mtwt::resolve(ident);
 
-                    match self.resolve_bare_identifier_pattern(ident) {
+                    match self.resolve_bare_identifier_pattern(ident, pattern.span) {
                         FoundStructOrEnumVariant(def, lp)
                                 if mode == RefutableMode => {
                             debug!("(resolving pattern) resolving `{}` to \
@@ -4562,7 +4562,7 @@ struct or enum variant",
         });
     }
 
-    fn resolve_bare_identifier_pattern(&mut self, name: Ident)
+    fn resolve_bare_identifier_pattern(&mut self, name: Ident, span: Span)
                                        -> BareIdentifierPatternResolution {
         let module = self.current_module.clone();
         match self.resolve_item_in_lexical_scope(module,
@@ -4589,6 +4589,11 @@ fn resolve_bare_identifier_pattern(&mut self, name: Ident)
                             def @ DefStatic(_, false) => {
                                 return FoundConst(def, LastMod(AllPublic));
                             }
+                            DefStatic(_, true) => {
+                                self.resolve_error(span,
+                                    "mutable static variables cannot be referenced in a pattern");
+                                return BareIdentifierPatternUnresolved;
+                            }
                             _ => {
                                 return BareIdentifierPatternUnresolved;
                             }