Commit Graph

63389 Commits

Author SHA1 Message Date
bors
2c48ae6f7f Auto merge of #40658 - eddyb:lay-more-out, r=arielb1
Use ty::layout for ABI computation instead of LLVM types.

This is the first step in creating a backend-agnostic library for computing call ABI details from signatures.
I wanted to open the PR *before* attempting to move `cabi_*` from trans to avoid rebase churn in #39999.
**EDIT**: As I suspected, #39999 needs this PR to fully work (see https://github.com/rust-lang/rust/pull/39999#issuecomment-287723379).

The first 3 commits add more APIs to `ty::layout` and replace non-ABI uses of `sizing_type_of`.
These APIs are probably usable by other backends, and miri too (cc @stoklund @solson).

The last commit rewrites `rustc_trans::cabi_*` to use `ty::layout` and new `rustc_trans::abi` APIs.
Also, during the process, a couple trivial bugs were identified and fixed:
* `msp430`, `nvptx`, `nvptx64`: type sizes *in bytes* were compared with `32` and `64`
* `x86` (`fastcall`): `f64` was incorrectly not treated the same way as `f32`

Although not urgent, this PR also uses the more general "homogenous aggregate" logic to fix #32045.
2017-04-09 13:08:10 +00:00
Eduard-Mihai Burtescu
f0636b61c7 rustc_trans: use ty::layout for ABI computation instead of LLVM types. 2017-04-09 16:06:56 +03:00
bors
ebb10a6131 Auto merge of #41095 - clarcharr:as_extras, r=alexcrichton
Add as_c_str

Again, tying up some consistencies with `CString`.
2017-04-09 09:17:34 +00:00
bors
cff81da514 Auto merge of #41163 - nagisa:ldflags-llvm-config, r=alexcrichton
Specify type libraries for llvm-config --ldflags

This matters on systems where static libraries and dynamic libraries reside in
different location
2017-04-09 05:49:31 +00:00
bors
c2d186a3c9 Auto merge of #41154 - bluss:slice-rfind, r=alexcrichton
Implement .rfind() for slice iterators Iter and IterMut

Just like the forward case find, implement rfind explicitly for slice iterators Iter and IterMut.
2017-04-09 03:30:09 +00:00
Paul Faria
a6f7628ea2 Use the existing path when removing the prefix fails. This allows the use of out-of-tree paths to be specified 2017-04-08 18:53:57 -04:00
bors
b2d9b6323e Auto merge of #41092 - jonhoo:std-fence-intrinsics, r=alexcrichton
Add safe wrapper for atomic_compilerfence intrinsics

