Commit Graph

59184 Commits

Author SHA1 Message Date
bors 2190f6c3c2 Auto merge of #38086 - semarie:openbsd-i686, r=alexcrichton
Add i686-unknown-openbsd target.

It is a preliminary work. I still have some tests failing, but I have a working rustc binary which is able to rebuild itself.

an update of libc should be required too, but I dunno how to do it with vendor/ layout.

r? @alexcrichton
2016-12-04 16:35:09 +00:00
bors b462e8fa61 Auto merge of #38082 - jseyfried:macro_invocation_paths, r=nrc
macros: support invocation paths (e.g. `foo::bar!()`) behind `#![feature(use_extern_macros)]`

r? @nrc
2016-12-04 12:51:38 +00:00
bors d14d74d5f7 Auto merge of #37920 - nikomatsakis:compile-time-regression-37864, r=mw
in region, treat current (and future) item-likes alike

The `visit_fn` code mutates its surrounding context.  Between *items*,
this was saved/restored, but between impl items it was not. This meant
that we wound up with `CallSiteScope` entries with two parents (or
more!).  As far as I can tell, this is harmless in actual type-checking,
since the regions you interact with are always from at most one of those
branches. But it can slow things down.

Before, the effect was limited, since it only applied to impl items
within an impl. After #37660, impl items are visisted all together at
the end, and hence this could create a very messed up
hierarchy. Isolating impl item properly solves both issues.

I cannot come up with a way to unit-test this; for posterity, however,
you can observe the messed up hierarchies with a test as simple as the
following, which would create a callsite scope with two parents both
before and after

```
struct Foo {
}

impl Foo {
    fn bar(&self) -> usize {
        22
    }

    fn baz(&self) -> usize {
        22
    }
}

fn main() { }
```

Fixes #37864.

r? @michaelwoerister

cc @pnkfelix -- can you think of a way to make a regr test?
2016-12-04 06:38:38 +00:00
Sébastien Marie 6774e7aa92 OpenBSD under x86 has particular ABI for returning a struct.
It is like OSX or Windows: small structs are returned as integers.
2016-12-04 07:18:56 +01:00
bors 125474de07 Auto merge of #37857 - shepmaster:llvm-4.0-dinodes, r=michaelwoerister
[LLVM 4.0] Handle new DIFlags enum
2016-12-04 02:30:23 +00:00
bors 28d6623bcc Auto merge of #38148 - frewsxcv:rollup, r=frewsxcv
Rollup of 15 pull requests

- Successful merges: #37859, #37919, #38020, #38028, #38029, #38065, #38073, #38077, #38089, #38090, #38096, #38112, #38113, #38130, #38141
- Failed merges:
2016-12-03 20:59:08 +00:00
Corey Farwell 2e038ed3de Rollup merge of #38141 - GuillaumeGomez:component_doc, r=frewsxcv
Add Component examples

r? @frewsxcv
2016-12-03 15:39:54 -05:00
Corey Farwell 02ad965e3f Rollup merge of #38130 - jethrogb:patch-3, r=steveklabnik
Update items section in reference

Make clear that items must be definitions, and add missing extern block
2016-12-03 15:39:53 -05:00
Corey Farwell d6281faf7e Rollup merge of #38113 - nikomatsakis:incremental-dump-hash, r=michaelwoerister
add a `-Z incremental-dump-hash` flag

This causes us to dump a bunch of has information to stdout that can be
useful in tracking down incremental compilation invalidations,
particularly across crates.
2016-12-03 15:39:53 -05:00
Corey Farwell 3231641f44 Rollup merge of #38112 - tarka:book-testing-fix, r=steveklabnik
Minor fix to testing concurrency section
2016-12-03 15:39:53 -05:00
Corey Farwell fa1af0c260 Rollup merge of #38096 - michaelwoerister:more-incremental-info, r=nikomatsakis
incr.comp.: Add more output to -Z incremental-info.

Also makes sure that all output from `-Z incremental-info` is prefixed with `incremental:` for better grep-ability.

r? @nikomatsakis
2016-12-03 15:39:53 -05:00
Corey Farwell 6c327adca2 Rollup merge of #38090 - GuillaumeGomez:option_doc, r=frewsxcv
Add cloned example for Option

r? @frewsxcv
2016-12-03 15:39:53 -05:00
Corey Farwell d0e57b19cf Rollup merge of #38089 - michaelwoerister:disable-debuginfo-test-on-aarch64, r=alexcrichton
debuginfo: Ignore macro-stepping test on aarch64

See https://github.com/rust-lang/rust/issues/37225.

