Commit Graph

58824 Commits

Author SHA1 Message Date
Jeffrey Seyfried
ff4994235a Avoid clearing the string interner. 2016-11-20 11:46:01 +00:00
Jeffrey Seyfried
3ea2bc4e93 Refactor away ast::Attribute_. 2016-11-20 11:46:00 +00:00
bors
bfa709a38a Auto merge of #37826 - keeperofdakeys:proc-macro-test, r=alexcrichton
Show a better error when using --test with #[proc_macro_derive]

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

Currently using `--test` with a crate that contains a `#[proc_macro_derive]` attribute causes an error. This PR doesn't attempt to fix the issue itself, or determine what tesing of a proc_macro_derive crate should be - just to provide a better error message.
2016-11-19 13:28:50 -06:00
bors
b1da18fe9b Auto merge of #37822 - cuviper:llvm-link-shared, r=alexcrichton
rustbuild: allow dynamically linking LLVM

The makefiles and `mklldeps.py` called `llvm-config --shared-mode` to
find out if LLVM defaulted to shared or static libraries, and just went
with that.  But under rustbuild, `librustc_llvm/build.rs` was assuming
that LLVM should be static, and even forcing `--link-static` for 3.9+.

Now that build script also uses `--shared-mode` to learn the default,
which should work better for pre-3.9 configured for dynamic linking, as
it wasn't possible back then to choose differently via `llvm-config`.

Further, the configure script now has a new `--enable-llvm-link-shared`
option, which allows one to manually override `--link-shared` on 3.9+
instead of forcing static.

Update: There are now four static/shared scenarios that can happen
for the supported LLVM versions:

- 3.9+: By default use `llvm-config --link-static`
- 3.9+ and `--enable-llvm-link-shared`: Use `--link-shared` instead.
- 3.8: Use `llvm-config --shared-mode` and go with its answer.
- 3.7: Just assume static, maintaining the status quo.
2016-11-19 08:08:26 -08:00
bors
fb025b483a Auto merge of #37814 - japaric:aapcs, r=alexcrichton
fix `extern "aapcs" fn`

to actually use the AAPCS calling convention

closes #37810

This is technically a [breaking-change] because it changes the ABI of
`extern "aapcs"` functions that (a) involve `f32`/`f64` arguments/return
values and (b) are compiled for arm-eabihf targets from
"aapcs-vfp" (wrong) to "aapcs" (correct).

Appendix:

What these ABIs mean?

- In the "aapcs-vfp" ABI or "hard float" calling convention: Floating
point values are passed/returned through FPU registers (s0, s1, d0, etc.)

- Whereas, in the "aapcs" ABI or "soft float" calling convention:
Floating point values are passed/returned through general purpose
registers (r0, r1, etc.)

Mixing these ABIs can cause problems if the caller assumes that the
routine is using one of these ABIs but it's actually using the other
one.

---

r? @alexcrichton We are going this `extern "aapcs" fn` thing to implement some intrinsics (floatundidf) for the eabihf targets in order to comply with LLVM's calling convention of intrinsics.

