Commit graph

1273 commits

Author SHA1 Message Date
Dylan DPC
62c0579116
Rollup merge of #69357 - tmiasko:debuginfo-column, r=michaelwoerister
Emit 1-based column numbers in debuginfo

* Use byte offsets instead of char position offsets. Resolves #67360.
* Use 1-based offsets instead of 0-based ones. Resolves #65437.
* Consistently omit column information for msvc targets, matching clang behaviour (previously columns have been omitted from `DILocation`, but not from `DILexicalBlock`).
2020-03-15 02:44:13 +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
bors
1572c433ee Auto merge of #69986 - JohnTitor:rollup-h0809mf, r=JohnTitor
Rollup of 12 pull requests

Successful merges:

 - #69403 (Implement `Copy` for `IoSlice`)
 - #69460 (Move some `build-pass` tests to `check-pass`)
 - #69723 (Added doc on keyword Pub.)
 - #69802 (fix more clippy findings)
 - #69809 (remove lifetimes that can be elided (clippy::needless_lifetimes))
 - #69947 (Clean up E0423 explanation)
 - #69949 (triagebot.toml: add ping aliases)
 - #69954 (rename panic_if_ intrinsics to assert_)
 - #69960 (miri engine: fix treatment of abort intrinsic)
 - #69966 (Add more regression tests)
 - #69973 (Update stable-since version for const_int_conversion)
 - #69974 (Clean up E0434 explanation)

Failed merges:

r? @ghost
2020-03-13 19:16:03 +00:00
Yuki Okushi
c13548dccd
Rollup merge of #69809 - matthiaskrgr:lifetimes, r=eddyb
remove lifetimes that can be elided (clippy::needless_lifetimes)
2020-03-14 04:03:26 +09:00
bors
d6072319a9 Auto merge of #69155 - chrissimpkins:llvm-globals, r=eddyb
Add support for LLVM globals corresponding to miri allocations should be named alloc123

Adds support for this request from @eddyb in #69134:

> That is, if -Zfewer-names is false (usually only because of --emit=llvm-ir), we should use the same name for LLVM globals we generate out of miri allocs as #67133 does in MIR output (allocN).
>
>This way, we can easily see the mapping between MIR and LLVM IR (and it shouldn't be any costlier for regular compilation, which would continue to use unnamed globals).

r? @eddyb
cc @oli-obk
2020-03-13 16:10:20 +00:00
Matthias Krüger
7b1b08cfee remove lifetimes that can be elided (clippy::needless_lifetimes) 2020-03-12 20:03: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
Chris Simpkins
cf929f77bf support LLVM globals corresponding to miri allocations 2020-03-12 09:57:05 -04:00
Mazdak Farrokhzad
a77206fa4a
Rollup merge of #69893 - tmiasko:cstr, r=petrochenkov
librustc_codegen_llvm: Use slices instead of 0-terminated strings

Changed functions:
* LLVMRustGetOrInsertFunction
* LLVMRustGetNamedValue
* LLVMRustBuildCall (removed unused name argument)
* LLVMRustInlineAsm
* LLVMRustInlineAsmVerify
* LLVMRustAppendModuleInlineAsm
2020-03-11 14:03:54 +01:00
Tomasz Miąsko
1106579c78 librustc_codegen_llvm: Use slices instead of 0-terminated strings
Changed functions:
* LLVMRustGetOrInsertFunction
* LLVMRustGetNamedValue
* LLVMRustBuildCall (removed unused name argument)
* LLVMRustInlineAsm
* LLVMRustInlineAsmVerify
* LLVMRustAppendModuleInlineAsm
2020-03-11 08:10:21 +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
9d4fdba8be
Rename rustc guide to rustc dev guide 2020-03-10 17:08:16 -03:00
Santiago Pastorino
0037f4e37c
Rename rustc-guide to rustc-dev-guide 2020-03-10 17:08:10 -03:00
Mazdak Farrokhzad
436f2ec58c
Rollup merge of #69836 - JohnTitor:immediate-outputs, r=nagisa
Check if output is immediate value

Fixes #62046

r? @nagisa
2020-03-10 06:47:55 +01:00
Tomasz Miąsko
e54a829b57 Avoid unnecessary interning of enum variant part id 2020-03-09 02:05:22 +01:00
Tomasz Miąsko
58303b77e0 Use slices in preference to 0-terminated strings
Additionally whenever possible match C API provided by the LLVM.
2020-03-09 02:05:22 +01:00
Yuki Okushi
d32924f89d
Check if output is immediate value 2020-03-09 07:48:08 +09:00
Mazdak Farrokhzad
e2617a98c0
Rollup merge of #69734 - tmiasko:di-enumerator, r=ecstatic-morse
Change DIBuilderCreateEnumerator signature to match LLVM 9

* Change DIBuilderCreateEnumerator signature to match LLVM 9 C API.
* Use provided is unsigned flag when emitting enumerators.
2020-03-08 20:54:31 +01:00
Amanieu d'Antras
9f3679fe44 Apply review feedback 2020-03-07 16:31:30 +00:00
Mazdak Farrokhzad
10f999b72d
Rollup merge of #69773 - matthiaskrgr:typos, r=petrochenkov
fix various typos
2020-03-07 17:27:32 +01:00
Mazdak Farrokhzad
614cd8dc47
Rollup merge of #69667 - JohnTitor:no-debug, r=nikomatsakis
Remove the `no_debug` feature

Context: https://github.com/rust-lang/rust/issues/29721#issuecomment-367642779

r? @nikomatsakis
2020-03-07 17:27:26 +01:00
Matthias Krüger
83980aca20 Don't redundantly repeat field names (clippy::redundant_field_names) 2020-03-06 19:42:18 +01:00
Matthias Krüger
136ad015b6 fix various typos 2020-03-06 15:19:31 +01:00
Dylan DPC
67d735c4bf
Rollup merge of #69736 - matthiaskrgr:even_more_clippy, r=Dylan-DPC
even more clippy cleanups

* Don't pass &mut where immutable reference (&) is sufficient (clippy::unnecessary_mut_passed)
* Use more efficient &&str to String conversion (clippy::inefficient_to_string)
* Don't always eval arguments inside .expect(), use unwrap_or_else and closure. (clippy::expect_fun_call)
* Use righthand '&' instead of lefthand "ref". (clippy::toplevel_ref_arg)
* Use simple 'for i in x' loops instead of 'while let Some(i) = x.next()' loops on iterators. (clippy::while_let_on_iterator)
* Const items have by default a static lifetime, there's no need to annotate it. (clippy::redundant_static_lifetimes)
* Remove redundant patterns when matching ( x @ _  to  x) (clippy::redundant_pattern)
2020-03-05 22:04:10 +01:00
Tomasz Miąsko
30650f867b debuginfo: Use is unsigned flag when emitting enumerators 2020-03-05 20:13:01 +01:00
Tomasz Miąsko
ebd941b890 debuginfo: Generators use u32 as discriminant type repr 2020-03-05 20:13:01 +01:00
Amanieu d'Antras
1c950e5c6f Simplify the try intrinsic by using a callback in the catch block 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
Matthias Krüger
8ba92d9ce4 Use more efficient &&str to String conversion (clippy::inefficient_to_string) 2020-03-05 16:39:20 +01:00
Tomasz Miąsko
e54a16cffc Change DIBuilderCreateEnumerator signature to match LLVM 9
No functional changes intended.
2020-03-05 15:34:50 +01: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
Matthias Krüger
07168f9cdc Don't use .ok() before unwrapping via .expect() on a Result.
The Result can be expect-unwrapped directly. (clippy::ok_expect)
2020-03-04 20:33:47 +01:00
Yuki Okushi
321d90e1d6 Remove the no_debug feature 2020-03-03 18:22:05 +09:00
Matthias Krüger
df716b0e37 use conditions directly 2020-03-03 03:46:45 +01:00
Amanieu d'Antras
d73813ae62 Apply CPU attributes to __rust_try 2020-03-02 11:43:07 +00:00
Amanieu d'Antras
61b67d0c19 Fix cross-DLL panics under MSVC 2020-03-02 11:43:07 +00:00
Mark Rousskov
1920f817ca Avoid over-aligning the return value in the -Cpanic=abort case 2020-03-02 11:43:07 +00: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
Dylan DPC
c8db7dcc1c
Rollup merge of #69551 - matthiaskrgr:len_zero, r=Mark-Simulacrum
use is_empty() instead of len() == x  to determine if structs are empty.
2020-02-29 02:16:21 +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
Matthias Krüger
7c84ba1124 use char instead of &str for single char patterns 2020-02-27 14:57:22 +01:00
Tomasz Miąsko
0c51f2f5a5 Use byte offsets when emitting debuginfo columns 2020-02-26 21:45:34 +01:00
Tomasz Miąsko
e1a5472508 Emit 1-based column numbers in debuginfo
The debuginfo column numbers are 1-based. The value 0 indicates that no
column has been specified. Translate 0-based column numbers to 1-based
when emitting debug information.
2020-02-26 21:45:34 +01: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
Andreas Jonson
cec0ed0219 add selfprofiling for new llvm passmanager 2020-02-13 08:02:18 +01:00
Dylan DPC
f127aba96d
Rollup merge of #67954 - nikic:new-pm, r=nagisa
Support new LLVM pass manager

Add support for the new LLVM pass manager behind a `-Z new-llvm-pass-manager=on` option. Both the pre-link optimization and LTO pipelines use the new pass manager. There's some bits that are not supported yet:

 * `-C passes`. NewPM requires an entirely different way of specifying custom pass pipelines. We should probably expose that functionality, but it doesn't directly map to what `-C passes` does.
 * NewPM has no support for custom inline parameters right now. We'd have to add upstream support for that first.
 * NewPM does not support PGO at O0 in LLVM 9 (which is why those tests fail with NewPM enabled). This is supported in LLVM 10.
 * NewPM does not support MergeFunctions in LLVM 9. I've landed this upstream just before the cut, so we'll be able to re-enable that with LLVM 10.

Closes #64289.

r? @ghost
2020-02-12 20:36:51 +01:00