r? @alexcrichton
2016-12-03 15:39:52 -05:00
Corey Farwell d68c585b01 Rollup merge of #38077 - GuillaumeGomez:ipaddr_doc, r=frewsxcv
Add missing examples for IpAddr enum

r? @frewsxcv
2016-12-03 15:39:52 -05:00
Corey Farwell cf299315f6 Rollup merge of #38073 - cardoe:fix-typo, r=frewsxcv
bootstrap/README: fix small typo
2016-12-03 15:39:52 -05:00
Corey Farwell 9aef89eb45 Rollup merge of #38065 - estebank:fix-37618, r=jonathandturner
Show `Trait` instead of `<Struct as Trait>` in E0323

For a given file

```
trait Foo {
    fn bar(&self);
}

pub struct FooConstForMethod;

impl Foo for FooConstForMethod {
    const bar: u64 = 1;
}
```

show

```
error[E0323]: item `bar` is an associated const, which doesn't match its trait `Foo`
```

instead of

```
error[E0323]: item `bar` is an associated const, which doesn't match its trait `<FooConstForMethod as Foo>`
```

Fix #37618
2016-12-03 15:39:52 -05:00
Corey Farwell 78c1046b6a Rollup merge of #38029 - dns2utf8:fix_verify.rs, r=petrochenkov
Fix verify.rs

Finishing d2f8fb0 from @jseyfried
2016-12-03 15:39:52 -05:00
Corey Farwell ca0c8395a0 Rollup merge of #38028 - Mark-Simulacrum:polish, r=nikomatsakis
Refactor one_bound_for_assoc_type to take an Iterator instead of Vec

I doubt the performance implications will be serious, but it will avoid allocating one-element Vecs for the successful case (and avoid allocating vecs at all for any case, too).

`--stage 2` tests passed locally.
2016-12-03 15:39:51 -05:00
Corey Farwell 468ca2c56a Rollup merge of #38020 - GuillaumeGomez:udp-socket-doc, r=frewsxcv
Add part of missing UdpSocket's urls and examples

r? @frewsxcv
2016-12-03 15:39:51 -05:00
Corey Farwell 8916accc10 Rollup merge of #37919 - nikomatsakis:incremental-36168, r=mw
add regression test for #36168

Fixes #36168

r? @michaelwoerister
2016-12-03 15:39:51 -05:00
Corey Farwell bf99183f87 Rollup merge of #37859 - GuillaumeGomez:net_examples, r=nagisa
Add missing examples for Ipv6Addr

r? @steveklabnik

cc @frewsxcv
2016-12-03 15:39:51 -05:00
Niko Matsakis f8097066f8 move test for #37290 into run-pass-fulldeps 2016-12-03 14:42:34 -05:00
Sébastien Marie 53ebf5a0a7 update src/liblibc to include i686-unknown-openbsd libc definition 2016-12-03 18:57:58 +01:00
bors 2cdbd5eb42 Auto merge of #38079 - BurntSushi:attrtarget, r=alexcrichton
Add new #[target_feature = "..."] attribute.

This commit adds a new attribute that instructs the compiler to emit
target specific code for a single function. For example, the following
function is permitted to use instructions that are part of SSE 4.2:

    #[target_feature = "+sse4.2"]
    fn foo() { ... }

In particular, use of this attribute does not require setting the
-C target-feature or -C target-cpu options on rustc.

This attribute does not have any protections built into it. For example,
nothing stops one from calling the above `foo` function on hosts without
SSE 4.2 support. Doing so may result in a SIGILL.

I've also expanded the x86 target feature whitelist.
2016-12-03 17:41:14 +00:00
bors 890085450a Auto merge of #38061 - cardoe:target-spec, r=alexcrichton
print option to dump target spec as JSON

This lets the user dump out the target spec that the compiler is using. This is useful to people defining their own target.json to compare it against existing targets or understand how different targets change internal settings. It is also potentially useful for Cargo to determine if something has changed with a target and it needs to rebuild things.
2016-12-03 14:21:51 +00:00
bors 9a101d8987 Auto merge of #38059 - arielb1:no-mere-overflow, r=nikomatsakis
evaluate obligations in LIFO order during closure projection

This is an annoying gotcha with the projection cache's handling of
nested obligations.

Nested projection obligations enter the issue in this case:
```
DEBUG:rustc::traits::project: AssociatedTypeNormalizer: depth=3
normalized
<std::iter::Map<std::ops::Range<i32>,
[closure@not-a-recursion-error.rs:5:30: 5:53]> as
std::iter::IntoIterator>::Item to _#7t with 12 add'l obligations
```

