Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
1fe6160c
R
Rust
项目概览
int
/
Rust
大约 1 年 前同步成功
通知
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,发现更多精彩内容 >>
提交
1fe6160c
编写于
7月 09, 2019
作者:
S
Shotaro Yamada
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix ICE with `impl Trait` in type bounds
上级
3620456f
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
18 addition
and
3 deletion
+18
-3
src/librustdoc/clean/mod.rs
src/librustdoc/clean/mod.rs
+10
-3
src/test/rustdoc/inline_cross/auxiliary/impl_trait_aux.rs
src/test/rustdoc/inline_cross/auxiliary/impl_trait_aux.rs
+2
-0
src/test/rustdoc/inline_cross/impl_trait.rs
src/test/rustdoc/inline_cross/impl_trait.rs
+6
-0
未找到文件。
src/librustdoc/clean/mod.rs
浏览文件 @
1fe6160c
...
...
@@ -1725,7 +1725,7 @@ fn clean(&self, cx: &DocContext<'_>) -> Generics {
let
mut
impl_trait_proj
=
FxHashMap
::
<
u32
,
Vec
<
(
DefId
,
String
,
Ty
<
'tcx
>
)
>>
::
default
();
let
mut
where_predicates
=
preds
.predicates
.iter
()
let
where_predicates
=
preds
.predicates
.iter
()
.flat_map
(|(
p
,
_
)|
{
let
mut
projection
=
None
;
let
param_idx
=
(||
{
...
...
@@ -1747,10 +1747,10 @@ fn clean(&self, cx: &DocContext<'_>) -> Generics {
None
})();
let
p
=
p
.clean
(
cx
)
?
;
if
let
Some
(
param_idx
)
=
param_idx
{
if
let
Some
(
b
)
=
impl_trait
.get_mut
(
&
param_idx
.into
())
{
let
p
=
p
.clean
(
cx
)
?
;
b
.extend
(
p
.get_bounds
()
.into_iter
()
...
...
@@ -1805,6 +1805,13 @@ fn clean(&self, cx: &DocContext<'_>) -> Generics {
cx
.impl_trait_bounds
.borrow_mut
()
.insert
(
param
,
bounds
);
}
// Now that `cx.impl_trait_bounds` is populated, we can process
// remaining predicates which could contain `impl Trait`.
let
mut
where_predicates
=
where_predicates
.into_iter
()
.flat_map
(|
p
|
p
.clean
(
cx
))
.collect
::
<
Vec
<
_
>>
();
// Type parameters and have a Sized bound by default unless removed with
// ?Sized. Scan through the predicates and mark any type parameter with
// a Sized bound, removing the bounds as we find them.
...
...
src/test/rustdoc/inline_cross/auxiliary/impl_trait_aux.rs
浏览文件 @
1fe6160c
...
...
@@ -9,6 +9,8 @@ pub fn func2<T>(
pub
fn
func3
(
_
x
:
impl
Iterator
<
Item
=
impl
Iterator
<
Item
=
u8
>>
+
Clone
)
{}
pub
fn
func4
<
T
:
Iterator
<
Item
=
impl
Clone
>>
(
_
x
:
T
)
{}
pub
struct
Foo
;
impl
Foo
{
...
...
src/test/rustdoc/inline_cross/impl_trait.rs
浏览文件 @
1fe6160c
...
...
@@ -20,6 +20,12 @@
// @!has - '//pre[@class="rust fn"]' 'where'
pub
use
impl_trait_aux
::
func3
;
// @has impl_trait/fn.func4.html
// @has - '//pre[@class="rust fn"]' "func4<T>("
// @has - '//pre[@class="rust fn"]' "T: Iterator<Item = impl Clone>,"
pub
use
impl_trait_aux
::
func4
;
// @has impl_trait/struct.Foo.html
// @has - '//code[@id="method.v"]' "pub fn method<'a>(_x: impl Clone + Into<Vec<u8>> + 'a)"
// @!has - '//code[@id="method.v"]' 'where'
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录