Oh, and the value of the enum came from [here](http://llvm.org/docs/doxygen/html/namespacellvm_1_1CallingConv.html).

cc @TimNN @parched
2016-11-19 04:58:48 -08:00
bors
aa97dafe01 Auto merge of #37797 - arielb1:inline-closure, r=michaelwoerister
instantiate closures on demand

this should fix compilation with `-C codegen-units=4` - tested locally
with `RUSTFLAGS='-C codegen-units=4' ../x.py test`

r? @michaelwoerister
2016-11-19 01:49:07 -08:00
bors
2f4368ba97 Auto merge of #37853 - TimNN:fix-travis, r=alexcrichton
fix travis: update Cargo.lock
2016-11-18 22:39:08 -08:00
bors
49d3fd3b38 Auto merge of #37787 - michaelwoerister:macro-def-ich, r=nikomatsakis
ICH: Handle MacroDef HIR instances.

As of recently, `hir::MacroDef` instances are exported in crate metadata, which means we also store their ICH when doing incremental compilation. Even though exported macro definitions should not (yet) interact with incremental compilation, the ICH is also used for the general purpose crate hash, where macros should be included.

This PR implements ICH computation for `MacroDef`. In theory, the ICH of these MacroDefs is less stable than that of other HIR items, since I opted to just call the compiler-generated `Hash::hash()` for `Token::Interpolated` variants. `Token::Interpolated` contains AST data structures and it would have been a lot of effort to expand ICH computation to the AST too. Since quasi-quoting is rarely used *and* it would only make a difference if incremental compilation was extended to macros, the simpler implementation seemed like a good idea.

This fixes the problem reported in https://github.com/rust-lang/rust/issues/37756. The test still fails because of broken codegen-unit support though.

r? @nikomatsakis
2016-11-18 19:21:47 -08:00
bors
ac635aa95b Auto merge of #37867 - brson:no-lexer-verify, r=alexcrichton
Don't build the lexer verifier during tidy

Tidy is not the right place to do this. Tidy is for running lints.
We should instead be running the lexer/grammar tests as part of the test
suite.

This may fix nightly breakage, but I don't understand why.

https://buildbot.rust-lang.org/builders/nightly-dist-rustc-linux/builds/715/steps/distcheck/logs/stdio

r? @alexcrichton

cc @dns2utf8
2016-11-18 15:04:27 -08:00
Michael Woerister
c722a1eb99 Add span to warning about incr. comp. vs Token::Interpolated. 2016-11-18 16:45:59 -05:00
Michael Woerister
52d250efab Add test case for exported macros vs incremental compilation. 2016-11-18 16:45:59 -05:00
Michael Woerister
e6b30bda49 Remove outdated comment about SVH. 2016-11-18 16:45:59 -05:00
Michael Woerister
a5137afe8c ICH: Hash MacroDefs in a mostly stable way. 2016-11-18 16:45:59 -05:00
Michael Woerister
003b1699c0 Add error message when not finding the ICH of a DepNode. 2016-11-18 16:45:17 -05:00
Brian Anderson
d3b050c308 Don't build the lexer verifier during tidy
Tidy is not the right place to do this. Tidy is for running lints.
We should instead be running the lexer/grammar tests as part of the test
suite.

This may fix nightly breakage, but I don't know why.
2016-11-18 20:37:27 +00:00
bors
b7dfc2bd12 Auto merge of #37776 - nrc:save-double-angle, r=@brson
save-analysis: handle << and >> operators inside [] in types

Fixes #37700
2016-11-18 11:45:53 -08:00
bors
195c42c426 Auto merge of #37749 - keeperofdakeys:should-panic, r=alexcrichton
Improvements to the #[should_panic] feature

Add more error checking for the `#[should_panic]` attribute, and print the expected panic string when it does not match.

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

Eg:
```running 3 tests
test test2 ... ok
test test1 ... FAILED
: Panic did not include expected string 'foo'
test test3 ... FAILED

failures:

---- test1 stdout ----
	thread 'test1' panicked at 'bar', test.rs:7
note: Run with `RUST_BACKTRACE=1` for a backtrace.

---- test3 stdout ----
	thread 'test3' panicked at 'bar', test.rs:18

```
2016-11-18 08:24:00 -08:00
bors
2a6d02e092 Auto merge of #37769 - alexcrichton:rustbuild-python, r=brson
rustbuild: Allow configuration of python interpreter

Add a configuration key to `config.toml`, read it from `./configure`, and add
auto-detection if none of those were specified.

Closes #35760
2016-11-18 05:03:03 -08:00
Tim Neumann
fc2216cc1d update Cargo.lock 2016-11-18 11:31:44 +01:00
Josh Driver
fb5ccf80fe Warn when a #[should_panic] test has an unexpected message 2016-11-18 21:01:19 +10:30
Ariel Ben-Yehuda
4fc02f6893 instantiate closures on demand
this should fix compilation with `-C codegen-units=4` - tested locally
with `RUSTFLAGS='-C codegen-units=4' ../x.py test`
2016-11-18 12:25:00 +02:00
bors
01d061fdc0 Auto merge of #37763 - liigo:rustdoc-playground, r=alexcrichton
rustdoc: add cli argument `--playground-url`

Add a new cli argument `--playground-url` for rustdoc:

`rustdoc lib.rs --playground-url="https://play.rust-lang.org/"`

`rustdoc book.md --playground-url="https://play.rust-lang.org/"`

This makes it possible for tools like https://docs.rs to generate crate docs that can submit samples code to run at https://play.rust-lang.org, even if the crate's author *forgot* putting `#![doc(html_playground_url = "https://play.rust-lang.org/")]` to crate root. By the way, I'd like to say, many crate authors are not aware of existing of `#![doc(html_playground_url = "https://play.rust-lang.org/")]`.

`--playground-url` may be reset by `--markdown-playground-url` or `#![doc(html_playground_url=...)]`, so it's backward compatible.

@alexcrichton since you implemented playground-url related features.
2016-11-18 01:47:01 -08:00
Josh Stone
f3240377e6 rustbuild: update the llvm link logic further
There are now four static/shared scenarios that can happen for the
supported LLVM versions:

- 3.9+: By default use `llvm-config --link-static`
- 3.9+ and `--enable-llvm-link-shared`: Use `--link-shared` instead.
- 3.8: Use `llvm-config --shared-mode` and go with its answer.
- 3.7: Just assume static, maintaining the status quo.
2016-11-17 21:50:59 -08:00
bors
509d14fc70 Auto merge of #37846 - jseyfried:fix_proc_macro_dep, r=alexcrichton
Fix bug in proc_macro dependency loading

Fixes #37839.
r? @alexcrichton
2016-11-17 20:56:03 -08:00
bors
35e8924dc5 Auto merge of #37660 - nikomatsakis:incremental-36349, r=eddyb
Separate impl items from the parent impl

This change separates impl item bodies out of the impl itself. This gives incremental more resolution. In so doing, it refactors how the visitors work, and cleans up a bit of the collect/check logic (mostly by moving things out of collect that didn't really belong there, because they were just checking conditions).

However, this is not as effective as I expected, for a kind of frustrating reason. In particular, when invoking `foo.bar()` you still wind up with dependencies on private items. The problem is that the method resolution code scans that list for methods with the name `bar` -- and this winds up touching *all* the methods, even private ones.

I can imagine two obvious ways to fix this:

- separating fn bodies from fn sigs (#35078, currently being pursued by @flodiebold)
- a more aggressive model of incremental that @michaelwoerister has been advocating, in which we hash the intermediate results (e.g., the outputs of collect) so that we can see that the intermediate result hasn't changed, even if a particular impl item has changed.

So all in all I'm not quite sure whether to land this or not. =) It still seems like it has to be a win in some cases, but not with the test cases we have just now. I can try to gin up some test cases, but I'm not sure if they will be totally realistic. On the other hand, some of the early refactorings to the visitor trait seem worthwhile to me regardless.

cc #36349 -- well, this is basically a fix for that issue, I guess

r? @michaelwoerister

NB: Based atop of @eddyb's PR https://github.com/rust-lang/rust/pull/37402; don't land until that lands.
2016-11-17 17:31:01 -08:00
Jeffrey Seyfried
8918ddf0ed Add regression test. 2016-11-18 01:13:10 +00:00
Nick Cameron
8a949dfea2 save-analysis: handle << and >> operators inside [] in types
Fixes #37700
2016-11-18 13:06:16 +13:00
Jeffrey Seyfried
04886f2c98 Fix bug in loading proc macro dependencies. 2016-11-18 00:03:10 +00:00
bors
c3565372c3 Auto merge of #37424 - shiver:issue-37131, r=alexcrichton
Improved error reporting when target sysroot is missing.

Attempts to resolve #37131.
This is my first pull request on rust, so I would greatly appreciate any feedback you have on this.

Thanks!
2016-11-17 14:16:27 -08:00
Niko Matsakis
c938007f90 add test for hashing trait impls 2016-11-17 15:12:43 -05:00
bors
89386d62ab Auto merge of #37837 - GuillaumeGomez:rollup, r=GuillaumeGomez
Rollup of 8 pull requests

- Successful merges: #37752, #37757, #37759, #37766, #37772, #37799, #37806, #37821
- Failed merges: #37442
2016-11-17 10:57:08 -08:00
Niko Matsakis
ab79438d68 canonicalize base incremental path on windows
This sidesteps problems with long paths because the canonical path
includes the "magic long path prefix" on Windows.
2016-11-17 13:44:22 -05:00
Niko Matsakis
4e844ad1e5 fix change_private_impl_method_cc test 2016-11-17 13:44:22 -05:00
Niko Matsakis
b8116dabda fix oversight in closure translation
(Unrelated to this PR series)
2016-11-17 13:44:22 -05:00
Niko Matsakis
b10b98169f hash the contents of impl-item-ref by adding them to visitor
Also simplify some of the `ty::AssociatedItem` representation,
in particular by folding `has_value` into `hir::Defaultness`
2016-11-17 13:44:22 -05:00
Niko Matsakis
c17be9ea11 move impl wf check so they occur earlier
Needed to keep coherence from freaking out.
2016-11-17 13:44:21 -05:00
Niko Matsakis
34c361cfb2 when creating an AssociatedItem, read data from impl, not impl item
Before, when we created an AssociatedItem for impl item X, we would read
the impl item itself. Now we instead load up the impl I that contains X
and read the data from the `ImplItemRef` for X; actually, we do it for
all impl items in I pre-emptively.

This kills the last source of edges between a method X and a call to a
method Y defined in the same impl.

Fixes #37121
2016-11-17 13:44:21 -05:00
Guillaume Gomez
850e355d28 Rollup merge of #37821 - tshepang:nits, r=steveklabnik
doc: nits and typos on comments
2016-11-17 19:40:58 +01:00
Guillaume Gomez
214bcc5290 Rollup merge of #37806 - GuillaumeGomez:net_examples, r=frewsxcv
Net examples

r? @steveklabnik
2016-11-17 19:40:58 +01:00
Guillaume Gomez
e88e13d311 Rollup merge of #37799 - michaelwoerister:ich-type-def-tests, r=nikomatsakis
ICH: Add test case for type alias definitions

r? @nikomatsakis
2016-11-17 19:40:58 +01:00
Guillaume Gomez
5426143f6a Rollup merge of #37772 - durka:patch-32, r=petrochenkov
add test for #37765

Adds a test for #37765, a path parsing fix which removes the need for a parenthesis workaround.

Closes #37765.
cc #37290 @withoutboats
r? @petrochenkov
2016-11-17 19:40:58 +01:00
Guillaume Gomez
369b996d5f Rollup merge of #37766 - tarka:book-testing-concurrency-capture, r=steveklabnik
Add sections about testing concurrency and stdout/err capture
2016-11-17 19:40:57 +01:00
Guillaume Gomez
b633767b10 Rollup merge of #37759 - robinst:trait-use-message-add-semicolon, r=eddyb
Add semicolon to "perhaps add a `use` for one of them" help

Similar to pull request #37430, this makes the message more copy-paste
friendly and aligns it with other messages like:

    help: you can import it into scope: use foo::Bar;

r? @eddyb
2016-11-17 19:40:57 +01:00
Guillaume Gomez
5c8824da07 Rollup merge of #37757 - rust-lang:E0002-precision, r=brson
Uncomment some long error explanation

Retry of #37058.

r? @steveklabnik
cc @brson
2016-11-17 19:40:57 +01:00
Guillaume Gomez
9ed3797fb6 Rollup merge of #37752 - arielb1:incoherent-error, r=nikomatsakis
coherence: skip impls with an erroneous trait ref

Impls with a erroneous trait ref are already ignored in the first part
of coherence, so ignore them in the second part too. This avoids
cascading coherence errors when 1 impl of a trait has an error.

r? @nikomatsakis
2016-11-17 19:40:57 +01:00
bors
c57b826149 Auto merge of #37732 - jseyfried:use_extern_macros, r=nrc
Support `use`ing externally defined macros behind `#![feature(use_extern_macros)]`

With `#![feature(use_extern_macros)]`,
 - A name collision between macros from different upstream crates is much less of an issue since we can `use` the macros in different submodules or rename with `as`.
 - We can reexport macros with `pub use`, so `#![feature(macro_reexport)]` is no longer needed.
 - These reexports are allowed in any module, so crates can expose a macro-modular interface.

If a macro invocation can resolve to both a `use` import and a `macro_rules!` or `#[macro_use]`, it is an ambiguity error.

r? @nrc
2016-11-17 07:43:50 -08:00
Josh Driver
3254fabf8e Add tests 2016-11-18 02:11:20 +10:30
bors
5bd1e7f59f Auto merge of #37793 - jseyfried:fix_proc_macro_def_ids, r=nrc
Fix proc macro def ids

Update some `CStore` methods to also work correctly with proc macro def ids.
Fixes #37788.
r? @nrc
2016-11-17 04:38:08 -08:00
Josh Driver
b9ed51c8f1 Show a better error when using --test with #[proc_macro_derive] 2016-11-17 22:06:36 +10:30
bors
29181b3f0c Auto merge of #37717 - nikomatsakis:region-obligations-pre, r=eddyb
Refactoring towards region obligation

Two refactorings towards the intermediate goal of propagating region obligations through the `InferOk` structure (which in turn leads to the possibility of lazy normalization).

1. Remove `TypeOrigin` and add `ObligationCause`
    - as we converge subtyping and obligations and so forth, the ability to keep these types distinct gets harder
2. Propagate obligations from `InferOk` into the surrounding fulfillment context

After these land, I have a separate branch (which still needs a bit of work) that can make the actual change to stop directly adding subregion edges and instead propagate obligations. (This should also make it easier to fix the unsoundness in specialization around lifetimes.)

r? @eddyb
2016-11-17 01:18:51 -08:00