Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
d1e337bd
R
Rust
项目概览
int
/
Rust
11 个月 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rust
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d1e337bd
编写于
10月 24, 2018
作者:
V
Vadim Petrochenkov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Prohibit macro-expanded `extern crate` items shadowing crates passed with `--extern`
上级
7976aa32
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
51 addition
and
5 deletion
+51
-5
src/librustc_resolve/build_reduced_graph.rs
src/librustc_resolve/build_reduced_graph.rs
+15
-2
src/test/ui/feature-gates/feature-gate-extern_crate_item_prelude.rs
...i/feature-gates/feature-gate-extern_crate_item_prelude.rs
+7
-0
src/test/ui/feature-gates/feature-gate-extern_crate_item_prelude.stderr
...ature-gates/feature-gate-extern_crate_item_prelude.stderr
+9
-1
src/test/ui/imports/extern-prelude-extern-crate-fail.rs
src/test/ui/imports/extern-prelude-extern-crate-fail.rs
+9
-0
src/test/ui/imports/extern-prelude-extern-crate-fail.stderr
src/test/ui/imports/extern-prelude-extern-crate-fail.stderr
+11
-2
未找到文件。
src/librustc_resolve/build_reduced_graph.rs
浏览文件 @
d1e337bd
...
...
@@ -446,10 +446,23 @@ fn build_reduced_graph_for_item(&mut self, item: &Item, expansion: Mark) {
let
binding
=
(
module
,
ty
::
Visibility
::
Public
,
sp
,
expansion
)
.to_name_binding
(
self
.arenas
);
if
ptr
::
eq
(
self
.current_module
,
self
.graph_root
)
{
self
.extern_prelude
.entry
(
ident
.modern
())
.or_insert
(
ExternPreludeEntry
{
if
let
Some
(
entry
)
=
self
.extern_prelude
.get
(
&
ident
.modern
())
{
if
expansion
!=
Mark
::
root
()
&&
orig_name
.is_some
()
&&
entry
.extern_crate_item
.is_none
()
{
self
.session
.span_err
(
item
.span
,
"macro-expanded `extern crate` items
\
cannot shadow names passed with
\
`--extern`"
);
}
}
let
entry
=
self
.extern_prelude
.entry
(
ident
.modern
())
.or_insert
(
ExternPreludeEntry
{
extern_crate_item
:
None
,
introduced_by_item
:
true
,
})
.extern_crate_item
=
Some
(
binding
);
});
entry
.extern_crate_item
=
Some
(
binding
);
if
orig_name
.is_some
()
{
entry
.introduced_by_item
=
true
;
}
}
let
directive
=
self
.arenas
.alloc_import_directive
(
ImportDirective
{
root_id
:
item
.id
,
...
...
src/test/ui/feature-gates/feature-gate-extern_crate_item_prelude.rs
浏览文件 @
d1e337bd
...
...
@@ -36,4 +36,11 @@ mod import_absolute {
//~^ ERROR use of extern prelude names introduced with `extern crate` items is unstable
}
extern
crate
alloc
as
core
;
mod
unrelated_crate_renamed
{
type
A
=
core
::
boxed
::
Box
<
u8
>
;
//~^ ERROR use of extern prelude names introduced with `extern crate` items is unstable
}
fn
main
()
{}
src/test/ui/feature-gates/feature-gate-extern_crate_item_prelude.stderr
浏览文件 @
d1e337bd
...
...
@@ -62,6 +62,14 @@ LL | type A = ::alloc::boxed::Box<u8>;
|
= help: add #![feature(extern_crate_item_prelude)] to the crate attributes to enable
error: aborting due to 8 previous errors
error[E0658]: use of extern prelude names introduced with `extern crate` items is unstable (see issue #54658)
--> $DIR/feature-gate-extern_crate_item_prelude.rs:42:14
|
LL | type A = core::boxed::Box<u8>;
| ^^^^
|
= help: add #![feature(extern_crate_item_prelude)] to the crate attributes to enable
error: aborting due to 9 previous errors
For more information about this error, try `rustc --explain E0658`.
src/test/ui/imports/extern-prelude-extern-crate-fail.rs
浏览文件 @
d1e337bd
// aux-build:two_macros.rs
// compile-flags:--extern non_existent
mod
n
{
extern
crate
two_macros
;
...
...
@@ -10,4 +11,12 @@ fn check() {
}
}
macro_rules!
define_std_as_non_existent
{
()
=>
{
extern
crate
std
as
non_existent
;
//~^ ERROR `extern crate` items cannot shadow names passed with `--extern`
}
}
define_std_as_non_existent!
();
fn
main
()
{}
src/test/ui/imports/extern-prelude-extern-crate-fail.stderr
浏览文件 @
d1e337bd
error: macro-expanded `extern crate` items cannot shadow names passed with `--extern`
--> $DIR/extern-prelude-extern-crate-fail.rs:16:9
|
LL | extern crate std as non_existent;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
LL | define_std_as_non_existent!();
| ------------------------------ in this macro invocation
error[E0433]: failed to resolve. Use of undeclared type or module `two_macros`
--> $DIR/extern-prelude-extern-crate-fail.rs:
9
:9
--> $DIR/extern-prelude-extern-crate-fail.rs:
10
:9
|
LL | two_macros::m!(); //~ ERROR failed to resolve. Use of undeclared type or module `two_macros`
| ^^^^^^^^^^ Use of undeclared type or module `two_macros`
error: aborting due to
previous error
error: aborting due to
2 previous errors
For more information about this error, try `rustc --explain E0433`.
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录