Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
dc9128ff
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,发现更多精彩内容 >>
提交
dc9128ff
编写于
4月 05, 2018
作者:
S
Shotaro Yamada
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix ICE with `main`'s return type containing lifetimes
上级
c75d5e24
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
78 addition
and
8 deletion
+78
-8
src/librustc_mir/monomorphize/collector.rs
src/librustc_mir/monomorphize/collector.rs
+4
-4
src/librustc_trans/base.rs
src/librustc_trans/base.rs
+8
-4
src/test/run-fail/rfc-1937-termination-trait/termination-trait-for-box-dyn-error.rs
...-termination-trait/termination-trait-for-box-dyn-error.rs
+21
-0
src/test/run-fail/rfc-1937-termination-trait/termination-trait-for-str.rs
...l/rfc-1937-termination-trait/termination-trait-for-str.rs
+15
-0
src/test/run-pass/rfc-1937-termination-trait/termination-trait-for-box-dyn-error.rs
...-termination-trait/termination-trait-for-box-dyn-error.rs
+17
-0
src/test/run-pass/rfc-1937-termination-trait/termination-trait-for-str.rs
...s/rfc-1937-termination-trait/termination-trait-for-str.rs
+13
-0
未找到文件。
src/librustc_mir/monomorphize/collector.rs
浏览文件 @
dc9128ff
...
...
@@ -212,8 +212,6 @@
use
rustc_data_structures
::
bitvec
::
BitVector
;
use
std
::
iter
;
#[derive(PartialEq,
Eq,
Hash,
Clone,
Copy,
Debug)]
pub
enum
MonoItemCollectionMode
{
Eager
,
...
...
@@ -1030,13 +1028,15 @@ fn push_extra_entry_roots(&mut self) {
// late-bound regions, since late-bound
// regions must appear in the argument
// listing.
let
main_ret_ty
=
main_ret_ty
.no_late_bound_regions
()
.unwrap
();
let
main_ret_ty
=
self
.tcx
.erase_regions
(
&
main_ret_ty
.no_late_bound_regions
()
.unwrap
(),
);
let
start_instance
=
Instance
::
resolve
(
self
.tcx
,
ty
::
ParamEnv
::
reveal_all
(),
start_def_id
,
self
.tcx
.
mk_substs
(
iter
::
once
(
Kind
::
from
(
main_ret_ty
))
)
self
.tcx
.
intern_substs
(
&
[
Kind
::
from
(
main_ret_ty
)]
)
)
.unwrap
();
self
.output
.push
(
create_fn_mono_item
(
start_instance
));
...
...
src/librustc_trans/base.rs
浏览文件 @
dc9128ff
...
...
@@ -82,7 +82,6 @@
use
std
::
sync
::
Arc
;
use
std
::
time
::{
Instant
,
Duration
};
use
std
::{
i32
,
usize
};
use
std
::
iter
;
use
std
::
sync
::
mpsc
;
use
syntax_pos
::
Span
;
use
syntax_pos
::
symbol
::
InternedString
;
...
...
@@ -553,7 +552,9 @@ fn create_entry_fn<'cx>(cx: &'cx CodegenCx,
// late-bound regions, since late-bound
// regions must appear in the argument
// listing.
let
main_ret_ty
=
main_ret_ty
.no_late_bound_regions
()
.unwrap
();
let
main_ret_ty
=
cx
.tcx
.erase_regions
(
&
main_ret_ty
.no_late_bound_regions
()
.unwrap
(),
);
if
declare
::
get_defined_value
(
cx
,
"main"
)
.is_some
()
{
// FIXME: We should be smart and show a better diagnostic here.
...
...
@@ -580,8 +581,11 @@ fn create_entry_fn<'cx>(cx: &'cx CodegenCx,
let
(
start_fn
,
args
)
=
if
use_start_lang_item
{
let
start_def_id
=
cx
.tcx
.require_lang_item
(
StartFnLangItem
);
let
start_fn
=
callee
::
resolve_and_get_fn
(
cx
,
start_def_id
,
cx
.tcx
.mk_substs
(
iter
::
once
(
Kind
::
from
(
main_ret_ty
))));
let
start_fn
=
callee
::
resolve_and_get_fn
(
cx
,
start_def_id
,
cx
.tcx
.intern_substs
(
&
[
Kind
::
from
(
main_ret_ty
)]),
);
(
start_fn
,
vec!
[
bx
.pointercast
(
rust_main
,
Type
::
i8p
(
cx
)
.ptr_to
()),
arg_argc
,
arg_argv
])
}
else
{
...
...
src/test/run-fail/rfc-1937-termination-trait/termination-trait-for-box-dyn-error.rs
0 → 100644
浏览文件 @
dc9128ff
// Copyright 2018 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.
// must-compile-successfully
// failure-status: 1
#![feature(dyn_trait)]
use
std
::
error
::
Error
;
use
std
::
io
;
fn
main
()
->
Result
<
(),
Box
<
dyn
Error
>>
{
Err
(
Box
::
new
(
io
::
Error
::
new
(
io
::
ErrorKind
::
Other
,
"returned Box<dyn Error> from main()"
)))
}
src/test/run-fail/rfc-1937-termination-trait/termination-trait-for-str.rs
0 → 100644
浏览文件 @
dc9128ff
// Copyright 2018 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.
// error-pattern: An error message for you
fn
main
()
->
Result
<
(),
&
'static
str
>
{
Err
(
"An error message for you"
)
}
src/test/run-pass/rfc-1937-termination-trait/termination-trait-for-box-dyn-error.rs
0 → 100644
浏览文件 @
dc9128ff
// Copyright 2018 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.
#![feature(dyn_trait)]
use
std
::
error
::
Error
;
fn
main
()
->
Result
<
(),
Box
<
dyn
Error
>>
{
Ok
(())
}
src/test/run-pass/rfc-1937-termination-trait/termination-trait-for-str.rs
0 → 100644
浏览文件 @
dc9128ff
// Copyright 2018 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.
fn
main
()
->
Result
<
(),
&
'static
str
>
{
Ok
(())
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录