Commit graph

800 commits

Author SHA1 Message Date
John Kåre Alsaker
38e613c4eb Update krate_attrs and get_module 2020-03-14 22:52:29 +01:00
bors
be055d96c4 Auto merge of #67502 - Mark-Simulacrum:opt-catch, r=Mark-Simulacrum
Optimize catch_unwind to match C++ try/catch

This refactors the implementation of catching unwinds to allow LLVM to inline the "try" closure directly into the happy path, avoiding indirection. This means that the catch_unwind implementation is (after this PR) zero-cost unless a panic is thrown.

https://rust.godbolt.org/z/cZcUSB is an example of the current codegen in a simple case. Notably, the codegen is *exactly the same* if `-Cpanic=abort` is passed, which is clearly not great.

This PR, on the other hand, generates the following assembly:

```asm
# -Cpanic=unwind:
	push   rbx
	mov    ebx,0x2a
	call   QWORD PTR [rip+0x1c53c]        # <happy>
	mov    eax,ebx
	pop    rbx
	ret
	mov    rdi,rax
	call   QWORD PTR [rip+0x1c537]        # cleanup function call
	call   QWORD PTR [rip+0x1c539]        # <unfortunate>
	mov    ebx,0xd
	mov    eax,ebx
	pop    rbx
	ret

# -Cpanic=abort:
	push   rax
	call   QWORD PTR [rip+0x20a1]        # <happy>
	mov    eax,0x2a
	pop    rcx
	ret
```

Fixes #64224, and resolves #64222.
2020-03-13 22:43:06 +00:00
Yuki Okushi
77263db96f
Rollup merge of #69954 - RalfJung:panic_if-assert, r=Centril,eddyb
rename panic_if_ intrinsics to assert_

