summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeffrey Seyfried <jeffrey.seyfried@gmail.com>2017-03-16 20:39:41 +0000
committerJeffrey Seyfried <jeffrey.seyfried@gmail.com>2017-03-17 22:20:41 +0000
commitcb96adea15f15b13adca6f13b285a4fff33f5be3 (patch)
tree5d96c03f0c3fb2c8080ff65fe73476f512543b96 /src
parentd9cf601ae822d07412a79aeedeabb802aa94cb34 (diff)
downloadrust-cb96adea15f15b13adca6f13b285a4fff33f5be3.tar.gz
Fix regression when `include!()`ing a `macro_rules!` containing a `$crate::` path.
Diffstat (limited to 'src')
-rw-r--r--src/librustc_resolve/build_reduced_graph.rs5
-rw-r--r--src/test/run-pass/auxiliary/issue_40469.rs11
-rw-r--r--src/test/run-pass/issue-40469.rs18
3 files changed, 33 insertions, 1 deletions
diff --git a/src/librustc_resolve/build_reduced_graph.rs b/src/librustc_resolve/build_reduced_graph.rs
index 03c61067d64..be905a9d0f9 100644
--- a/src/librustc_resolve/build_reduced_graph.rs
+++ b/src/librustc_resolve/build_reduced_graph.rs
@@ -23,7 +23,7 @@ use {resolve_error, resolve_struct_error, ResolutionError};
use rustc::middle::cstore::LoadedMacro;
use rustc::hir::def::*;
-use rustc::hir::def_id::{CrateNum, CRATE_DEF_INDEX, DefId};
+use rustc::hir::def_id::{CrateNum, BUILTIN_MACROS_CRATE, CRATE_DEF_INDEX, DefId};
use rustc::ty;
use std::cell::Cell;
@@ -496,6 +496,9 @@ impl<'a> Resolver<'a> {
let def_id = self.macro_defs[&expansion];
if let Some(id) = self.definitions.as_local_node_id(def_id) {
self.local_macro_def_scopes[&id]
+ } else if def_id.krate == BUILTIN_MACROS_CRATE {
+ // FIXME(jseyfried): This happens when `include!()`ing a `$crate::` path, c.f, #40469.
+ self.graph_root
} else {
let module_def_id = ty::DefIdTree::parent(&*self, def_id).unwrap();
self.get_extern_crate_root(module_def_id.krate)
diff --git a/src/test/run-pass/auxiliary/issue_40469.rs b/src/test/run-pass/auxiliary/issue_40469.rs
new file mode 100644
index 00000000000..4970bba431a
--- /dev/null
+++ b/src/test/run-pass/auxiliary/issue_40469.rs
@@ -0,0 +1,11 @@
+// Copyright 2017 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.
+
+macro_rules! m { () => { $crate::main(); } }
diff --git a/src/test/run-pass/issue-40469.rs b/src/test/run-pass/issue-40469.rs
new file mode 100644
index 00000000000..30055e532cd
--- /dev/null
+++ b/src/test/run-pass/issue-40469.rs
@@ -0,0 +1,18 @@
+// Copyright 2017 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.
+
+// ignore-pretty issue #37195
+
+#![allow(dead_code)]
+
+include!("auxiliary/issue_40469.rs");
+fn f() { m!(); }
+
+fn main() {}