Commit Graph

122045 Commits

Author SHA1 Message Date
bors
2935d294ff Auto merge of #69890 - lenary:lenary/riscv-frame-pointers, r=hanna-kruppe,Mark-Simulacrum
[RISC-V] Do not force frame pointers

We have been seeing some very inefficient code that went away when using
`-Cforce-frame-pointers=no`. For instance `core::ptr::drop_in_place` at
`-Oz` was compiled into a function which consisted entirely of saving
registers to the stack, then using the frame pointer to restore the same
registers (without any instructions between the prolog and epilog).

The RISC-V LLVM backend supports frame pointer elimination, so it makes
sense to allow this to happen when using Rust. It's not clear to me that
frame pointers have ever been required in the general case.

In rust-lang/rust#61675 it was pointed out that this made reassembling
stack traces easier, which is true, but there is a code generation
option for forcing frame pointers, and I feel the default should not be
to require frame pointers, given it demonstrably makes code size worse
(around 10% in some embedded applications).

The kinds of targets mentioned in rust-lang/rust#61675 are popular, but
should not dictate that code generation should be worse for all RISC-V
targets, especially as there is a way to use CFI information to
reconstruct the stack when the frame pointer is eliminated. It is also
a misconception that `fp` is always used for the frame pointer. `fp` is
an ABI name for `x8` (aka `s0`), and if no frame pointer is required,
`x8` may be used for other callee-saved values.

---

I am partly posting this to get feedback from @fintelia who introduced the change to require frame pointers, and @hanna-kruppe who had issues with the original PR. I would understand if we wanted to remove this setting on only a subset of RISC-V targets, but my preference would be to remove this setting everywhere.

There are more details on the code size savings seen in Tock here: https://github.com/tock/tock/pull/1660
2020-06-17 11:30:56 +00:00
Ayaz Hafiz
7a89a33823
fixup! Note numeric literals that can never fit in an expected type 2020-06-16 23:10:41 -07:00
asrar
caffb28ece
add blank line bw sections
Separate target features from rust ones with a blank line

Co-authored-by: Josh Stone <cuviper@gmail.com>
2020-06-17 10:31:46 +05:30
Ayaz Hafiz
d7277df3ac
fixup! Note numeric literals that can never fit in an expected type 2020-06-16 20:05:55 -07:00
Rich Kadel
1db44afecd Ensure profiling runtime for -Zinstrument-coverage
If config.toml `profiler = false`, the test/mir-opt/instrument_coverage
test is ignored. Otherwise, this patch ensures the profiler_runtime is
loaded when -Zinstrument-coverage is enabled. Confirmed that this works
for MacOS.
2020-06-16 18:48:46 -07:00
Poliorcetics
e75fa896ba
Don't imply function pointers are references
Co-authored-by: David Tolnay <dtolnay@gmail.com>
2020-06-17 03:30:41 +02:00
pierwill
9f2e8adc35
Fix typo in librustc_ast docs
Fixed sentence by removing a word.
2020-06-16 18:11:47 -07:00
Esteban Küber
af45d8a5bb Suggest new type param on single char ident
Suggest new type parameter on single char uppercase ident even if it
doesn't appear in a field's type parameter.

Address comment in #72641.
2020-06-16 17:36:55 -07:00
Esteban Küber
aa84b0fa37 Provide help when T: ?Sized can't be suggested 2020-06-16 17:24:16 -07:00
Gary Guo
2b7d858866 Add some comments related to place op typeck 2020-06-16 22:50:21 +01:00
Alexis Bourget
15cd51af5e Mention functions pointers in the documentation 2020-06-16 23:39:03 +02:00
bors
e8ff4bcbd0 Auto merge of #73322 - Amanieu:asm-srcloc-llvm, r=cuviper
Update LLVM submodule