Here the normalization result is the result of the nested impl
`<[closure@not-a-recursion-error.rs:5:30: 5:53] as FnMut(i32)>::Output`,
which is an additional obligation that is a part of "add'l obligations".

By itself, this is proper behaviour - the additional obligation is
returned, and the RFC 447 rules ensure that it is processed before the
output `#_7t` is used in any way.

However, the projection cache breaks this - it caches the
`<std::iter::Map<std::ops::Range<i32>,[closure@not-a-recursion-error.rs:5:30:
5:53]> as std::iter::IntoIterator>::Item = #_7t` resolution. Now
everybody else that attempts to look up the projection will just get
`#_7t` *without* any additional obligations. This obviously causes all
sorts of trouble (here a spurious `EvaluatedToAmbig` results in
specializations not being discarded
[here](9ca50bd4d5/src/librustc/traits/select.rs (L1705))).

The compiler works even with this projection cache gotcha because in most
cases during "one-pass evaluation". we tend to process obligations in LIFO
order - after an obligation is added to the cache, we process its nested
obligations before we do anything else (and if we have a cycle, we handle
it specifically) - which makes sure the inference variables are resolved
before they are used.

That "LIFO" order That was not done when projecting out of a closure, so
let's just fix that for the time being.

Fixes #38033.

Beta-nominating because regression.

r? @nikomatsakis
2016-12-03 11:04:01 +00:00
bors 24175e8c9f Auto merge of #38056 - clarcharr:master, r=alexcrichton
Add String::split_off.

This seems to match up with the latest version of the collection reform, and seems useful enough to add. First pull request!
2016-12-03 07:52:21 +00:00
Guillaume Gomez 60d1660748 Add Component examples 2016-12-02 20:16:12 -08:00
bors 08faff49c3 Auto merge of #38055 - rkruppe:rm-unused-llvm-ffi, r=alexcrichton
Remove unused functions from rustc_llvm
2016-12-03 03:57:57 +00:00
Jake Goulding 757a9cea3f [LLVM 4.0] Support new DIFlags enum 2016-12-02 21:14:06 -05:00
Jake Goulding dbdd60e6d7 [LLVM] Introduce a stable representation of DIFlags
In LLVM 4.0, this enum becomes an actual type-safe enum, which breaks
all of the interfaces. Introduce our own copy of the bitflags that we
can then safely convert to the LLVM one.
2016-12-02 21:13:31 -05:00
Niko Matsakis 0adb1b1b02 pacify the mercilous tidy 2016-12-02 14:18:09 -05:00
jethrogb ecf6f1b96a Update items section in reference
Make clear that items must be definitions, and add missing extern block
2016-12-02 09:19:38 -08:00
Doug Goldstein 7151b5ad78
rustc: add basic test for --print target-spec
This is a very basic test of the --print target-spec feature.

Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2016-12-02 10:07:39 -06:00
Doug Goldstein ff112644de
rustc: add --print target-spec option
This option provides the user the ability to dump the configuration that
is in use by rustc for the target they are building for.

Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2016-12-02 10:07:38 -06:00
bors c80c31a502 Auto merge of #38053 - eddyb:lazy-9, r=nikomatsakis
[9/n] rustc: move type information out of AdtDef and TraitDef.

