Commit Graph

66789 Commits

Author SHA1 Message Date
Samuel Holland
565a863bc2 Support dynamic linking for musl-based targets
Note that this commit does not affect mips-musl targets, as they do not
inherit from linux_musl_base.
2017-08-22 16:24:29 -05:00
Samuel Holland
c9645678e8 Update libunwind dependencies for musl
Use libgcc_s when linking dynamically. Convert the static libunwind to
static-nobundle, as libunwind.a is copied from musl_root and available
in the library search path.
2017-08-22 16:24:29 -05:00
Samuel Holland
bab6911f8a Tell the linker when we want to link a static executable
If the C runtime is linked statically, explicitly tell the linker that
the executable should be static.
2017-08-22 16:24:29 -05:00
Samuel Holland
054f310868 Disable PIE when linking statically
Static PIE support, while supported on musl, requires a patch to GCC.
Until/unless it is merged, adding '-pie' to the linker command line will
override '-static' and create a binary that requires a dynamic
interpreter (ld.so).
2017-08-22 16:24:29 -05:00
Samuel Holland
12ceed013c Introduce target feature crt_static_allows_dylibs
Most UNIX-like platforms do not allow shared libraries to statically
link their own libc, as libc expects to have consistent process-global
state. On those platforms, when we do not have a shared libc available,
we must not attempt to link dylibs or cdylibs. On Windows, however, it
is expected to statically link the CRT into dynamic libraries.

This feature is only relevant for targets that support both fully-static
and fully-dynamic linkage, such as musl on Linux.
2017-08-22 16:24:29 -05:00
Samuel Holland
beb8abe9a5 Introduce temporary target feature crt_static_respected
This feature allows targets to opt in to full support of the crt-static
feature. Currently, crt-static is allowed on all targets, even those
that really can't or really shouldn't support it. This works because it
is very loose in the specification of its effects. Changing the behavior
of crt-static to be more strict in how it chooses libraries and links
executables would likely cause compilation to fail on these platforms.

To avoid breaking existing uses of crt-static, whitelist targets that
support the new, stricter behavior. For all other targets, this changes
crt-static from being "mostly a no-op" to "explicitly a no-op".
2017-08-22 16:24:29 -05:00
Samuel Holland
3cb987862f Factor out a helper for the getting C runtime linkage
This commit makes no functional changes.
2017-08-22 16:24:29 -05:00
Samuel Holland
52832439ad Inline crt-static choice for pc-windows-msvc
This avoids the possibility of a duplicate or conflicting crt-static
command line option sent to rustc.
2017-08-22 16:24:29 -05:00
Samuel Holland
4b09dc6e39 Introduce crt_static target option in config.toml
This controls the value of the crt-static feature used when building the
standard library for a target, as well as the compiler itself when that
target is the host.
2017-08-22 16:24:29 -05:00
Samuel Holland
0c7a0e9851 Copy musl startup objects before building std
They are required for linking it, even though it is a library, because
crtn.o in post_link_objects, as hardcoded in src/librustc_back/target/
linux_musl_base.rs, is added to the linker command line for both
executables and libraries.
2017-08-22 16:24:29 -05:00
Samuel Holland
8606782bc1 Infer a default musl_root for native builds 2017-08-22 16:24:29 -05:00
Samuel Holland
1757a8701d Improve explanation of musl_root 2017-08-22 16:24:29 -05:00
Samuel Holland
15c141ce05 Remove incorrect special case of mips-musl
The libdl/librt/libpthread provided by musl are no-op (empty static
libraries) on all architectures, mips included.
2017-08-22 16:24:29 -05:00
bors
a24e0f25d7 Auto merge of #44033 - GuillaumeGomez:rollup, r=GuillaumeGomez
Rollup of 5 pull requests

- Successful merges: #43993, #44001, #44010, #44014, #44029
- Failed merges:
2017-08-22 13:59:20 +00:00
Guillaume Gomez
2dfb8d73f7 Rollup merge of #44029 - WiSaGaN:patch-1, r=alexcrichton
Fix typos in 1.20 release notes
2017-08-22 13:36:21 +02:00
Guillaume Gomez
7c856886ad Rollup merge of #44014 - Mark-Simulacrum:update-readme, r=alexcrichton
Update rustbuild README

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

r? @alexcrichton
2017-08-22 13:36:20 +02:00
Guillaume Gomez
6b62f34ecd Rollup merge of #44010 - GuillaumeGomez:read-links, r=frewsxcv
Add missing links for Read trait

r? @rust-lang/docs
2017-08-22 13:36:19 +02:00
Guillaume Gomez
80cc5e51f0 Rollup merge of #44001 - tamird:release-notes-1.16, r=alexcrichton
RELEASES.md: document 1.16 lifetime elision change

Closes #41105.

r? @Mark-Simulacrum cc @nikomatsakis
2017-08-22 13:36:18 +02:00
Guillaume Gomez
16a189863c Rollup merge of #43993 - tamird:better-wording-error, r=arielb1
borrowck: name the correct type in error message

