about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorJakub Wieczorek <jakub@jakub.cc>2014-07-21 18:47:24 +0200
committerJakub Wieczorek <jakub@jakub.cc>2014-07-23 22:15:11 +0200
commitad30579ef8a40695f30d348331a0d919be2f52ee (patch)
tree9201ae120783d52cd095c5648e3b4b22e5d8f732 /src
parent826b8358134f909f0b8aeb4c1d67a3fdda50b4b0 (diff)
downloadrust-ad30579ef8a40695f30d348331a0d919be2f52ee.tar.gz
rust-ad30579ef8a40695f30d348331a0d919be2f52ee.zip
Parser: Global single-segment paths should be represented as PatEnum
Fixed #15774.
Diffstat (limited to 'src')
-rw-r--r--src/libsyntax/parse/parser.rs2
-rw-r--r--src/test/run-pass/issue-15774.rs32
2 files changed, 33 insertions, 1 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 73de47e7b12..bfc01afd457 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -3101,7 +3101,7 @@ impl<'a> Parser<'a> {
                             }
                           },
                           _ => {
-                              if enum_path.segments.len() == 1 {
+                              if !enum_path.global && enum_path.segments.len() == 1 {
                                   // it could still be either an enum
                                   // or an identifier pattern, resolve
                                   // will sort it out:
diff --git a/src/test/run-pass/issue-15774.rs b/src/test/run-pass/issue-15774.rs
new file mode 100644
index 00000000000..0a70c3e1bcd
--- /dev/null
+++ b/src/test/run-pass/issue-15774.rs
@@ -0,0 +1,32 @@
+// Copyright 2014 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.
+
+#![deny(warnings)]
+#![allow(unused_imports)]
+
+enum Foo { A }
+mod bar {
+    pub fn normal(x: ::Foo) {
+        use A;
+        match x {
+            A => {}
+        }
+    }
+    pub fn wrong(x: ::Foo) {
+        match x {
+            ::A => {}
+        }
+    }
+}
+
+pub fn main() {
+    bar::normal(A);
+    bar::wrong(A);
+}