about summary refs log tree commit diff
path: root/src
AgeCommit message (Collapse)AuthorLines
2020-05-08Adjust cfg(version) to lang team decisionmibac138-3/+7
2020-05-07Auto merge of #55617 - oli-obk:stacker, r=nagisa,oli-obkbors-351/+424
Prevent compiler stack overflow for deeply recursive code I was unable to write a test that 1. runs in under 1s 2. overflows on my machine without this patch The following reproduces the issue, but I don't think it's sensible to include a test that takes 30s to compile. We can now easily squash newly appearing overflows by the strategic insertion of calls to `ensure_sufficient_stack`. ```rust // compile-pass #![recursion_limit="1000000"] macro_rules! chain { (EE $e:expr) => {$e.sin()}; (RECURSE $i:ident $e:expr) => {chain!($i chain!($i chain!($i chain!($i $e))))}; (Z $e:expr) => {chain!(RECURSE EE $e)}; (Y $e:expr) => {chain!(RECURSE Z $e)}; (X $e:expr) => {chain!(RECURSE Y $e)}; (A $e:expr) => {chain!(RECURSE X $e)}; (B $e:expr) => {chain!(RECURSE A $e)}; (C $e:expr) => {chain!(RECURSE B $e)}; // causes overflow on x86_64 linux // less than 1 second until overflow on test machine // after overflow has been fixed, takes 30s to compile :/ (D $e:expr) => {chain!(RECURSE C $e)}; (E $e:expr) => {chain!(RECURSE D $e)}; (F $e:expr) => {chain!(RECURSE E $e)}; // more than 10 seconds (G $e:expr) => {chain!(RECURSE F $e)}; (H $e:expr) => {chain!(RECURSE G $e)}; (I $e:expr) => {chain!(RECURSE H $e)}; (J $e:expr) => {chain!(RECURSE I $e)}; (K $e:expr) => {chain!(RECURSE J $e)}; (L $e:expr) => {chain!(RECURSE L $e)}; } fn main() { let x = chain!(D 42.0_f32); } ``` fixes #55471 fixes #41884 fixes #40161 fixes #34844 fixes #32594 cc @alexcrichton @rust-lang/compiler I looked at all code that checks the recursion limit and inserted stack growth calls where appropriate.
2020-05-06Rollup merge of #71950 - RalfJung:try-validation-cleanup, r=oli-obkDylan DPC-174/+205
Miri validation error handling cleanup Slightly expand @jumbatm's pattern macro and use it throughout validation. This ensures we never incorrectly swallow `InvalidProgram` errors or ICE when they occur. Fixes https://github.com/rust-lang/rust/issues/71353 r? @oli-obk
2020-05-06Rollup merge of #71918 - GuillaumeGomez:rename-methods-section, r=Dylan-DPCDylan DPC-30/+66
Rename methods section Fixes https://github.com/rust-lang/rust/issues/70475. It renames the section [methods](https://doc.rust-lang.org/nightly/std/string/struct.String.html#methods) into "Implementations". However, I didn't not update the title in the sidebar considering that it only lists methods under (even though I updated the link of the "methods" to make it point to the "implementations" section. r? @kinnison cc @rust-lang/rustdoc
2020-05-06Rollup merge of #71888 - lcnr:refactor-suggest_traits_to_import, r=estebankDylan DPC-55/+49
refactor suggest_traits_to_import
2020-05-06Rollup merge of #71731 - mark-i-m:guide-toolstate-off-for-now, r=kennytmDylan DPC-2/+1
Turn off rustc-dev-guide toolstate for now cc @rust-lang/wg-rustc-dev-guide @rust-lang/infra @ehuss When we first added toolstate, the intent was to use toolstate to linkcheck PRs so that we would know which PRs break links in the guide (e.g. by moving some definition). However, these days, we are mostly getting 429 errors (too many requests) from github (not sure when this changed), and every day, there seems to be a spurious failure of some other sort. This is all despite efforts to filter out spurious failures. Getting spurious gh pings is annoying, and we're not actually getting a lot out of this linkcheck beyond what we are getting with our CI on the guide's repo, so I'm proposing to disable this until we can figure out what might be a better path forward.
2020-05-06Rollup merge of #70908 - estebank:suggest-add, r=nikomatsakisDylan DPC-224/+629
Provide suggestions for type parameters missing bounds for associated types When implementing the binary operator traits it is easy to forget to restrict the `Output` associated type. `rustc` now accounts for different cases to lead users in the right direction to add the necessary restrictions. The structured suggestions in the following output are new: ``` error: equality constraints are not yet supported in `where` clauses --> $DIR/missing-bounds.rs:37:33 | LL | impl<B: Add> Add for E<B> where <B as Add>::Output = B { | ^^^^^^^^^^^^^^^^^^^^^^ not supported | = note: see issue #20041 <https://github.com/rust-lang/rust/issues/20041> for more information help: if `Output` is an associated type you're trying to set, use the associated type binding syntax | LL | impl<B: Add> Add for E<B> where B: Add<Output = B> { | ^^^^^^^^^^^^^^^^^ error[E0308]: mismatched types --> $DIR/missing-bounds.rs:11:11 | 7 | impl<B> Add for A<B> where B: Add { | - this type parameter ... 11 | A(self.0 + rhs.0) | ^^^^^^^^^^^^^^ expected type parameter `B`, found associated type | = note: expected type parameter `B` found associated type `<B as std::ops::Add>::Output` help: consider further restricting this bound | 7 | impl<B> Add for A<B> where B: Add + std::ops::Add<Output = B> { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ error[E0369]: cannot add `B` to `B` --> $DIR/missing-bounds.rs:31:21 | 31 | Self(self.0 + rhs.0) | ------ ^ ----- B | | | B | help: consider restricting type parameter `B` | 27 | impl<B: std::ops::Add<Output = B>> Add for D<B> { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``` That output is given for the following cases: ```rust struct A<B>(B); impl<B> Add for A<B> where B: Add { type Output = Self; fn add(self, rhs: Self) -> Self { A(self.0 + rhs.0) //~ ERROR mismatched types } } struct D<B>(B); impl<B> Add for D<B> { type Output = Self; fn add(self, rhs: Self) -> Self { Self(self.0 + rhs.0) //~ ERROR cannot add `B` to `B` } } struct E<B>(B); impl<B: Add> Add for E<B> where <B as Add>::Output = B { type Output = Self; fn add(self, rhs: Self) -> Self { Self(self.0 + rhs.0) } } ```
2020-05-06Rollup merge of #71944 - ldm0:arrordhint, r=sfacklerDylan DPC-0/+1
Add comment for `Ord` implementation for array Corresponding to `Ord` implementation for slice. It hints new comer the rule of comparing two arrays.
2020-05-06Rollup merge of #71937 - mzohreva:mz/ui-tests-ignore-sgx, r=nikomatsakisDylan DPC-61/+71
Ignore SGX on a few ui tests cc @jethrogb
2020-05-06Rollup merge of #71929 - petrhosek:unwind-visibility, r=tmandryDylan DPC-0/+1
Use -fvisibility=hidden for libunwind We don't want to export any symbols from Rust's version of libunwind as these may collide with other copies of libunwind e.g. when linking Rust staticlib together C/C++ libraries that have their own version.
2020-05-06Rollup merge of #71893 - ecstatic-morse:dataflow-impls-import, r=jonas-schievinkDylan DPC-25/+20
Use the `impls` module to import pre-existing dataflow analyses Currently, existing analyses live in the same module as the traits and types used to define new dataflow analyses. This muddles the [documentation for the `dataflow` module](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir/dataflow/index.html). After this PR, `dataflow::impls` will refer to concrete dataflow analyses, and `dataflow` to the generic interface.
2020-05-06Rollup merge of #71819 - jyn514:check-for-tools, r=Mark-SimulacrumDylan DPC-23/+25
x.py: Give a more helpful error message if curl isn't installed Before: ``` Updating only changed submodules Submodules updated in 0.01 seconds Traceback (most recent call last): File "./x.py", line 11, in <module> bootstrap.main() ... File "/home/joshua/src/rust/src/bootstrap/bootstrap.py", line 137, in run ret = subprocess.Popen(args, **kwargs) File "/usr/lib/python2.7/subprocess.py", line 394, in __init__ errread, errwrite) File "/usr/lib/python2.7/subprocess.py", line 1047, in _execute_child raise child_exception OSError: [Errno 2] No such file or directory ``` After: ``` Updating only changed submodules Submodules updated in 0.01 seconds spurious failure, trying again spurious failure, trying again spurious failure, trying again spurious failure, trying again failed to run: curl -s -y 30 -Y 10 --connect-timeout 30 --retry 3 -Sf -o /tmp/tmpSWF21P.sha256 https://static.rust-lang.org/dist/2020-04-22/rust-std-beta-x86_64-unknown-linux-gnu.tar.gz.sha256: [Errno 2] No such file or directory Build completed unsuccessfully in 0:00:00 ```
2020-05-06Rollup merge of #71591 - hermitcore:thread_create, r=hanna-kruppeDylan DPC-8/+7
use new interface to create threads on HermitCore - the new interface allows to define the stack size - increase the default stack size to 1 MByte
2020-05-06Rollup merge of #71269 - Mark-Simulacrum:sat-float-casts, r=nikicDylan DPC-52/+420
Define UB in float-to-int casts to saturate This closes #10184 by defining the behavior there to saturate infinities and values exceeding the integral range (on the lower or upper end). `NaN` is sent to zero.
2020-05-06Remove warning about UBMark Rousskov-7/+0
2020-05-06Fixup tests to test both const-eval and runtimeMark Rousskov-99/+22
2020-05-06Pull in miri test casesMark Rousskov-5/+458
2020-05-06Define UB in float-to-int casts to saturateMark Rousskov-11/+10
- Round to zero, and representable values cast directly. - `NaN` goes to 0 - Values beyond the limits of the type are saturated to the "nearest value" (essentially rounding to zero, in some sense) in the integral type, so e.g. `f32::INFINITY` would go to `{u,i}N::MAX.`
2020-05-06more precise vtable errorsRalf Jung-20/+23
2020-05-06try_validation: handle multi-branching, and use macro for most remaining ↵Ralf Jung-78/+47
manual throw_validation_failure sites
2020-05-06Rollup merge of #71921 - RalfJung:open-mode, r=hanna-kruppeDylan DPC-0/+4
explain the types used in the open64 call Fixes https://github.com/rust-lang/rust/issues/71915, where I learned about this quirk. I don't actually know what I am talking about here. ;)
2020-05-06Rollup merge of #71905 - mibac138:x-cmd-alias, r=Mark-SimulacrumDylan DPC-13/+17
Add command aliases from Cargo to x.py commands Fixes #71357
2020-05-06Rollup merge of #71889 - RalfJung:rwlock, r=AmanieuDylan DPC-22/+36
Explain our RwLock implementation Turns out that [with the latest POSIX docs](https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_wrlock.html), our `RwLock` implementation is actually correct. However, we cannot fully rely on that due to bugs in older glibc (fix released in 2016). Update the comments to explain that. I also clarified our Mutex docs a bit and fixed another instance of https://github.com/rust-lang/rust/pull/55865. r? @Amanieu Fixes https://github.com/rust-lang/rust/issues/53127
2020-05-06Rollup merge of #71727 - hbina:simplified_usage, r=Mark-SimulacrumDylan DPC-3/+3
SipHasher with keys initialized to 0 should just use new() I believe that is what the `new()` is for, for good reasons.
2020-05-06Rollup merge of #71510 - ssomers:btreemap_iter_intertwined, r=Mark-SimulacrumDylan DPC-75/+119
Btreemap iter intertwined 3 commits: 1. Introduced benchmarks for `BTreeMap::iter()`. Benchmarks named `iter_20` were of the whole iteration process, so I renamed them. Also the benchmarks of `range` that I wrote earlier weren't very good. I included an (awkwardly named) one that compares `iter()` to `range(..)` on the same set, because the contrast is surprising: ``` name ns/iter btree::map::range_unbounded_unbounded 28,176 btree::map::range_unbounded_vs_iter 89,369 ``` Both dig up the same pair of leaf edges. `range(..)` also checks that some keys are correctly ordered, the only thing `iter()` does more is to copy the map's length. 2. Slightly refactoring the code to what I find more readable (not in chronological order of discovery), boosts performance: ``` >cargo-benchcmp.exe benchcmp a1 a2 --threshold 5 name a1 ns/iter a2 ns/iter diff ns/iter diff % speedup btree::map::find_rand_100 18 17 -1 -5.56% x 1.06 btree::map::first_and_last_10k 64 71 7 10.94% x 0.90 btree::map::iter_0 2,939 2,209 -730 -24.84% x 1.33 btree::map::iter_1 6,845 2,696 -4,149 -60.61% x 2.54 btree::map::iter_100 8,556 3,672 -4,884 -57.08% x 2.33 btree::map::iter_10k 9,292 5,884 -3,408 -36.68% x 1.58 btree::map::iter_1m 10,268 6,510 -3,758 -36.60% x 1.58 btree::map::iteration_mut_100000 478,575 453,050 -25,525 -5.33% x 1.06 btree::map::range_unbounded_unbounded 28,176 36,169 7,993 28.37% x 0.78 btree::map::range_unbounded_vs_iter 89,369 38,290 -51,079 -57.16% x 2.33 btree::set::clone_100_and_remove_all 4,801 4,245 -556 -11.58% x 1.13 btree::set::clone_10k_and_remove_all 529,450 496,030 -33,420 -6.31% x 1.07 ``` But you can tell from the `range_unbounded_*` lines that, despite an unwarranted, vengeful attack on the range_unbounded_unbounded benchmark, this change still doesn't allow `iter()` to catch up with `range(..)`. 3. I guess that `range(..)` copes so well because it intertwines the leftmost and rightmost descend towards leaf edges, doing the two root node accesses close together, perhaps exploiting a CPU's internal pipelining? So the third commit distils a version of `range_search` (which we can't use directly because of the `Ord` bound), and we get another boost: ``` cargo-benchcmp.exe benchcmp a2 a3 --threshold 5 name a2 ns/iter a3 ns/iter diff ns/iter diff % speedup btree::map::first_and_last_100 40 43 3 7.50% x 0.93 btree::map::first_and_last_10k 71 64 -7 -9.86% x 1.11 btree::map::iter_0 2,209 1,719 -490 -22.18% x 1.29 btree::map::iter_1 2,696 2,205 -491 -18.21% x 1.22 btree::map::iter_100 3,672 2,943 -729 -19.85% x 1.25 btree::map::iter_10k 5,884 3,929 -1,955 -33.23% x 1.50 btree::map::iter_1m 6,510 5,532 -978 -15.02% x 1.18 btree::map::iteration_mut_100000 453,050 476,667 23,617 5.21% x 0.95 btree::map::range_included_excluded 405,075 371,297 -33,778 -8.34% x 1.09 btree::map::range_included_included 427,577 397,440 -30,137 -7.05% x 1.08 btree::map::range_unbounded_unbounded 36,169 28,175 -7,994 -22.10% x 1.28 btree::map::range_unbounded_vs_iter 38,290 30,838 -7,452 -19.46% x 1.24 ``` But I think this is just fake news from the microbenchmarking media. `iter()` is still trying to catch up with `range(..)`. And we can sure do without another function. So I would skip this 3rd commit. r? @Mark-Simulacrum
2020-05-06convert throw_validation_failure macro to same syntax as try_validationRalf Jung-56/+51
2020-05-06properly catch invalid-drop-fn errorsRalf Jung-14/+16
2020-05-06Add comment for `Ord` implementation for arrayDonough Liu-0/+1
2020-05-06Update librustdoc ID testsGuillaume Gomez-4/+4
2020-05-06convert remaining try_validation to new macroRalf Jung-32/+60
2020-05-06Auto merge of #69464 - Marwes:detach_undo_log, r=nikomatsakisbors-533/+882
perf: Unify the undo log of all snapshot types Extracted from #69218 and extended to all the current snapshot types. Since snapshotting is such a frequent action in the compiler and many of the scopes execute so little work, the act of creating the snapshot and rolling back empty/small snapshots end up showing in perf. By unifying all the logs into one the creation of snapshots becomes significantly cheaper at the cost of some complexity when combining the log with the specific data structures that are being mutated. Depends on https://github.com/rust-lang-nursery/ena/pull/29
2020-05-05comment out rustc-dev-guide in NIGHTLY_TOOLSmark-1/+1
2020-05-05Ignore SGX on a few ui testsMohsen Zohrevandi-61/+71
2020-05-05Auto merge of #71875 - Xanewok:update-rls, r=tmandrybors-2/+6
Update RLS In addition to fixing the toolstate, this also changes the default compilation model to the out-of-process one, which should hopefully target considerable memory usage for long-running instances of the RLS. Fixes #71753 r? @ghost
2020-05-06add test for insufficiently aligned vtableRalf Jung-6/+16
2020-05-06validation: port more checks to the pattern-based macro (and give it the ↵Ralf Jung-30/+54
shorter name)
2020-05-05Index IDs already used by rustdoc templateGuillaume Gomez-2/+29
2020-05-05Add test for new implementations section titleGuillaume Gomez-0/+9
2020-05-05Update testsGuillaume Gomez-12/+12
2020-05-05Replace title "Methods" with "Implementations"Guillaume Gomez-12/+12
2020-05-05Unify winapi features for toolsTyler Mandry-1/+2
2020-05-05Use -fvisibility=hidden for libunwindPetr Hosek-0/+1
We don't want to export any symbols from Rust's version of libunwind as these may collide with other copies of libunwind e.g. when linking Rust staticlib together C/C++ libraries that have their own version.
2020-05-05explain the types used in the open64 callRalf Jung-0/+4
2020-05-05Unify some syn 1.0 et al. features for toolsIgor Matuszewski-1/+4
2020-05-05Update RLSIgor Matuszewski-0/+0
In addition to fixing the toolstate, this also changes the default compilation model to the out-of-process one, which should hopefully target considerable memory usage for long-running instances of the RLS.
2020-05-05Rollup merge of #71897 - alexcrichton:embed-bitcode-docs, r=nnethercoteDylan DPC-8/+36
Improve docs for embed-bitcode and linker-plugin-lto Follow-up from #71716 I wasn't able to add in time.
2020-05-05Rollup merge of #71894 - mibac138:semicolon-not-always-helpful, r=estebankDylan DPC-4/+30
Suggest removing semicolon in last expression only if it's type is known Fixes #67971 Is there a syntax for explicitly checking if a note doesn't exist in test output? Something like `//~ !NOTE ...` I believe r? @estebank deals with diagnostics.
2020-05-05Rollup merge of #71830 - oli-obk:subrepo_funness, r=Mark-SimulacrumDylan DPC-7/+1
Remove clippy from some leftover lists of "possibly failing" tools https://github.com/rust-lang/rust/pull/70655 successfully made clippy get built and tested on CI on every merge, but the lack of emitted toolstate info caused the toolstate to get updated to test-fail. We should remove clippy entirely from toolstate, as it now is always test-pass. The changes made in this PR reflect what we do for `rustdoc`, which is our preexisting tool that is gated on CI. r? @Mark-Simulacrum
2020-05-05Rollup merge of #69984 - lenary:lenary/force-uwtables, r=hanna-kruppeDylan DPC-5/+89
Add Option to Force Unwind Tables When panic != unwind, `nounwind` is added to all functions for a target. This can cause issues when a panic happens with RUST_BACKTRACE=1, as there needs to be a way to reconstruct the backtrace. There are three possible sources of this information: forcing frame pointers (for which an option exists already), debug info (for which an option exists), or unwind tables. Especially for embedded devices, forcing frame pointers can have code size overheads (RISC-V sees ~10% overheads, ARM sees ~2-3% overheads). In production code, it can be the case that debug info is not kept, so it is useful to provide this third option, unwind tables, that users can use to reconstruct the call stack. Reconstructing this stack is harder than with frame pointers, but it is still possible. --- This came up in discussion on #69890, and turned out to be a fairly simple addition. r? @hanna-kruppe
2020-05-05Restore the snapshot/rollback optimization for region constraintsMarkus Westerlind-13/+29