Closes #36407.

r? @Mark-Simulacrum
2017-08-22 13:36:17 +02:00
bors
1177911790 Auto merge of #44008 - RalfJung:staged1, r=alexcrichton
Make sure crates not opting in to staged_api don't use staged_api

This also fixes the problem that with `-Zforce-unstable-if-unmarked` set, crates could not use `#[deprecated]`.

If you prefer, I can instead submit another version which just fixes this problem, but still allows the staged API attributes for all crates when  `-Zforce-unstable-if-unmarked` is set. I have prepared that at <https://github.com/RalfJung/rust/tree/staged2>. As yet another alternative, @alexcrichton suggested to turn this error into a lint, but that seems to be much more work, so is it worth it?

Cc @alexcrichton #43975
2017-08-22 11:15:10 +00:00
bors
7e5578da8c Auto merge of #44003 - LukasKalbertodt:patch-1, r=nikomatsakis
Add PartialEq/Eq impls to proc_macro::{Spacing, Delimiter}

I don't see a reason why those two types shouldn't be tested for equality. But I hardly know anything about proc macros, so I'm probably wrong :)
2017-08-22 08:32:14 +00:00
bors
6722996923 Auto merge of #43854 - estebank:missing-cond, r=nikomatsakis
Point out missing if conditional

On a case where an else conditional is missing, point this out
instead of the token immediately after the (incorrect) else block:

```
error: missing condition for `if` statemementt push fork -f

  --> $DIR/issue-13483.rs:16:5
   |
13 |    } else if {
   |             ^ expected if condition here
```

instead of