Only includes one commit:
- [D80759](https://reviews.llvm.org/D80759): Fix FastISel dropping srcloc metadata from InlineAsm

Fixes #40555
2020-06-16 20:40:22 +00:00
Hanif Bin Ariffin
5a9df8406f Added some more documentations to unsafety blocks in slice/sort.rs 2020-06-16 16:19:49 -04:00
Ralf Jung
81c7ebd544 we can enable one more codegen test in debug mode now 2020-06-16 16:01:30 -04:00
Ralf Jung
f0a42332b8 memory access sanity checks: abort instead of panic 2020-06-16 16:01:30 -04:00
root
457acbd5a8 trim whitespace 2020-06-16 18:53:30 +00:00
root
9f50f84ef1 break long line for formatting 2020-06-16 18:14:32 +00:00
root
4506a358ca add header for rust specific feature 2020-06-16 17:36:04 +00:00
bors
a647c0cd68 Auto merge of #73402 - Dylan-DPC:rollup-8udzpfu, r=Dylan-DPC
Rollup of 8 pull requests

Successful merges:

 - #73237 (Check for overflow in DroplessArena and align returned memory)
 - #73339 (Don't run generator transform when there's a TyErr)
 - #73372 (Re-order correctly the sections in the sidebar)
 - #73373 (Use track caller for bug! macro)
 - #73380 (Add more info to `x.py build --help` on default value for `-j JOBS`.)
 - #73381 (Fix typo in docs of std::mem)
 - #73389 (Use `Ipv4Addr::from<[u8; 4]>` when possible)
 - #73400 (Fix forge-platform-support URL)

Failed merges:

r? @ghost
2020-06-16 14:58:14 +00:00
Who? Me?!
cfdbbb5600
format derives
Co-authored-by: lzutao <taolzu@gmail.com>
2020-06-16 09:41:05 -05:00
Brian Cain
7a9f29d305 Add initial asm!() support for hexagon
GPRs only
2020-06-16 08:58:13 -05:00
Ayaz Hafiz
f0d36891b6
fixup! Note numeric literals that can never fit in an expected type 2020-06-16 06:55:24 -07:00
Charles Lew
1990f9777f Disallow loading crates with non-ascii identifier name. 2020-06-16 21:34:36 +08:00
Dylan DPC
b4dd6a0dc4
Rollup merge of #73400 - rnestler:patch-1, r=jonas-schievink
Fix forge-platform-support URL

Apparently it got changed.
2020-06-16 15:08:48 +02:00
Dylan DPC
3c437e5733
Rollup merge of #73389 - lzutao:from, r=kennytm
Use `Ipv4Addr::from<[u8; 4]>` when possible

Resolve this comment: https://github.com/rust-lang/rust/pull/73331#discussion_r440098369
2020-06-16 15:08:47 +02:00
Dylan DPC
759547b210
Rollup merge of #73381 - ratijas:fix-typo-std-mem, r=jonas-schievink
Fix typo in docs of std::mem
2020-06-16 15:08:45 +02:00
Dylan DPC
66a1da38d0
Rollup merge of #73380 - pnkfelix:make-bootstrap-help-print-num-cpus, r=Mark-Simulacrum
Add more info to `x.py build --help` on default value for `-j JOBS`.
2020-06-16 15:08:43 +02:00
Dylan DPC
94105c2da3
Rollup merge of #73373 - lzutao:bug-trackcaller, r=Amanieu
Use track caller for bug! macro
2020-06-16 15:08:42 +02:00
Dylan DPC
6c44519749
Rollup merge of #73372 - GuillaumeGomez:re-order-sidebar-sections, r=kinnison
Re-order correctly the sections in the sidebar

Before that, "trait implementations" and "implementors" titles in the sidebar were before "methods" for example. Which wasn't logical considering that the two sections come after in the "content".

r? @kinnison
2020-06-16 15:08:40 +02:00
Dylan DPC
5bbcdf5f53
Rollup merge of #73339 - jonas-schievink:unbug, r=estebank
Don't run generator transform when there's a TyErr

Not sure if this might cause any problems later on, but we shouldn't be hitting codegen or const eval for the produced MIR anyways, so it should be fine.

cc https://github.com/rust-lang/rust/issues/72685#issuecomment-643749020
2020-06-16 15:08:37 +02:00
Dylan DPC
c65f39dac4
Rollup merge of #73237 - tmiasko:arena, r=nnethercote
Check for overflow in DroplessArena and align returned memory

* Check for overflow when calculating the slice start & end position.
* Align the pointer obtained from the allocator, ensuring that it
  satisfies user requested alignment (the allocator is only asked for
  layout compatible with u8 slice).
* Remove an incorrect assertion from DroplessArena::align.
* Avoid forming references to an uninitialized memory in DroplessArena.

Helps with #73007, #72624.
2020-06-16 15:08:35 +02:00
Guillaume Gomez
bad252c9fa Update ui tests 2020-06-16 14:13:16 +02:00
Raphael Nestler
60410ef020
Fix forge-platform-support URL
Apparently it got changed.
2020-06-16 13:42:09 +02:00
bors
435f97cec1 Auto merge of #73285 - Mark-Simulacrum:clippy-fail, r=RalfJung,oli-obk
Avoid prematurely recording toolstates

When we're running with dry_run enabled (i.e. all builds do this initially), we're
guaranteed to save of a toolstate of TestFail for tools that aren't tested. In practice,
we do test tools as well, so for those tools we would initially record them as being
TestPass, and then later on re-record the correct state after actually testing them.
However, this would not work well if the build failed for whatever reason (e.g. panicking
in bootstrap, or as was the case in #73097, clippy failing to test successfully), we would
just go on believing that things passed when they in practice did not.

This commit also adjusts saving toolstate to never record clippy explicitly (otherwise, it
would be recorded when building it); eventually that'll likely move to other tools as well
but not yet. This is deemed simpler than checking everywhere we generically save
toolstate.

We also move clippy out of the "toolstate" no-fail-fast build into a separate x.py
invocation; this should no longer be technically required but provides the nice state of
letting us check toolstate for all tools and only then check clippy (giving full results
on every build).

r? @oli-obk

Supercedes #73275, also fixes #73274
2020-06-16 11:26:45 +00:00
Guillaume Gomez
a19dfb573d Create new E0763 error code for unterminated byte constant 2020-06-16 13:14:04 +02:00
Ralf Jung
d1265e7679 libcore tests: use min_specialization 2020-06-16 13:07:15 +02:00
Ralf Jung
991dfe7595 bless all 2020-06-16 11:56:54 +02:00
Ralf Jung
827ccf7718 add probably accidentally missing super_* calls 2020-06-16 11:23:27 +02:00
Ralf Jung
6c5345f2de fmt; make visit_terminator arg names consistent with the rest 2020-06-16 11:23:27 +02:00
Ralf Jung
046165a807 rename location field of Drop terminators to place 2020-06-16 11:23:25 +02:00
David Wood
93022be991
bootstrap: read config from $RUST_BOOTSTRAP_CONFIG
This commit modifies bootstrap so that `config.toml` is read first from
`RUST_BOOTSTRAP_CONFIG`, then `--config` and finally `config.toml` in the
current directory.

This is a subjective change, intended to improve the ergnomics when
using "development shells" for rustc development (for example, using tools
such as Nix) which set environment variables to ensure a reproducible
environment (these development shells can then be version controlled). By
optionally reading `config.toml` from an environment variable, a `config.toml`
can be defined in the development shell and a path to it exposed in the
`RUST_BOOTSTRAP_CONFIG` environment variable - avoiding the need to manually
symlink the contents of this file to `config.toml` in the working
directory.

Signed-off-by: David Wood <david@davidtw.co>
2020-06-16 10:07:34 +01:00
Ralf Jung
302fb5039b get rid of an unused 'span' field 2020-06-16 09:43:31 +02:00
Ralf Jung
0bcefd9b5e remove visit_terminator_kind from MIR visitor 2020-06-16 09:43:31 +02:00
Ralf Jung
5fbef22a44 warn against 'specialization' feature 2020-06-16 09:39:34 +02:00
Ralf Jung
0265e4e61b add tracking issue 2020-06-16 09:25:29 +02:00
bors
c8a9c340de Auto merge of #72962 - lcnr:ObligationCause-lrc, r=ecstatic-morse
store `ObligationCause` on the heap

Stores `ObligationCause` on the heap using an `Rc`.

This PR trades off some transient memory allocations to reduce the size of–and thus the number of instructions required to memcpy–a few widely used data structures in trait solving.
2020-06-16 06:22:52 +00:00
oddg
f3dfe80ee1 Adjust error message 2020-06-15 21:28:50 -07:00
Esteban Küber
d2b8e6090c Account for derived obligations to suggest ?Sized bound
Fix #27964.
2020-06-15 19:46:27 -07:00
Esteban Küber
95e5605108 Suggest ?Sized when applicable for ADTs
Fix #71790.
2020-06-15 19:46:27 -07:00
Lzu Tao
0e6c333ca6 Use Ipv4Addr::from<[u8; 4]> when possible 2020-06-16 01:54:17 +00:00