diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2018-02-23 00:54:30 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2018-02-23 00:54:30 +0300 |
| commit | 98eb4ddbceb5bed5e83a9b5e91c173b190532333 (patch) | |
| tree | d1a2e6456b3594daed116e1f625c9fc01cef2f5b /src | |
| parent | b1f8e6fb06d7362eeb2065347a7db94e76b1cb2f (diff) | |
| download | rust-98eb4ddbceb5bed5e83a9b5e91c173b190532333.tar.gz rust-98eb4ddbceb5bed5e83a9b5e91c173b190532333.zip | |
Fix parsing of extern paths in types and poly-traits
Diffstat (limited to 'src')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 2 | ||||
| -rw-r--r-- | src/test/run-pass/rfc-2126-extern-absolute-paths/auxiliary/xcrate.rs | 4 | ||||
| -rw-r--r-- | src/test/run-pass/rfc-2126-extern-absolute-paths/extern.rs | 4 |
3 files changed, 8 insertions, 2 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 7915109ce3a..058d6ab0762 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -1321,7 +1321,7 @@ impl<'a> Parser<'a> { pub fn token_is_bare_fn_keyword(&mut self) -> bool { self.check_keyword(keywords::Fn) || self.check_keyword(keywords::Unsafe) || - self.check_keyword(keywords::Extern) + self.check_keyword(keywords::Extern) && self.is_extern_non_path() } fn eat_label(&mut self) -> Option<Label> { diff --git a/src/test/run-pass/rfc-2126-extern-absolute-paths/auxiliary/xcrate.rs b/src/test/run-pass/rfc-2126-extern-absolute-paths/auxiliary/xcrate.rs index c3da4a51872..a5214d796cd 100644 --- a/src/test/run-pass/rfc-2126-extern-absolute-paths/auxiliary/xcrate.rs +++ b/src/test/run-pass/rfc-2126-extern-absolute-paths/auxiliary/xcrate.rs @@ -8,8 +8,10 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#[derive(Debug)] +#[derive(Debug, PartialEq)] pub struct S; #[derive(Debug)] pub struct Z; + +pub trait Tr<'a> {} diff --git a/src/test/run-pass/rfc-2126-extern-absolute-paths/extern.rs b/src/test/run-pass/rfc-2126-extern-absolute-paths/extern.rs index 52b52b23c87..15b754e1fe6 100644 --- a/src/test/run-pass/rfc-2126-extern-absolute-paths/extern.rs +++ b/src/test/run-pass/rfc-2126-extern-absolute-paths/extern.rs @@ -14,6 +14,9 @@ use extern::xcrate::Z; +type A = extern::xcrate::S; +type B = for<'a> extern::xcrate::Tr<'a>; + fn f() { use extern::xcrate; use extern::xcrate as ycrate; @@ -28,4 +31,5 @@ fn main() { assert_eq!(format!("{:?}", s), "S"); let z = Z; assert_eq!(format!("{:?}", z), "Z"); + assert_eq!(A {}, extern::xcrate::S {}); } |
