about summary refs log tree commit diff
path: root/src
AgeCommit message (Collapse)AuthorLines
2018-12-07Unconditionally emit the target-cpu LLVM attribute.Michael Woerister-7/+3
2018-12-07use top level `fs` functions where appropriateAndy Russell-235/+137
This commit replaces many usages of `File::open` and reading or writing with `fs::read_to_string`, `fs::read` and `fs::write`. This reduces code complexity, and will improve performance for most reads, since the functions allocate the buffer to be the size of the file. I believe that this commit will not impact behavior in any way, so some matches will check the error kind in case the file was not valid UTF-8. Some of these cases may not actually care about the error.
2018-12-07Auto merge of #56460 - davidtwco:issue-55850, r=pnkfelixbors-22/+104
Fix ICE with generators and NLL Fix #55850. This PR stops an ICE in #55850 by not panicking when a region cannot be named. However, this PR does not (yet) fix the underlying issue that the correct name for the test case provided for the issue (in this instance, `'a`) was not found. This PR also lays a little bit of groundwork by categorizing yields separately from returns so that region naming can be specialized for this case. r? @pnkfelix
2018-12-07grammarDale Wijnand-1/+1
2018-12-07Fix the just-introduced ptr::hash docsDale Wijnand-2/+5
2018-12-07Auto merge of #56566 - ljedrz:fix_clippy_errors, r=cramertjbors-15/+12
codegen_utils, driver: fix clippy errors - remove a superfluous conversion - remove an explicit `return` - rename `MetadataOnlyCodegenBackend::new` to `::boxed` - single-arm `match` > `if let`
2018-12-07Improve the usage message for `-Z dump-mir`.Edd Barrett-1/+7
2018-12-07Change to give a help messageJohn Ginger-13/+19
2018-12-07Fix ICE in region naming.David Wood-16/+96
This commit puts a fix in place for the ICE in region naming code so that it doesn't break the compiler. However, this results in the diagnostic being poorer as the borrow explanation that was causing the ICE is not being added - this should be fixed as a follow-up.
2018-12-07Introduce constraint category for yields.David Wood-6/+8
This commit adds a new `ConstraintCategory` for yield points - this allows for differentiation between a normal return and a yield in the diagnostics.
2018-12-07Auto merge of #56487 - nikic:discard-modules-earlier, r=alexcrichtonbors-166/+231
Discard LLVM modules earlier when performing ThinLTO Currently ThinLTO is performed by first compiling all modules (and keeping them in memory), and then serializing them into ThinLTO buffers in a separate, synchronized step. Modules are later read back from ThinLTO buffers when running the ThinLTO optimization pipeline. We can also find the following comment in `lto.rs`: // FIXME: right now, like with fat LTO, we serialize all in-memory // modules before working with them and ThinLTO. We really // shouldn't do this, however, and instead figure out how to // extract a summary from an in-memory module and then merge that // into the global index. It turns out that this loop is by far // the most expensive portion of this small bit of global // analysis! I don't think that what is suggested here is the right approach: One of the primary benefits of using ThinLTO over ordinary LTO is that it's not necessary to keep all the modules (merged or not) in memory for the duration of the linking step. However, we currently don't really make use of this (at least for crate-local ThinLTO), because we keep all modules in memory until the start of the LTO step. This PR changes the implementation to instead perform the serialization into ThinLTO buffers directly after the initial optimization step. Most of the changes here are plumbing to separate out fat and thin lto handling in `write.rs`, as these now use different intermediate artifacts. For fat lto this will be in-memory modules, for thin lto it will be ThinLTO buffers. r? @alexcrichton
2018-12-07Add suggestion for underscore binding fix.David Wood-2/+15
This commit emits a suggestion for adding an underscore binding to arguments in trait methods that previously did not have a argument name specified.
2018-12-07Add context for RFC 1685 change in 2018 edition.David Wood-4/+10
This commit adds a note providing context for the change to argument names being required in the 2018 edition for trait methods.
2018-12-07Auto merge of #56581 - kennytm:rollup, r=kennytmbors-77/+225
Rollup of 7 pull requests Successful merges: - #56000 (Add Armv8-M Mainline targets) - #56250 (Introduce ptr::hash for references) - #56434 (Improve query cycle errors for parallel queries) - #56516 (Replace usages of `..i + 1` ranges with `..=i`.) - #56555 (Send textual profile data to stderr, not stdout) - #56561 (Fix bug in from_key_hashed_nocheck) - #56574 (Fix a stutter in the docs for slice::exact_chunks) Failed merges: r? @ghost
2018-12-07Drain only needs a shared referenceRalf Jung-7/+5
2018-12-07VecDeque::drain: make sure the 'drain' raw pointer is actually still usableRalf Jung-2/+7
2018-12-07Unique/NonNull::from: make sure we convert to raw pointers ASAPRalf Jung-4/+4
By going through a shared reference, we share the destination as read-only, meaning we can read but not write with the raw pointers
2018-12-07Auto merge of #56066 - jethrogb:jb/sgx-target, r=alexcrichtonbors-241/+4961
Add SGX target to std and dependencies This PR adds tier 3 `std` support for the `x86_64-fortanix-unknown-sgx` target. ### Background Intel Software Guard Extensions (SGX) is an instruction set extension for x86 that allows executing code in fully-isolated *secure enclaves*. These enclaves reside in the address space of a regular user process, but access to the enclave's address space from outside (by e.g. the OS or a hypervisor) is blocked. From within such enclaves, there is no access to the operating system or hardware peripherals. In order to communicate with the outside world, enclaves require an untrusted “helper” program that runs as a normal user process. SGX is **not** a sandboxing technology: code inside SGX has full access to all memory belonging to the process it is running in. ### Overview The Fortanix SGX ABI (compiler target `x86_64-fortanix-unknown-sgx`) is an interface for Intel SGX enclaves. It is a small yet functional interface suitable for writing larger enclaves. In contrast to other enclave interfaces, this interface is primarly designed for running entire applications in an enclave. The interface has been under development since early 2016 and builds on Fortanix's significant experience running enclaves in production. Also unlike other enclave interfaces, this is the only implementation of an enclave interface that is nearly pure-Rust (except for the entry point code). A description of the ABI may be found at https://docs.rs/fortanix-sgx-abi/ and https://github.com/fortanix/rust-sgx/blob/master/doc/FORTANIX-SGX-ABI.md. The following parts of `std` are not supported and most operations will error when used: * `std::fs` * `std::process` * `std::net::UdpSocket` ### Future plans A separate PR (https://github.com/rust-lang/rust/pull/56067/) will add the SGX target to the rust compiler. In the very near future, I expect to upgrade this target to tier 2. This PR is just the initial support to make things mostly work. There will be more work coming in the future, for example to add interfaces to the native SGX primitives, implement unwinding, optimize usercalls. UDP and some form of filesystem support may be added in the future, but process support seems unlikely given the platform's constraints. ### Testing build 1. Install [Xargo](https://github.com/japaric/xargo): `cargo install xargo` 2. Create a new Cargo project, for example: `cargo new --bin sgxtest`. 3. Put the following in a file `Xargo.toml` next to your `Cargo.toml`: ```toml [target.x86_64-fortanix-unknown-sgx.dependencies.std] git = "https://github.com/jethrogb/rust" branch = "jb/sgx-target" ``` NB. This can be quite slow. Instead, you can have a local checkout of that branch and use `path = "/path/to/rust/src/libstd"` instead. Don't forget to checkout the submodules too! 4. Build: ```sh xargo build --target x86_64-fortanix-unknown-sgx ``` ### Testing execution Execution is currently only supported on x86-64 Linux, but support for Windows is planned. 1. Install pre-requisites. In order to test execution, you'll need to have a CPU with Intel SGX support. SGX support needs to be enabled in the BIOS. You'll also need to install the SGX driver and Platform Software (PSW) from [Intel](https://01.org/intel-software-guard-extensions). 2. Install toolchain, executor: ```sh cargo install sgxs-tools --version 0.6.0-rc1 cargo install fortanix-sgx-tools --version 0.1.0-rc1 ``` 3. Start the enclave: ```sh ftxsgx-elf2sgxs target/x86_64-fortanix-unknown-sgx/debug/sgxtest --heap-size 0x20000 --ssaframesize 1 --stack-size 0x20000 --threads 1 --debug sgxs-append -i target/x86_64-fortanix-unknown-sgx/debug/sgxtest.sgxs ftxsgx-runner target/x86_64-fortanix-unknown-sgx/debug/sgxtest.sgxs ```
2018-12-07SGX target: implement command-line arguments and environment variablesJethro Beekman-25/+70
2018-12-07SGX target: implement timeJethro Beekman-3/+9
2018-12-07SGX target: implement networkingJethro Beekman-53/+167
2018-12-07SGX target: implement streamsJethro Beekman-28/+134
2018-12-07SGX target: implement synchronization primitives and threadingJethro Beekman-76/+832
2018-12-07SGX target: implement user memory managementJethro Beekman-6/+502
2018-12-07SGX target: add thread local storageJethro Beekman-17/+277
2018-12-07Add x86_64-fortanix-unknown-sgx target to libstd and dependenciesJethro Beekman-11/+2857
The files src/libstd/sys/sgx/*.rs are mostly copied/adapted from the wasm target. This also updates the dlmalloc submodule to the very latest version.
2018-12-07Rollup merge of #56574 - cbarrick:master, r=varkorkennytm-2/+1
Fix a stutter in the docs for slice::exact_chunks Before this change, the docs for `slice::exact_chunks` reads like this: > See `chunks` for a variant of this iterator that also returns the remainder as a smaller chunk, and `rchunks_exact` for the same iterator but starting at the end of the slice of the slice. Notice that stutter at the end? This commit fixes it.
2018-12-07Rollup merge of #56561 - Zoxc:too-raw, r=Gankrokennytm-0/+4
Fix bug in from_key_hashed_nocheck
2018-12-07Rollup merge of #56555 - Mark-Simulacrum:stderr-profile, r=wesleywiserkennytm-3/+3
Send textual profile data to stderr, not stdout This makes it possible to run with RUSTFLAGS="-Zself-profile" without having to redirect compiler output; otherwise Cargo will error out due to non-empty compiler stdout. r? @wesleywiser
2018-12-07Rollup merge of #56516 - frewsxcv:frewsxcv-eq, r=Mark-Simulacrumkennytm-36/+36
Replace usages of `..i + 1` ranges with `..=i`. Before this change we were using old computer code techniques. After this change we use the new and improved computer code techniques.
2018-12-07Rollup merge of #56434 - Zoxc:par-tests, r=michaelwoeristerkennytm-36/+74
Improve query cycle errors for parallel queries r? @michaelwoerister
2018-12-07Rollup merge of #56250 - dwijnand:ptr-hash, r=alexcrichtonkennytm-0/+30
Introduce ptr::hash for references The RHS is what I used, which wasn't as convenient as `ptr::eq`, so I wondered: should `ptr::hash` exist? My first Rust PR, so I'm going to need some guidance. :)
2018-12-07Rollup merge of #56000 - hug-dev:armv8m.main, r=alexcrichtonkennytm-0/+77
Add Armv8-M Mainline targets This commit enables the Armv8-M Mainline architecture profile. It adds two targets: - `thumbv8m.main-none-eabi` - `thumbv8m.main-none-eabihf` The second one uses the Floating Point Unit for floating point operations. It mainly targets the Cortex-M33 processor, which can have the optional Floating Point Unit extension. It follows #55041 which does it for Baseline. I will rebase this branch on top of it when it is merged to not create conflicts as we have some files in common. To make it work, it still relies on the Cargo change to be merged (accepting "." in target names, rust-lang/cargo#6255). The goal would also be to add this target in the CI so that the `core` library is available for everybody. To do this, some changes will be needed to compile successfully the needed libraries: * `cc-rs` needs to be updated to allow compiling C code for Armv8-M architectures profiles. It is only a few lines to add [here](https://github.com/alexcrichton/cc-rs/blob/a76611ad9836fa8c44fa8220a1d2a96dd3b7d4b6/src/lib.rs#L1299). * Some assembly files in `builtins` in `compiler-rt` were not assembling for Armv8-M Mainline. I sent changes [upstream](https://reviews.llvm.org/D51854) to that project to fix that. The Rust version of `compiler-rt` will have to be updated to contain [that commit](https://github.com/llvm-mirror/compiler-rt/commit/a34cdf8bb498dc2f5dd415542f8e83261d2eeb88). I tested it using the [Musca-A Test Chip board](https://developer.arm.com/products/system-design/development-boards/iot-test-chips-and-boards/musca-a-test-chip-board) but more intensively on the [Armv8-M FVP](https://developer.arm.com/products/system-design/fixed-virtual-platforms) (emulation platform). I am going to try to release my test code soon, once I tidy it up :+1:
2018-12-07Auto merge of #54271 - petrochenkov:nolegder, r=eddyb,alexcrichtonbors-213/+30
Unsupport `#[derive(Trait)]` sugar for `#[derive_Trait]` legacy plugin attributes This is a long deprecated unstable feature that doesn't mesh well with regular resolution/expansion. How to fix broken code: - The recommended way is to migrate to stable procedural macros - derives or attributes (https://doc.rust-lang.org/nightly/book/first-edition/procedural-macros.html). - If that's not possible right now for some reason, you can keep code working with a simple mechanical replacement `#[derive(Legacy)]` -> `#[derive_Legacy]`. Closes https://github.com/rust-lang/rust/issues/29644 r? @ghost
2018-12-07Unsupport `#[derive(Trait)]` sugar for `#[derive_Trait]` legacy plugin ↵Vadim Petrochenkov-213/+30
attributes
2018-12-06Show 'loading content' when loading contentGuillaume Gomez-58/+51
2018-12-06Show everything when noscript is onGuillaume Gomez-0/+26
2018-12-06cleanupGuillaume Gomez-65/+46
2018-12-06Prevent lazy iterations over DOMGuillaume Gomez-105/+99
2018-12-06Greatly improve rustdoc rendering speed issuesGuillaume Gomez-529/+611
2018-12-06Auto merge of #55318 - Aaron1011:fix/final-auto-trait-resolve, r=nikomatsakisbors-17/+152
Ensure that Rustdoc discovers all necessary auto trait bounds Fixes #50159 This commit makes several improvements to AutoTraitFinder: * Call infcx.resolve_type_vars_if_possible before processing new predicates. This ensures that we eliminate inference variables wherever possible. * Process all nested obligations we get from a vtable, not just ones with depth=1. * The 'depth=1' check was a hack to work around issues processing certain predicates. The other changes in this commit allow us to properly process all predicates that we encounter, so the check is no longer necessary, * Ensure that we only display predicates *without* inference variables to the user, and only attempt to unify predicates that *have* an inference variable as their type. Additionally, the internal helper method is_of_param now operates directly on a type, rather than taking a Substs. This allows us to use the 'self_ty' method, rather than directly dealing with Substs.
2018-12-06Fix printing of spans with no TyCtxtJohn Kåre Alsaker-3/+7
2018-12-06FixJohn Kåre Alsaker-1/+1
2018-12-06Fix a race conditionJohn Kåre Alsaker-2/+5
2018-12-06Show usages of query cycles and correctly shift queries in a cycleJohn Kåre Alsaker-30/+61
2018-12-06Fix a stutter in the docs for slice::exact_chunksChris Barrick-2/+1
2018-12-06codegen_utils, driver: fix clippy errorsljedrz-15/+12
2018-12-06Auto merge of #56565 - matthiaskrgr:clippy, r=oli-obkbors-14/+14
submodules: update clippy from 29bf75cd to 1df5766c Fixes clippy toolstate. Changes: ```` Remove -preview suffix from README rustup clippy build with latest rustc (breakage due to https://github.com/rust-lang/rust/commit/08f8faedd0e30f45762afbb8d4873f7041e7462c ) Forgot to remove some debugging code ... Improved code noted by clippy. Fix bug in `implicit_return`. Bug was already covered by test, but test was not checked for. fix #3482 and add ui test for it Don't change current working directory of cargo tests Use cargo's "PROFILE" envvar and set CLIPPY_DOGFOOD Use dogfood_runner for deterministic test ordering Remove unnecessary documentation Fix dogfood tests. Added additional reasoning to `Why is this bad?`. Added comment to explain usage of MIR. Renamed to `implicit_return`. Covered all other kinds besides `ExprKind::Lit`. Added check for replacing `break` with `return`. Appeasing the Test Gods. Seems I'm not smart enough to run the tests locally before committing. Renamed `forced_return` to `missing_returns`. Better clarification in the docs. Ran `update_lints`. Added `FORCED_RETURN` lint. ```` r? @oli-obk
2018-12-06Auto merge of #56282 - qnighy:additional-sizedness-fix, r=nikomatsakisbors-2/+26
Fix #56237: normalize type before deferred sizedness checking. This seems to fix #56237, which was introduced by #56045. I don't thoroughly understand how this works, but the problem seemed to be a lack of normalization. r? @cramertj
2018-12-06submodules: update clippy from 29bf75cd to 1df5766cMatthias Krüger-14/+14
Fixes clippy toolstate. Changes: ```` Remove -preview suffix from README rustup clippy build with latest rustc (breakage due to https://github.com/rust-lang/rust/commit/08f8faedd0e30f45762afbb8d4873f7041e7462c ) Forgot to remove some debugging code ... Improved code noted by clippy. Fix bug in `implicit_return`. Bug was already covered by test, but test was not checked for. fix #3482 and add ui test for it Don't change current working directory of cargo tests Use cargo's "PROFILE" envvar and set CLIPPY_DOGFOOD Use dogfood_runner for deterministic test ordering Remove unnecessary documentation Fix dogfood tests. Added additional reasoning to `Why is this bad?`. Added comment to explain usage of MIR. Renamed to `implicit_return`. Covered all other kinds besides `ExprKind::Lit`. Added check for replacing `break` with `return`. Appeasing the Test Gods. Seems I'm not smart enough to run the tests locally before committing. Renamed `forced_return` to `missing_returns`. Better clarification in the docs. Ran `update_lints`. Added `FORCED_RETURN` lint. ````