This PR adds a proposed safe wrapper for the `atomic_singlethreadfence_*` intrinsics introduced by [RFC #888](https://github.com/rust-lang/rfcs/pull/888). See #41091 for further discussion.
2017-04-08 22:37:35 +00:00
Jorge Aparicio
2fed2a2395 this code block is text not Rust code 2017-04-08 15:51:18 -05:00
Eduard-Mihai Burtescu
43b227f3bd rustc: add some abstractions to ty::layout for a more concise API. 2017-04-08 23:41:18 +03:00
Eduard-Mihai Burtescu
c977daf97c rustc_trans: avoid sizing_type_of everywhere possible. 2017-04-08 23:40:54 +03:00
Eduard-Mihai Burtescu
49872b859e rustc: add a TyLayout helper for type-related layout queries. 2017-04-08 23:40:52 +03:00
Shiz
536011d929 Fix jemalloc support for musl
Just like DragonFlyBSD, using the same symbols as the system allocator will
result in a segmentation fault at runtime due to allocator mismatches.
As such, prefix the jemalloc symbols instead.
2017-04-08 22:28:32 +02:00
Alex Crichton
d94f2c928c Update cargo submodules
Brings in a fix for #40955 through rust-lang/cargo#3898.

Closes #40955
2017-04-08 13:10:08 -07:00
bors
666e7148d1 Auto merge of #41148 - arielb1:dead-unwind, r=nagisa
borrowck::mir::dataflow: ignore unwind edges of empty drops

This avoids creating drop flags in many unnecessary situations.

Fixes #41110.

r? @nagisa

beta-nominating because regression. However, that is merely a small perf regression and codegen changes are always risky, so we might let this slide for 1.17.
2017-04-08 19:47:31 +00:00
Ariel Ben-Yehuda
6979798687 borrowck::mir::dataflow: ignore unwind edges of empty drops
This avoids creating drop flags in many unnecessary situations.

Fixes #41110.
2017-04-08 22:46:50 +03:00
projektir
28a232a59a Adding links around Sender/SyncSender/Receiver errors; Adding more documentation to channel() and sync_channel(); adding more links #29377 2017-04-08 15:33:21 -04:00
Jon Gjengset
f093d59c31
Address @parched's comments 2017-04-08 14:03:17 -04:00
Simonas Kazlauskas
aeab73c938 Specify type libraries for llvm-config --ldflags
This matters on systems where static libraries and dynamic libraries reside in
different location
2017-04-08 17:53:16 +03:00
bors
a61011761d Auto merge of #41055 - Archytaus:compile-fail/const-match-pattern-arm, r=arielb1
Fixed ICEs with pattern matching in const expression

Fixed 2 ICEs with when pattern matching inside a constant expression.

Both of these ICEs now resolve to an appropriate compiler error.

1. ICE was caused by a compiler bug to implement discriminant const qualify.

    I removed this intentionally thrown bug and changed it to a FIXME as the unimplemented expression type is handled as a compiler error elsewhere.

2. ICE was caused during a drop check when checking if a variable lifetime outlives the current scope if there was no parent scope .

    I've changed it to stop checking if there is no parent scope for the current scope. It is valid syntax for a const variable to be assigned a match expression with no enclosing scope.

    The ICE seemed to mainly be used as a defensive check for bugs elsewhere.

Fixes #38199.
Fixes #31577.
Fixes #29093.
Fixes #40012.
2017-04-08 14:05:06 +00:00
bors
fe39e94d6c Auto merge of #40887 - estebank:ty-placeholder, r=petrochenkov
Introduce `TyErr` independent from `TyInfer`

Add a `TyErr` type to represent unknown types in places where
parse errors have happened, while still able to build the AST.

Initially only used to represent incorrectly written fn arguments and
avoid "expected X parameters, found Y" errors when called with the
appropriate amount of parameters. We cannot use `TyInfer` for this as
`_` is not allowed as a valid argument type.

Example output:

```rust
error: expected one of `:` or `@`, found `,`
  --> file.rs:12:9
   |
12 | fn bar(x, y: usize) {}
   |         ^

error[E0061]: this function takes 2 parameters but 3 parameters were supplied
  --> file.rs:19:9
   |
12 | fn bar(x, y) {}
   | --------------- defined here
...
19 |     bar(1, 2, 3);
   |         ^^^^^^^ expected 2 parameters
```

Fix #34264.
2017-04-08 11:47:48 +00:00
bors
4cadff61ef Auto merge of #40775 - estebank:variant-as-type, r=petrochenkov
Suggest using enum when a variant is used as a type

Given a file:

```rust
enum Fruit {
    Apple(i64),
    Orange(i64),
}

fn should_return_fruit() -> Apple {
    Apple(5)
}
```

Provide the following output:

```rust
error[E0412]: cannot find type `Apple` in this scope
  --> file.rs:16:29
   |
16 | fn should_return_fruit() -> Apple {
   |                             ^^^^^ not found in this scope
   |
help: there is an enum variant `Fruit::Apple`, did you mean to use `Fruit`?
  --> file.rs:12:5
   |
12 |     Apple(i64),
   |     ^^^^^^^^^^

error[E0425]: cannot find function `Apple` in this scope
  --> file.rs:17:5
   |
17 |     Apple(5)
   |     ^^^^^ not found in this scope
   |
   = help: possible candidate is found in another module, you can import it into scope:
             `use Fruit::Apple;`
```

Fix #35675.
2017-04-08 09:23:28 +00:00
Vadim Petrochenkov
ad58d37c56 Fix move checking for nested union fields 2017-04-08 11:52:37 +03:00
bors
3178d4318c Auto merge of #41156 - TimNN:rollup, r=TimNN
Rollup of 4 pull requests

- Successful merges: #41135, #41143, #41146, #41152
- Failed merges:
2017-04-08 06:56:17 +00:00
Tim Neumann
c04b39f1f8 Rollup merge of #41152 - cuviper:bootstrap-armv7, r=japaric
bootstrap.py: fix armv7 detection

This matches the logic that was in `./configure` before f8ca805422.
2017-04-08 08:55:10 +02:00
Tim Neumann
d6c17735cb Rollup merge of #41146 - est31:master, r=nrc
pub(restricted) didn't make it into 1.17

Gets shipped in 1.18 instead.
2017-04-08 08:55:10 +02:00
Tim Neumann
2e4ab07fa0 Rollup merge of #41143 - stjepang:optimize-bool-fetch-nand, r=nagisa
Optimize AtomicBool::fetch_nand

This is an attempt to push the PR #40563 to completion.

Benchmark: [source](https://gist.github.com/stjepang/023f5025623f5474184f9f4dfd6379ae)
Improvement:

```
 name  old_ ns/iter  new_ce_ ns/iter  diff ns/iter   diff %
 1t    146,440       89,904                -56,536  -38.61%
 2t    561,456       316,835              -244,621  -43.57%
 4t    2,822,821     1,005,424          -1,817,397  -64.38%
```

r? @eddyb
cc @alexcrichton @nagisa
2017-04-08 08:55:09 +02:00
Tim Neumann
29880e678f Rollup merge of #41135 - japaric:unstable-docs, r=steveklabnik
document some existing unstable features

"msp430-interrupt", "ptx-kernel" and #![compiler_builtins_lib]

r? @steveklabnik
2017-04-08 08:55:08 +02:00
bors
547c12b8a6 Auto merge of #41147 - aidanhs:aphs-fix-appveyor-cache, r=TimNN
Disable errexit for sanity checking git repo

Unblock appveyor
2017-04-08 04:21:43 +00:00
Jorge Aparicio
f76a3036ef fake the feature-gate-linker-flavor compile fail test
as there's no way to generate a `#![feature(linker_flavor)]` error
2017-04-07 21:47:58 -05:00
Ulrik Sverdrup
5d2f270395 slice: Implement .rfind() for slice iterators Iter and IterMut
Just like the forward case find, implement rfind explicitly
2017-04-08 03:45:48 +02:00
Esteban Küber
2b2eeda083 Move tests from ui to cfail 2017-04-07 17:22:55 -07:00
Josh Stone
5c0c3e803d bootstrap.py: fix armv7 detection
This matches the logic that was in `./configure` before f8ca805422.
2017-04-07 17:16:52 -07:00
Dylan Maccora
d35fa1e98b Removing broken examples 2017-04-08 08:12:50 +10:00
Esteban Küber
8c31412c2f Merge branch 'master' into ty-placeholder 2017-04-07 14:55:45 -07:00
Nick Sweeting
9765fbc813 fix build errors 2017-04-07 16:42:56 -04:00
Clar Charr
68909b0ec0 Add as_c_str. 2017-04-07 15:19:02 -04:00
Aidan Hobson Sayers
bd4f3815eb Disable errexit for sanity checking git repo 2017-04-07 20:15:02 +01:00
est31
bfc08c13cc pub(restricted) didn't make it into 1.17
Gets shipped in 1.18 instead.
2017-04-07 21:07:33 +02:00
Stjepan Glavina
f7ffe5bd24 Replace compare_exchange with swap 2017-04-07 18:04:15 +02:00
Jorge Aparicio
e280515499 hack: add a linker_flavor feature gate
to make tidy accept `-Z linker-flavor` documentation
2017-04-07 10:52:57 -05:00
Jorge Aparicio
2a177b7715 add some documentation to the unstable book 2017-04-07 10:52:42 -05:00
Jorge Aparicio
95bb45431a remove workaround for rust-lang/rust#39880
committed by mistake
2017-04-07 10:52:42 -05:00
Jorge Aparicio
9d11b089ad -Z linker-flavor
This patch adds a `-Z linker-flavor` flag to rustc which can be used to invoke
the linker using a different interface.

For example, by default rustc assumes that all the Linux targets will be linked
using GCC. This makes it impossible to use LLD as a linker using just `-C
linker=ld.lld` because that will invoke LLD with invalid command line
arguments. (e.g. rustc will pass -Wl,--gc-sections to LLD but LLD doesn't
understand that; --gc-sections would be the right argument)

With this patch one can pass `-Z linker-flavor=ld` to rustc to invoke the linker
using a LD-like interface. This way, `rustc -C linker=ld.lld -Z
linker-flavor=ld` will invoke LLD with the right arguments.

`-Z linker-flavor` accepts 4 different arguments: `em` (emcc), `ld`,
`gcc`, `msvc` (link.exe). `em`, `gnu` and `msvc` cover all the existing linker
interfaces. `ld` is a new flavor for interfacing GNU's ld and LLD.

This patch also changes target specifications. `linker-flavor` is now a
mandatory field that specifies the *default* linker flavor that the target will
use. This change also makes the linker interface *explicit*; before, it used to
be derived from other fields like linker-is-gnu, is-like-msvc,
is-like-emscripten, etc.

Another change to target specifications is that the fields `pre-link-args`,
`post-link-args` and `late-link-args` now expect a map from flavor to linker
arguments.

``` diff
-    "pre-link-args": ["-Wl,--as-needed", "-Wl,-z,-noexecstack"],
+    "pre-link-args": {
+        "gcc": ["-Wl,--as-needed", "-Wl,-z,-noexecstack"],
+        "ld": ["--as-needed", "-z,-noexecstack"],
+    },
```

[breaking-change]  for users of custom targets specifications
2017-04-07 10:52:42 -05:00
Stjepan Glavina
5c5a5182c9 Optimize AtomicBool::fetch_nand 2017-04-07 17:36:50 +02:00
bors
53f4bc311b Auto merge of #41138 - frewsxcv:rollup, r=frewsxcv
Rollup of 9 pull requests

- Successful merges: #40797, #41047, #41056, #41061, #41075, #41080, #41120, #41130, #41131
- Failed merges:
2017-04-07 15:25:47 +00:00
Jorge Aparicio
15fa301b7a change the format of the linked issue number 2017-04-07 09:46:55 -05:00
Corey Farwell
cd2310b93c Rollup merge of #41131 - euclio:collapse-animation, r=GuillaumeGomez
rustdoc: collapse docblock before showing label

The animation for collapsing descriptions is currently pretty jarring, as the label starts fading in as the description is collapsing. This causes the description to jump down a line (and sometimes change indentation) while animating.

This PR modifies this behavior to collapse the block entirely before starting to fade in the collapse button label.

While this PR works well for descriptions of structs, traits, etc., it still does not look ideal for attributes. I'd appreciate any suggestions for improving that animation. Perhaps we want to optimize for the single-attribute case, and try not to collapse the attribute list entirely before fading in the label?
2017-04-07 09:20:11 -04:00
Corey Farwell
72308b1c23 Rollup merge of #41130 - petrhosek:fuchsia-ci-upstream, r=alexcrichton
travis: Use upstream LLVM repositories for Fuchsia

The Fuchsia copies of LLVM repositories contain additional patches
for work-in-progress features and there is some amount of churn that
may break Rust. Use upstream LLVM repositories instead for building
the toolchain used by the Fuchsia builder.
2017-04-07 09:20:10 -04:00
Corey Farwell
25518db1dc Rollup merge of #41120 - clarcharr:c_str_transmute, r=alexcrichton
Remove some CStr transmutes.

Because dedicated methods exist for these, we don't have to add other transmutes.
2017-04-07 09:20:09 -04:00
Corey Farwell
2a92fe2aaa Rollup merge of #41080 - cuviper:generic-powerpc, r=alexcrichton
dist-powerpc-linux: use a pure 32-bit CPU profile

With `-mcpu=power4`, code might use instructions like `fcfid`, excluding
older CPUs like the PowerPC G4, which apparently some users would like
to use.  The generic `-mcpu=powerpc` should stick to pure 32-bit PowerPC
instructions.

Fixes rust-lang/cargo#3852.
2017-04-07 09:20:08 -04:00