Commit graph

123640 commits

Author SHA1 Message Date
Manish Goregaokar
378f46d1f2
Rollup merge of #74444 - Alexendoo:test-69414, r=nikomatsakis
Add regression test for #69414

Closes #69414 (no longer ICEs after #74159)
2020-07-17 18:13:45 -07:00
Manish Goregaokar
8d1bb0e748
Rollup merge of #74441 - eddyb:zlib-on-nixos, r=nagisa
bootstrap.py: patch RPATH on NixOS to handle the new zlib dependency.

This is a stop-gap until #74420 is resolved (assuming we'll patch beta to statically link zlib).

However, I've been meaning to rewrite the NixOS support we have in `bootstrap.py` for a while now, and had to in order to cleanly add zlib as a dependency (the second commit is a relatively small delta in functionality, compared to the first).

Previously, we would extract the `ld-linux.so` path from the output of `ldd /run/current-system/sw/bin/sh`, which assumes a lot. On top of that we didn't use any symlinks, which meant if the user ran  GC (`nix-collect-garbage`), e.g. after updating their system, their `stage0` binaries would suddenly be broken (i.e. referring to files that no longer exist).
We were also using `patchelf` directly, assuming it can be found in `$PATH` (which is not necessarily true).

My new approach relies on using `nix-build` to get the following "derivations" (packages, more or less):
* `stdenv.cc.bintools`, which has a `nix-support/dynamic-linker` file containing the path to `ld-linux.so`
  * reading this file is [the canonical way to run `patchelf --set-interpreter`](https://github.com/NixOS/nixpkgs/search?l=Nix&q=%22--set-interpreter+%24%28cat+%24NIX_CC%2Fnix-support%2Fdynamic-linker%29%22)
* `patchelf` (so that the user doesn't need to have it installed)
* `zlib`, for the `libz.so` dependency of `libLLVM-*.so` (until #74420 is resolved, presumably)

This is closer to how software is built on Nix, but I've tried to keep it as simple as possible (and not add e.g. a `stage0.nix` file).
Symlinks to each of those dependencies are kept in `stage0/.nix-deps`, which prevents GC from invalidating `stage0` binaries.

r? @nagisa cc @Mark-Simulacrum @oli-obk @davidtwco
2020-07-17 18:13:44 -07:00
Manish Goregaokar
7b66c6678c
Rollup merge of #74418 - rye:gha-dedup-shell-setting, r=pietroalbini
ci: Set `shell: bash` as a default, remove duplicates

A follow-up to #74406, this commit merely removes the `shell: bash` lines where they were added in favor of setting defaults for *all* "run" steps in the jobs that run the tests.

The changes in #74406 were needed because of an upstream change to the `windows-2019` GitHub Actions image. Previously, the configuration worked fine without specifying `shell: bash`, but for some reason this broke with a new change that was deployed today. The preceding PR was a hotfix to get CI passing, but there was a slightly less duplicative way to specify the default shell for the jobs, which was to set the `defaults.run` option.

This change applies to the `pr`, `try`, `auto`, and `auto-fallible` jobs, which are derived from the YAML-anchor `base-ci-job`.  I did not apply these changes to the `master`, `try-success`, `try-failure`, `auto-success`, or `auto-failure` jobs because they have only a few steps.

cc/r? @Mark-Simulacrum
2020-07-17 18:13:42 -07:00
Manish Goregaokar
e775b4dbc4
Rollup merge of #74069 - erikdesjardins:bad-niche, r=nikomatsakis
Compare tagged/niche-filling layout and pick the best one

Finishes up #71045, and so fixes #63866.

cc @eddyb
r? @nikomatsakis (since @eddyb wrote the first commit)
2020-07-17 18:13:40 -07:00
Manish Goregaokar
01418bd1aa
Rollup merge of #72414 - KodrAus:feat/stdlazy, r=Mark-Simulacrum
Add lazy initialization primitives to std

Follow-up to #68198

Current RFC: https://github.com/rust-lang/rfcs/pull/2788

Rebased and fixed up a few of the dangling comments. Some notes carried over from the previous PR:

- [ ] Naming. I'm ok to just roll with the `Sync` prefix like `SyncLazy` for now, but [have a personal preference for `Atomic`](https://github.com/rust-lang/rfcs/pull/2788#issuecomment-574466983) like `AtomicLazy`.
- [x] [Poisoning](https://github.com/rust-lang/rfcs/pull/2788#discussion_r366725768). It seems like there's [some regret around poisoning in other `std::sync` types that we might want to just avoid upfront for `std::lazy`, especially if that would align with a future `std::mutex` that doesn't poison](https://rust-lang.zulipchat.com/#narrow/stream/219381-t-libs/topic/parking_lot.3A.3AMutex.20in.20std/near/190331199). Personally, if we're adding these types to `std::lazy` instead of `std::sync`, I'd be on-board with not worrying about poisoning in `std::lazy`, and potentially deprecating `std::sync::Once` and `lazy_static` in favour of `std::lazy` down the track if it's possible, rather than attempting to replicate their behavior. cc @Amanieu @sfackler.
- [ ] [Consider making`SyncOnceCell::get` blocking](https://github.com/matklad/once_cell/pull/92). There doesn't seem to be consensus in the linked PR on whether or not that's strictly better than the non-blocking variant.

In general, none of these seem to be really blocking an initial unstable merge, so we could possibly kick off a FCP if y'all are happy?

cc @matklad @pitdicker have I missed anything, or were there any other considerations that have come up since we last looked at this?
2020-07-17 18:13:39 -07:00
Ashley Mannix
fe63905708 link once_cell feature to #74465 2020-07-18 10:12:02 +10:00
bors
d3df8512d2 Auto merge of #74461 - Manishearth:rollup-xadbh00, r=Manishearth
Rollup of 18 pull requests

Successful merges:

 - #71670 (Enforce even more the code blocks attributes check through rustdoc)
 - #73930 (Make some Option methods const)
 - #74009 (Fix MinGW `run-make-fulldeps` tests)
 - #74056 (Add Arguments::as_str().)
 - #74169 (Stop processing unreachable blocks when solving dataflow)
 - #74251 (Teach bootstrap about target files vs target triples)
 - #74288 (Fix src/test/run-make/static-pie/test-aslr.rs)
 - #74300 (Use intra-doc links in core::iter module)
 - #74364 (add lazy normalization regression tests)
 - #74368 (Add CSS tidy check)
 - #74394 (Remove leftover from emscripten fastcomp support)
 - #74411 (Don't assign `()` to `!` MIR locals)
 - #74416 (Use an UTF-8 locale for the linker.)
 - #74424 (Move hir::Place to librustc_middle/hir)
 - #74428 (docs: better demonstrate that None values are skipped as many times a…)
 - #74438 (warn about uninitialized multi-variant enums)
 - #74440 (Fix Arc::as_ptr docs)
 - #74452 (intra-doc links: resolve modules in the type namespace)

Failed merges:

r? @ghost
2020-07-17 21:10:14 +00:00
Manish Goregaokar
c587386fd6
Rollup merge of #74452 - Manishearth:module-type-ns, r=jyn514
intra-doc links: resolve modules in the type namespace

Fixes https://github.com/rust-lang/rust/issues/62830

Modules actually live in the type namespace, not all three, and it's not possible to clash a type with a module.
2020-07-17 14:09:33 -07:00
Manish Goregaokar
ff1c53f811
Rollup merge of #74440 - Abendstolz:patch-1, r=hanna-kruppe
Fix Arc::as_ptr docs

As a non-native speaker I stumbled upon this, looked it up and couldn't find a phrase, so I made my own assumption that "in any way" was meant (which is the meaning I would've deduced anyway)
2020-07-17 14:09:31 -07:00
Manish Goregaokar
cdedae82cc
Rollup merge of #74438 - RalfJung:uninit-lint, r=davidtwco
warn about uninitialized multi-variant enums

Fixes https://github.com/rust-lang/rust/issues/73608
2020-07-17 14:09:29 -07:00
Manish Goregaokar
3b7e2862db
Rollup merge of #74428 - tshepang:better-filter-map-doc, r=jonas-schievink
docs: better demonstrate that None values are skipped as many times a…

…s needed
2020-07-17 14:09:28 -07:00
Manish Goregaokar
222d250837
Rollup merge of #74424 - sexxi-goose:move_hir_place, r=nikomatsakis
Move hir::Place to librustc_middle/hir

Needed to support https://github.com/rust-lang/project-rfc-2229/issues/7

Currently rustc_typeck depends on rustc_middle for definition TypeckTables, etc.
For supporting project-rfc-2229#7, rustc_middle would've to depend on
rustc_typeck for Place -- introducing a circular dependency.

This resembles the MIR equivalent of `Place` located in `lbrustc_middle/mir`.

Separate PR for this move will make the actual PR for using Places to represent captures cleaner/more focused.

r? @nikomatsakis  @matthewjasper
2020-07-17 14:09:26 -07:00
Manish Goregaokar
eef22dae7e
Rollup merge of #74416 - NieDzejkob:linker-locale-utf8, r=oli-obk
Use an UTF-8 locale for the linker.

Using a `C` locale breaks unicode filenames on Guix, where the linker is wrapped by a Guile program.
2020-07-17 14:09:24 -07:00
Manish Goregaokar
87d01d11e1
Rollup merge of #74411 - jonas-schievink:unbreak-mir, r=matthewjasper
Don't assign `()` to `!` MIR locals

Implements the fix described in https://github.com/rust-lang/rust/issues/73860#issuecomment-651731893.

Fixes https://github.com/rust-lang/rust/issues/73860

r? @matthewjasper
2020-07-17 14:09:22 -07:00
Manish Goregaokar
105cd4b21e
Rollup merge of #74394 - bjorn3:remove_emscripten_leftover, r=spastorino
Remove leftover from emscripten fastcomp support

This is no longer used since #63649
2020-07-17 14:09:20 -07:00
Manish Goregaokar
ef0540bb75
Rollup merge of #74368 - GuillaumeGomez:css-tidy-check, r=Mark-Simulacrum
Add CSS tidy check

r? @Mark-Simulacrum
2020-07-17 14:09:18 -07:00
Manish Goregaokar
344b5e06fa
Rollup merge of #74364 - lcnr:lazy-norm-tests, r=nikomatsakis
add lazy normalization regression tests

We previously didn't have simple tests which fail if we aren't careful around lazy normalization.

We now do.
2020-07-17 14:09:16 -07:00
Manish Goregaokar
c9010d6e85
Rollup merge of #74300 - lzutao:iterator-intra, r=jyn514
Use intra-doc links in core::iter module

This will make core::iter doc depend less on std doc.
2020-07-17 14:09:15 -07:00
Manish Goregaokar
6b2ccc7180
Rollup merge of #74288 - haraldh:test_aslr, r=petrochenkov
Fix src/test/run-make/static-pie/test-aslr.rs

Might be subject to the birthday paradox occasionally, causing spurious failures.

Addresses: https://github.com/rust-lang/rust/pull/70740#pullrequestreview-430981320
2020-07-17 14:09:13 -07:00
Manish Goregaokar
7d4e6c0aca
Rollup merge of #74251 - shepmaster:bootstrap-target-files, r=Mark-Simulacrum
Teach bootstrap about target files vs target triples

`rustc` allows passing in predefined target triples as well as JSON
target specification files. This change allows bootstrap to have the
first inkling about those differences. This allows building a
cross-compiler for an out-of-tree architecture (even though that
compiler won't work for other reasons).

Even if no one ever uses this functionality, I think the newtype
around the `Interned<String>` improves the readability of the code.
2020-07-17 14:09:11 -07:00
Manish Goregaokar
10b7eecbdd
Rollup merge of #74169 - ecstatic-morse:dataflow-unreachable, r=pnkfelix
Stop processing unreachable blocks when solving dataflow

...instead we `debug_assert` that the user is not checking the dataflow state for an unreachable block. This resolves a FIXME in the dataflow engine. The old behavior was an artifact of the previous dataflow framework. Things should run a tiny bit faster now, but I suspect not enough to show up in benchmarks. AFAIK, only the generator transform runs dataflow on MIR with unreachable basic blocks.

This PR also adds some utility methods to `mir::traversal`.

r? @pnkfelix
2020-07-17 14:09:08 -07:00
Manish Goregaokar
9c84c6b836
Rollup merge of #74056 - fusion-engineering-forks:fmt-arguments-as-str, r=Amanieu
Add Arguments::as_str().

There exist quite a few macros in the Rust ecosystem which use `format_args!()` for formatting, but special case the one-argument case for optimization:

```rust
#[macro_export]
macro_rules! some_macro {
    ($s:expr) => { /* print &str directly, no formatting, no buffers */ };
    ($s:expr, $($tt:tt)*) => { /* use format_args to write to a buffer first */ }
}
```

E.g. [here](7a961f0fbe/src/macros.rs (L48-L58)), [here](20f9a9e223/src/macros.rs (L9-L17)), and [here](7b679cd6da/px4/src/logging.rs (L45-L52)).

The problem with these is that a forgotten argument such as in `some_macro!("{}")` will not be diagnosed, but just prints `"{}"`.

With this PR, it is possible to handle the no-arguments case separately *after* `format_args!()`, while simplifying the macro. Then these macros can give the proper error about a missing argument, just like `print!("{}")` does, while still using the same optimized implementation as before.

This is even more important with [RFC 2795](https://github.com/rust-lang/rfcs/pull/2795), to make sure `some_macro!("{some_variable}")` works as expected.
2020-07-17 14:09:06 -07:00
Manish Goregaokar
be3b972820
Rollup merge of #74009 - mati865:mingw-tests-implib, r=nikomatsakis
Fix MinGW `run-make-fulldeps` tests

`compiler-rt-works-on-mingw` and `libs-search-path` were not ran because `only-mingw` doesn't match any target.
Enabled and verified few ignored tests with `windows-gnu` toolchain. They are still ignored on MSVC since I'm not experienced with this target.
2020-07-17 14:09:04 -07:00
Manish Goregaokar
f6cd31c3b7
Rollup merge of #73930 - a1phyr:feature_const_option, r=dtolnay
Make some Option methods const

Tracking issue: #67441

Constantify the following methods of `Option`:
- `as_ref`
- `is_some`
- `is_none`
- `iter` (not sure about this one, but it is possible, and will be useful when const traits are a thing)

cc @rust-lang/wg-const-eval @rust-lang/libs
2020-07-17 14:09:02 -07:00
Manish Goregaokar
3006ea3560
Rollup merge of #71670 - GuillaumeGomez:enforce-codeblocks-attribute-check, r=Mark-Simulacrum
Enforce even more the code blocks attributes check through rustdoc

`rustdoc` now has a lint which allows it to warn if a code block attribute is malformated (which can end up in bad situations, even more in case of testing examples!). Now it'll fail if such a situation is encountered when testing markdown code blocks examples.

r? @Mark-Simulacrum
2020-07-17 14:08:55 -07:00
Manish Goregaokar
69dab50762 Add test for module ambiguity 2020-07-17 13:04:54 -07:00
Mateusz Mikuła
af1d01ebb3 Fix various tests to run on windows-gnu 2020-07-17 20:45:29 +02:00
Manish Goregaokar
fe98de2a8e intra-doc links: Resolve modules in type namespace 2020-07-17 11:04:36 -07:00
bors
39d5a61f2e Auto merge of #72983 - Lezzz:rename-typeck, r=nikomatsakis
Rename TypeckTables to TypeckResults.

Originally suggested by @eddyb.
2020-07-17 17:25:09 +00:00
Mateusz Mikuła
933a06d8a3 Remove invalid test
When ran on Windows `cp` will follow symlink: `checkout/build/<target>/<stage>/lib/rustlib/src/rust`.
It points to `checkout` which means the test will get stuck in copying loop until there is no space left.
2020-07-17 18:07:53 +02:00
Mateusz Mikuła
2a9b51dcc4 Allow matching test by target and env 2020-07-17 18:07:51 +02:00
Mateusz Mikuła
48fe5fcbb8 Create implib for dlls when testing MinGW targets 2020-07-17 18:07:50 +02:00
Mara Bos
9c3353b97c Add tracking issue number for fmt_as_str. 2020-07-17 17:56:55 +02:00
Mara Bos
0c51f53edf Make fmt::Arguments::as_str() return a 'static str. 2020-07-17 17:56:55 +02:00
Erik Desjardins
3924672ccc document test changes 2020-07-17 10:53:02 -04:00
Erik Desjardins
2e431c62b6 compare tagged/niche-filling layout and pick the best one 2020-07-17 10:52:57 -04:00
Eduard-Mihai Burtescu
b0a7fbd91f [experiment] ty/layout: compute both niche-filling and tagged layouts for enums. 2020-07-17 10:52:30 -04:00
Alex Macleod
f7979d3c93 Add regression test for #69414
Closes #69414 (no longer ICEs after #74159)
2020-07-17 15:45:50 +01:00
Ralf Jung
87b49764bc warn about uninit multi-variant enums 2020-07-17 16:39:59 +02:00
Jake Goulding
e2b337dc57 Teach bootstrap about target files vs target triples
`rustc` allows passing in predefined target triples as well as JSON
target specification files. This change allows bootstrap to have the
first inkling about those differences. This allows building a
cross-compiler for an out-of-tree architecture (even though that
compiler won't work for other reasons).

Even if no one ever uses this functionality, I think the newtype
around the `Interned<String>` improves the readability of the code.
2020-07-17 10:08:04 -04:00
bors
3014f23ddd Auto merge of #74439 - RalfJung:miri, r=RalfJung
update Miri

Fixes https://github.com/rust-lang/rust/issues/74345
2020-07-17 13:54:21 +00:00
Kristofer Rye
586629c0b6
ci: Replace exec-with-shell wrapper with "plain bash"
Also, promote defaults.run.shell from inside only the primary jobs to
the top level.

The src/ci/exec-with-shell.py wrapper script was formerly used to change
out the shell mid-job by intercepting a CI_OVERRIDE_SHELL environment
variable.  Now, instead, we just set `bash` as the global default across
all jobs, and we also delete the exec-with-shell.py script.

Signed-off-by: Kristofer Rye <kristofer.rye@gmail.com>
2020-07-17 08:44:14 -05:00
Mara Bos
e17c17a1af Make Arguments::as_str() work for empty format strings. 2020-07-17 15:35:59 +02:00
Mara Bos
bc4e33e6c1 Add #[inline] to Arguments::as_str(). 2020-07-17 15:35:59 +02:00
Mara Bos
e73a23fa96 Add Arguments::as_str(). 2020-07-17 15:35:58 +02:00
Kristofer Rye
49f5078048
ci: Stop setting CI_OVERRIDE_SHELL environment variable
This will render the src/ci/exec-with-shell.py script more or less
useless, but we're going to replace that by just using the system bash
instead.

Signed-off-by: Kristofer Rye <kristofer.rye@gmail.com>
2020-07-17 08:29:01 -05:00
Lzu Tao
5ffdd7c565 Deny intra_doc_link_resolution_failure in libcore 2020-07-17 13:25:06 +00:00
Eduard-Mihai Burtescu
b5076fbb96 bootstrap.py: patch RPATH on NixOS to handle the new zlib dependency. 2020-07-17 16:25:05 +03:00
Abendstolz
8aeecc63f8
Fix Arc::as_ptr docs
As a none-native speaker I stumbled upon this, looked it up and couldn't find a phrase, so I made my own assumption that "in any way" was meant (which is the meaning I would've deduced anyway)
2020-07-17 15:21:57 +02:00
Ralf Jung
8a917f9873 update Miri 2020-07-17 15:07:15 +02:00