```
error: expected `{`, found `else`
  --> ../../src/test/ui/issue-13483.rs:14:7
   |
14 |     } else {
   |       ^^^^
```

Fix #13483.
2017-08-22 04:28:49 +00:00
Wangshan Lu
c40ec8199f Fix typos in 1.20 release notes 2017-08-22 11:29:05 +08:00
bors
942711e115 Auto merge of #43690 - scalexm:issue-28229, r=nikomatsakis
Generate builtin impls for `Clone`

This fixes a long-standing ICE and limitation where some builtin types implement `Copy` but not `Clone` (whereas `Clone` is a super trait of `Copy`).

However, this PR has a few side-effects:
* `Clone` is now marked as a lang item.
* `[T; N]` is now `Clone` if `T: Clone` (currently, only if `T: Copy` and for `N <= 32`).
* `fn foo<'a>() where &'a mut (): Clone { }` won't compile anymore because of how bounds for builtin traits are handled (e.g. same thing currently if you replace `Clone` by `Copy` in this example). Of course this function is unusable anyway, an error would pop as soon as it is called.

Hence, I'm wondering wether this PR would need an RFC...
Also, cc-ing @nikomatsakis, @arielb1.

Related issues: #28229, #24000.
2017-08-22 01:34:54 +00:00
bors
8df670b6a6 Auto merge of #43540 - petrochenkov:pathrelax, r=nikomatsakis
syntax: Relax path grammar

TLDR: Accept the disambiguator `::` in "type" paths (`Type::<Args>`), accept the disambiguator `::` before parenthesized generic arguments (`Fn::(Args)`).

The "turbofish" disambiguator `::<>` in expression paths is a necessary evil required for path parsing to be both simple and to give reasonable results.
Since paths in expressions usually refer to values (but not necessarily, e.g. `Struct::<u8> { field: 0 }` is disambiguated, but refers to a type), people often consider `::<>` to be inherent to *values*, and not *expressions* and want to write disambiguated paths for values even in contexts where disambiguation is not strictly necessary, for example when a path is passed to a macro `m!(Vec::<i32>::new)`.
The problem is that currently, if the disambiguator is not *required*, then it's *prohibited*. This results in confusion - see https://github.com/rust-lang/rust/issues/41740, https://internals.rust-lang.org/t/macro-path-uses-novel-syntax/5561.

This PR makes the disambiguator *optional* instead of prohibited in contexts where it's not strictly required, so people can pass paths to macros in whatever form they consider natural (e.g. disambiguated form for value paths).
This PR also accepts the disambiguator in paths with parenthesized arguments (`Fn::(Args)`) for consistency and to simplify testing of stuff like https://github.com/rust-lang/rust/pull/41856#issuecomment-301219194.

Closes https://github.com/rust-lang/rust/issues/41740

cc @rust-lang/lang
r? @nikomatsakis
2017-08-21 23:03:57 +00:00
bors
4fdb4bedfd Auto merge of #44009 - pnkfelix:mir-borrowck-as-query, r=arielb1
Mir borrowck as query

Turn the `mir-borrowck` pass (aka "transform") into a query.

(If I had realized how relatively easy this was going to be, I would have made it part of #43108. `let hindsight = 20/20;`)
2017-08-21 20:16:21 +00:00
bors
80be2f8697 Auto merge of #43971 - alexcrichton:lint-statements, r=michaelwoerister
rustc: Add `Local` to the HIR map of parents

When walking parents for lints we want to be sure to hit `let` statements which
can have attributes, so hook up these statements in the HIR map.

Closes #43910
2017-08-21 17:38:26 +00:00
Mark Simulacrum
1db158d498 Update rustbuild README 2017-08-21 06:22:01 -06:00
Felix S. Klock II
224c6ca2ee Moved support code for rustc_mir::borrow_check query out of mod transform. 2017-08-21 13:10:13 +02:00
Felix S. Klock II
c280afcc1c Remove the rustc_mir::transform entry point for mir-borrowck. 2017-08-21 12:49:18 +02:00
Felix S. Klock II
4da2a88abc Expose mir-borrowck via a query.
(A followup commit removes the mir::transform based entry point.)
2017-08-21 12:49:18 +02:00
Ralf Jung
472e7e3ee2 rustc_plugin: use staged API 2017-08-21 12:46:36 +02:00
Guillaume Gomez
871bd237ee Add missing links for Read trait 2017-08-21 11:45:33 +02:00
bors
757b7ac2ab Auto merge of #43986 - petrochenkov:pubcrate3, r=pnkfelix
rustc: Remove some dead code

Extracted from https://github.com/rust-lang/rust/pull/43192

r? @eddyb
2017-08-21 08:14:17 +00:00
bors
06bf94a129 Auto merge of #43929 - oli-obk:use_placement, r=nrc
Improve placement of `use` suggestions

r? @nrc

cc @estebank @Mark-Simulacrum

fixes #42835
fixes #42548
fixes #43769
2017-08-21 05:18:03 +00:00
bors
cf56cf360e Auto merge of #44004 - frewsxcv:frewsxcv-bors-docs, r=Mark-Simulacrum
Fix broken homu link in CONTRIBUTING.md.

Fixes the docs aspect of https://github.com/rust-lang/rust/issues/43898.
2017-08-21 01:27:00 +00:00
Corey Farwell
c7cd79b58f Fix broken homu link in CONTRIBUTING.md.
Fixes the docs aspect of https://github.com/rust-lang/rust/issues/43898.
2017-08-20 21:24:14 -04:00
Tamir Duberstein
c1ed862bc4
borrowck: name the correct type in error message
Closes #36407.
2017-08-20 18:31:36 -04:00
Lukas Kalbertodt
4ba242b7e0 Add PartialEq/Eq impls to proc_macro::{Spacing, Delimiter}
I don't see a reason why those two types shouldn't be tested for equality.
2017-08-20 23:20:34 +02:00
bors
8c303ed879 Auto merge of #44000 - ids1024:redox-exec-error, r=alexcrichton
redox: Correct error on exec when file is not found

`.raw_os_error()` (called in `spawn()`) returned None, so this produced an incorrect error.
2017-08-20 20:29:08 +00:00
Tamir Duberstein
45233518a8
RELEASES.md: document 1.16 lifetime elision change
Closes #41105.
2017-08-20 15:49:36 -04:00
Ian Douglas Scott
a41c4f80d9
redox: Correct error on exec when file is not found
`.raw_os_error()` (called in `spawn()`) returned None, so this produced an incorrect error.
2017-08-20 10:10:03 -07:00
bors
c1111dfcac Auto merge of #43996 - shanavas786:fix-typo, r=frewsxcv
Fix typo in doc
2017-08-20 15:58:05 +00:00
Ralf Jung
5a25e1dad4 Make sure crates not opting in to staged_api don't use staged_api 2017-08-20 16:57:36 +02:00
Ralf Jung
350434370d Test staging attributes when -Zforce-unstable-if-unmarked is set
Both new tests currently fail
2017-08-20 16:57:17 +02:00
bors
3d9f57a292 Auto merge of #43978 - GuillaumeGomez:missing-links, r=frewsxcv
Missing links

r? @rust-lang/docs
2017-08-20 13:28:18 +00:00
bors
fe895bfb90 Auto merge of #43976 - dylanmckay:update-builtins, r=alexcrichton
Update the compiler_builtins submodule

Fixes #43411
2017-08-20 09:39:12 +00:00
Shanavas M
ee3463eb7f Fix typo in doc 2017-08-20 11:07:42 +03:00
bors
5fa54ee063 Auto merge of #43911 - arthurprs:update-jemalloc, r=alexcrichton
Update jemalloc to 4.5.0

Second try, including the fix for osx deadlock jemalloc/jemalloc#895.

cc https://github.com/rust-lang/rust/pull/41861 @alexcrichton @RalfJung
2017-08-20 07:18:38 +00:00
bors
498a8f36bf Auto merge of #43965 - frewsxcv:frewsxcv-filter-map, r=QuietMisdreavus
Minor Iterator::filter_map description rewording.

Fixes https://github.com/rust-lang/rust/issues/39294.
2017-08-20 04:50:22 +00:00