_This is part of a series ([prev](https://github.com/rust-lang/rust/pull/37688) | [next]()) of patches designed to rework rustc into an out-of-order on-demand pipeline model for both better feature support (e.g. [MIR-based](https://github.com/solson/miri) early constant evaluation) and incremental execution of compiler passes (e.g. type-checking), with beneficial consequences to IDE support as well.
If any motivation is unclear, please ask for additional PR description clarifications or code comments._

<hr>

Both `AdtDef` and `TraitDef` contained type information (field types, generics and predicates) which was required to create them, preventing their use before that type information exists, or in the case of field types, *mutation* was required, leading to a variance-magicking implementation of `ivar`s.

This PR takes that information out and the resulting cleaner setup could even eventually end up merged with HIR, because, just like `AssociatedItem` before it, there's no dependency on types anymore.
(With one exception, variant discriminants should probably be moved into their own map later.)
2016-12-02 15:06:36 +00:00
bors 2f8fd533ac Auto merge of #38050 - alexcrichton:fix-llvm-deps, r=japaric
rustbuild: Cross-compiled LLVM depens on host

We use the host's tblgen so we need to be sure to always build the host first.

Closes #38037
2016-12-02 11:35:57 +00:00
bors af0a0719ea Auto merge of #37936 - tedsta:fuchsia_std_process, r=alexcrichton
Fuchsia support for std::process via liblaunchpad.

Now we can launch processes on Fuchsia via the Rust standard library! ... Mostly.

Right now, ~5% of the time, reading the stdout/stderr off the pipes will fail. Some Magenta kernel people think it's probably a bug in Magenta's pipes. I wrote a unit test that demonstrates the issue in C, which I was told will expedite a fix. https://fuchsia-review.googlesource.com/#/c/15628/

Hopefully this can get merged once the issue is fixed :)

@raphlinus
2016-12-02 07:35:06 +00:00
bors 1077149827 Auto merge of #37789 - arielb1:length-limit, r=nikomatsakis
limit the length of types in monomorphization

This adds the new insta-stable `#![type_size_limit]` crate attribute to control
the limit, and is obviously a [breaking-change] fixable by that.

Fixes #37311.

r? @nikomatsakis
2016-12-02 00:20:11 +00:00
Doug Goldstein 8285ab5c99
convert --print options to a vector
To allow manipulation of the options that appear in --print, convert it
to a vector.

Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2016-12-01 16:59:09 -06:00
Ariel Ben-Yehuda 242cd7ebe2 limit the length of types in monomorphization
This adds the new insta-stable `#![type_size_limit]` crate attribute to control
the limit, and is obviously a [breaking-change] fixable by that.
2016-12-02 00:54:22 +02:00
Theodore DeRego e1b752b2a1 std::process fuchsia support cleanup 2016-12-01 12:01:07 -08:00
Niko Matsakis 6fe4bffb40 test for #37290 using lint 2016-12-01 13:59:07 -05:00
Niko Matsakis fa22fc387a in region, treat current (and future) item-likes alike
The `visit_fn` code mutates its surrounding context.  Between *items*,
this was saved/restored, but between impl items it was not. This meant
that we wound up with `CallSiteScope` entries with two parents (or
more!).  As far as I can tell, this is harmless in actual type-checking,
since the regions you interact with are always from at most one of those
branches. But it can slow things down.

Before, the effect was limited, since it only applied to impl items
within an impl. After #37660, impl items are visisted all together at
the end, and hence this could create a very messed up
hierarchy. Isolating impl item properly solves both issues.

I cannot come up with a way to unit-test this; for posterity, however,
you can observe the messed up hierarchies with a test as simple as the
following, which would create a callsite scope with two parents both
before and after

```
struct Foo {
}

impl Foo {
    fn bar(&self) -> usize {
        22
    }

    fn baz(&self) -> usize {
        22
    }
}

fn main() { }
```

Fixes #37864.
2016-12-01 13:59:04 -05:00
Niko Matsakis 57ffda6158 add a `-Z incremental-dump-hash` flag
This causes us to dump a bunch of has information to stdout that can be
useful in tracking down incremental compilation invalidations,
particularly across crates.
2016-12-01 12:29:28 -05:00
Steve Smith d950ca175a Minor fix to testing concurrency section 2016-12-01 16:30:34 +00:00
bors 908dba0c94 Auto merge of #38048 - rkruppe:llvm-stringref-fixes, r=alexcrichton
[LLVM 4.0] Don't assume llvm::StringRef is null terminated

StringRefs have a length and their contents are not usually null-terminated. The solution is to either copy the string data (in `rustc_llvm::diagnostic`) or take the size into account (in LLVMRustPrintPasses).

I couldn't trigger a bug caused by this (apparently all the strings returned in practice are actually null-terminated) but this is more correct and more future-proof.

cc #37609
2016-12-01 15:21:11 +00:00
bors 149e76f12c Auto merge of #38018 - sourcefrog:doc, r=alexcrichton
Document that Process::command will search the PATH
2016-12-01 11:35:19 +00:00
bors 827eba4e70 Auto merge of #37911 - liigo:rustdoc-playground, r=alexcrichton
rustdoc: get back missing crate-name when --playground-url is used

follow up PR #37763
r? @alexcrichton (since you r+ed to #37763 )

----

Edit: When `#![doc(html_playground_url="")]` is used, the current crate name is saved to `PLAYGROUND`, so rustdoc may generate `extern crate NAME;` into code snips automatically. But when `--playground-url` was introduced in PR #37763, I forgot saving crate name to `PLAYGROUND`. This PR fix that.

----

Update:
- add test
- unstable `--playground-url`
2016-12-01 07:07:32 +00:00
Clar Charr cbf734f9ab Add String::split_off. 2016-11-30 23:24:57 -05:00