[Suggested by @eddyb](https://github.com/rust-lang/miri/issues/1222#issuecomment-598087523)
2020-03-14 04:03:31 +09:00
Ralf Jung
f61fb53af4 adjust enum naming 2020-03-13 08:43:27 +01:00
Ralf Jung
f32cccc05e rename panic_if_ intrinsics to assert_ 2020-03-12 19:38:09 +01:00
Mazdak Farrokhzad
39c6405097
Rollup merge of #69747 - spastorino:rename-rustc-guide, r=pietroalbini
Rename rustc guide

This is in preparation for https://github.com/rust-lang/rustc-guide/issues/470
Needs to be merged after we actually rename the guide.

Have used this to rename:

`git grep -l 'rustc_guide' | xargs sed -i 's/rustc_guide/rustc_dev_guide/g'`
`git grep -l 'rustc-guide' | xargs sed -i 's/rustc-guide/rustc-dev-guide/g'`
`git grep -l 'rustc guide' | xargs sed -i 's/rustc guide/rustc dev guide/g'`
2020-03-12 16:32:19 +01:00
Mazdak Farrokhzad
3853da75cb
Rollup merge of #69850 - RalfJung:panic-bounds-check, r=eddyb
panic_bounds_check: use caller_location, like PanicFnLangItem

The `PanicFnLangItem` got switched to using `#[caller_location]` at some point, but `PanicBoundsCheckFnLangItem` was kept in the old style. For consistency, switch that one over to use `#[caller_location]` as well.

This is also helpful for Miri as it means the `assert_panic` machine hook never needs to know the current `Span`.
2020-03-11 14:03:49 +01:00
Mazdak Farrokhzad
a7c2eef2ae
Rollup merge of #66059 - RalfJung:panic-on-non-zero, r=eddyb
mem::zeroed/uninit: panic on types that do not permit zero-initialization

r? @eddyb @oli-obk

Cc https://github.com/rust-lang/rust/issues/62825

Also see [this summary comment](https://github.com/rust-lang/rust/pull/66059#issuecomment-586734747)
2020-03-11 10:36:16 +01:00
Santiago Pastorino
b3b32b74bc
rust-lang.github.io/rustc-dev-guide -> rustc-dev-guide.rust-lang.org 2020-03-10 17:08:18 -03:00
Santiago Pastorino
0037f4e37c
Rename rustc-guide to rustc-dev-guide 2020-03-10 17:08:10 -03:00
Mazdak Farrokhzad
977d69fc19
Rollup merge of #69714 - spastorino:place-ref-lifetime, r=oli-obk
Make PlaceRef take just one lifetime

r? @eddyb
2020-03-10 06:47:50 +01:00
Ralf Jung
51b60b75e7
Improve readability 2020-03-09 16:56:45 +01:00
Ralf Jung
1a9fc18e83 panic_bounds_check: use caller_location, like PanicFnLangItem 2020-03-09 11:16:23 +01:00
Mazdak Farrokhzad
f1f4864de3
Rollup merge of #69787 - spastorino:use-local-directly-its-copy, r=oli-obk
mir::Local is Copy we can pass it by value in these cases

r? @oli-obk
2020-03-07 17:27:34 +01:00
Santiago Pastorino
0ed6e795fb
mir::Local is Copy we can pass it by value in these cases 2020-03-06 18:23:18 -03:00
Matthias Krüger
136ad015b6 fix various typos 2020-03-06 15:19:31 +01:00
Amanieu d'Antras
8e3467c215 Link to libgcc dynamically on windows-gnu when using dylib crates 2020-03-05 17:36:50 +00:00
Amanieu d'Antras
f4f91f0b2f Remove eh_unwind_resume lang item 2020-03-05 17:36:50 +00:00
Santiago Pastorino
b11cd0b587
PlaceRef<'a, 'tcx> -> PlaceRef<'tcx> 2020-03-04 18:25:03 -03:00
Matthias Krüger
d8d2004c6f Don't use "if let" bindings to only check a value and not actually bind anything.
For example:  `if let Some(_) = foo() {}`	can be reduced to	`if foo().is_some() {}`   (clippy::redundant_pattern_matching)
2020-03-04 20:41:03 +01:00
Dylan DPC
8ca3e59f8a
Rollup merge of #69650 - matthiaskrgr:clnp, r=varkor
cleanup more iterator usages (and other things)

* Improve weird formatting by moving comment inside else-code block.
* Use .any(x) instead of .find(x).is_some() on iterators.
* Use .nth(x) instead of .skip(x).next() on iterators.
* Simplify conditions like  x + 1 <= y   to   x < y
* Use let instead of match to get value of enum with single variant.
2020-03-03 21:26:13 +01:00
Santiago Pastorino
2af5e87b4b
Make PlaceRef lifetimes of monomorphized_place_ty be both 'tcx 2020-03-03 17:00:57 -03:00
Santiago Pastorino
1a1dcfad6f
Make PlaceRef lifetimes of codegen_place be both 'tcx 2020-03-03 16:55:01 -03:00
Tomasz Miąsko
3ab596514a Improve linking of crates with circular dependencies
Previously, the code responsible for handling the cycles between crates
introduces through weak lang items, would keep a set of missing language
items:

* extending it with items missing from the current crate,
* removing items provided by the current crate,
* grouping the crates when the set changed from non-empty back to empty.

This could produce incorrect results, if a lang item was missing from a
crate that comes after the crate that provides it (in the loop iteration
order). In that case the grouping would not take place.

The changes here address this specific failure scenario by keeping track
of two separate sets of crates. Those that are required to link successfully,
and those that are available for linking.

Verified using test case from 69368.
2020-03-03 13:11:19 +01:00
Santiago Pastorino
812e62f146
Make PlaceRef lifetimes of LocalAnalyzer::process_place be both 'tcx 2020-03-02 22:02:52 -03:00
Matthias Krüger
c287d86d2c Use .nth(x) instead of .skip(x).next() on iterators. 2020-03-03 01:00:48 +01:00
Dylan DPC
87284d7e79
Rollup merge of #69569 - matthiaskrgr:nonminimal_bool, r=mark-Simulacrum
simplify boolean expressions
2020-03-01 17:23:30 +01:00
Vadim Petrochenkov
e08c279eac Rename syntax to rustc_ast in source code 2020-02-29 21:59:09 +03:00
Vadim Petrochenkov
6054a30370 Make it build again 2020-02-29 20:47:10 +03:00
Matthias Krüger
56a3da3bd0 simplify boolean expressions 2020-02-29 11:36:18 +01:00
Ralf Jung
7c84e451d5 move panic intrinsic codegen to helper function 2020-02-29 09:40:40 +01:00
Ralf Jung
6e66f586a0 fmt 2020-02-29 09:27:25 +01:00
Ralf Jung
b133d6776f make it even more conservative, and note some FIXMEs 2020-02-29 09:27:25 +01:00
Ralf Jung
503026b622 mem::zeroed/uninit: panic on types that do not permit zero-initialization 2020-02-29 09:27:25 +01:00
Matthias Krüger
1622b6ef73 simplify condition in start_executing_work() 2020-02-28 18:09:29 +01:00
Matthias Krüger
9523c89f18 use is_empty() instead of len() == x to determine if structs are empty. 2020-02-28 15:16:27 +01:00
Dylan DPC
02b96b3ecc
Rollup merge of #69529 - matthiaskrgr:clippy_identity_conversion, r=Mark-Simulacrum
don't use .into() to convert types into identical types.

This removes redundant `.into()` calls.

example: `let s: String = format!("hello").into();`
2020-02-28 01:55:49 +01:00
Dylan DPC
350491da19
Rollup merge of #69379 - jumbatm:llvm-sigsegv, r=pnkfelix
Fail on multiple declarations of `main`.

Closes #67946.

Previously, when inserting the entry function, we only checked for
duplicate _definitions_ of `main`.  However, it's possible to cause
problems even only having a duplicate _declaration_. For example,
shadowing `main` using an extern block isn't caught by the current
check, and causes an assertion failure down the line in in LLVM code.

r? @pnkfelix
2020-02-28 01:55:35 +01:00
Matthias Krüger
7be94a8a95 don't use .into() to convert types into identical types.
example:
    let s: String = format!("hello").into();
2020-02-27 23:32:46 +01:00
Dylan DPC
ab3fb8b05a
Rollup merge of #69429 - matthiaskrgr:clippy_, r=estebank
remove redundant clones and import
2020-02-26 02:07:15 +01:00
Ralf Jung
4e867535f3 no more codegen for miri_start_panic 2020-02-24 16:42:26 +01:00
Matthias Krüger
d4a005bd03 librustc{, codegen_ssa,infer,mir_build}: don't clone types that are copy 2020-02-24 14:56:29 +01:00
bors
87b0d83745 Auto merge of #69351 - mati865:mingw-ultimate-fix, r=cramertj
Improve external MinGW detection

Fixes #68872
2020-02-23 12:52:48 +00:00
jumbatm
a796af7a76 Fail on multiple declarations of main.
Previously, when inserting the entry function, we only checked for
duplicate _definitions_ of `main`.  However, it's possible to cause
problems even only having a duplicate _declaration_. For example,
shadowing `main` using an extern block isn't caught by the current
check, and causes an assertion failure down the line in in LLVM code.
2020-02-23 02:06:11 +10:00
Mateusz Mikuła
4904b9c228 Detect Chocolatey MinGW installation 2020-02-21 16:47:04 +01:00
Mateusz Mikuła
b3b252b401 Fix MinGW detection for Cygwin 2020-02-21 15:36:29 +01:00
Ben Lewis
774a029e96 Code review changes. 2020-02-16 09:59:01 +13:00
Ben Lewis
821f4a9dfb Monomorphize const type during codegen. 2020-02-15 17:43:14 +13:00
Ben Lewis
c7aadcfa56 Change const_field and const_caller_location to return ConstValue instead of Const as the type
in the returned const isn't needed.
2020-02-15 12:57:46 +13:00
Ben Lewis
c423a8649c Change const eval to return ConstValue, instead of Const as the type inside it shouldn't be used. 2020-02-15 11:56:23 +13:00