Commit graph

20308 commits

Author SHA1 Message Date
Vadim Petrochenkov
e3acb341b2 Remove some tests using AST comparisons, fix other tests 2018-07-14 14:57:14 +03:00
bors
0a8275f8b6 Auto merge of #52244 - glandium:issue52097, r=estebank
Don't display default generic parameters in diagnostics that compare types

In errors like:
```
   expected type: `RawVec<foo, Global>`
      found type: `foo`
```

`RawVec` being defined as `RawVec<T, A: Alloc = Global>`, the error is better written as
```
   expected type: `RawVec<foo>`
      found type: `foo`
```

In fact, that is already what happens when `foo` is not an ADT, because in that case, the diagnostic handler doesn't try to highlight something, and just uses the `Display` trait instead of its own logic.

e.g.
```
   expected type: `RawVec<usize>`
      found type: `usize`
```
2018-07-14 06:24:42 +00:00
bors
ccade97544 Auto merge of #52328 - petrochenkov:pmroot, r=alexcrichton
proc_macro: Fix crate root detection

Fixes https://github.com/rust-lang/rust/issues/52270
2018-07-14 04:19:44 +00:00
bors
dd1f69bd86 Auto merge of #52314 - varkor:issue-52023, r=oli-obk
Fix ICE when using a pointer cast as array size

Fixes #52023. I'm not sure if the comment https://github.com/rust-lang/rust/issues/52023#issuecomment-402402392 suggested we also emit `E0080`, but just emitting `E0018` seems reasonable for now.

r? @oli-obk
2018-07-14 02:11:10 +00:00
bors
84755473dc Auto merge of #52032 - DiamondLovesYou:amdgpu-kernel-abi, r=alexcrichton
Add the `amdgpu-kernel` ABI.

Technically, there are requirements imposed by the LLVM
`AMDGPUTargetMachine` on functions with this ABI (eg, the return type
must be void), but I'm unsure exactly where this should be enforced.
2018-07-14 00:12:21 +00:00
Richard Diamond
6332bb1506 Add the amdgpu-kernel ABI.
Technically, there are requirements imposed by the LLVM
`AMDGPUTargetMachine` on functions with this ABI (eg, the return type
must be void), but I'm unsure exactly where this should be enforced.
2018-07-13 17:22:23 -05:00
bors
a14a361c2c Auto merge of #52266 - michaelwoerister:incr-thinlto-preliminaries, r=alexcrichton
Preliminary work for incremental ThinLTO.

Since implementing incremental ThinLTO is a bit more involved than I initially thought, I'm splitting out some of the things that already work. This PR (1) adds a way accessing some ThinLTO information in `rustc` and (2) does some cleanup around CGU/object file naming (which makes things quite a bit nicer).

This is probably best reviewed one commit at a time.
2018-07-13 22:06:38 +00:00
bors
254f8796b7 Auto merge of #52352 - kennytm:rollup, r=kennytm
Rollup of 17 pull requests

Successful merges:

 - #51962 (Provide llvm-strip in llvm-tools component)
 - #52003 (Implement `Option::replace` in the core library)
 - #52156 (Update std::ascii::ASCIIExt deprecation notes)
 - #52280 (llvm-tools-preview: fix build-manifest)
 - #52290 (Deny bare trait objects in src/librustc_save_analysis)
 - #52293 (Deny bare trait objects in librustc_typeck)
 - #52299 (Deny bare trait objects in src/libserialize)
 - #52300 (Deny bare trait objects in librustc_target and libtest)
 - #52302 (Deny bare trait objects in the rest of rust)
 - #52310 (Backport 1.27.1 release notes to master)
 - #52315 (Resolve FIXME(#27942))
 - #52316 (task: remove wrong comments about non-existent LocalWake trait)
 - #52322 (Update llvm-rebuild-trigger in light of LLVM 7 upgrade)
 - #52330 (Don't silently ignore invalid data in target spec)
 - #52333 (CI: Enable core dump on Linux, and print their stack trace on segfault. )
 - #52346 (Fix typo in improper_ctypes suggestion)
 - #52350 (Bump bootstrap compiler to 1.28.0-beta.10)

Failed merges:

r? @ghost
2018-07-13 19:49:11 +00:00
kennytm
fe1b41016c
Rollup merge of #52346 - rkruppe:patch-1, r=cramertj
Fix typo in improper_ctypes suggestion

closes #52345
2018-07-14 02:56:57 +08:00
kennytm
fe64419102
Rollup merge of #52330 - jethrogb:jb/target-link-args, r=varkor
Don't silently ignore invalid data in target spec

This is technically a breaking change, but only because invalid data was previously silently being ignored.
2018-07-14 02:56:55 +08:00
Jethro Beekman
488472d754 Don't silently ignore invalid data in target spec 2018-07-13 10:14:16 -07:00
bors
fe29a4cda5 Auto merge of #52242 - ashtneoi:suggest-ref-mut, r=pnkfelix
NLL: Suggest `ref mut` and `&mut self`

Fixes #51244. Supersedes #51249, I think.

Under the old lexical lifetimes, the compiler provided helpful suggestions about adding `mut` when you tried to mutate a variable bound as `&self` or (explicit) `ref`. NLL doesn't have those suggestions yet. This pull request adds them.

I didn't bother making the help text exactly the same as without NLL, but I can if that's important.

(Originally this was supposed to be part of #51612, but I got bogged down trying to fit everything in one PR.)
2018-07-13 17:08:39 +00:00
Robin Kruppe
e20f1d159e Fix typo in improper_ctypes suggestion
closes #52345
2018-07-13 17:09:09 +02:00
bors
bce32b532d Auto merge of #51987 - nikomatsakis:nll-region-infer-scc, r=pnkfelix
nll experiment: compute SCCs instead of iterative region solving

This is an attempt to speed up region solving by replacing the current iterative dataflow with a SCC computation. The idea is to detect cycles (SCCs) amongst region constraints and then compute just one value per cycle. The graph with all cycles removed is of course a DAG, so we can then solve constraints "bottom up" once the liveness values are known.

I kinda ran out of time this morning so the last commit is a bit sloppy but I wanted to get this posted, let travis run on it, and maybe do a perf run, before I clean it up.
2018-07-13 13:28:55 +00:00
bors
c0955a34bc Auto merge of #51622 - kennytm:three-field-range-inclusive, r=SimonSapin
Change RangeInclusive to a three-field struct.

Fix #45222.

This PR also reverts #48012 (i.e. removed the `try_fold`/`try_rfold` specialization for `RangeInclusive`) because LLVM no longer has trouble recognizing a RangeInclusive loop.
2018-07-13 10:18:38 +00:00
ashtneoi
1ed861910f Bless one more test 2018-07-12 23:11:57 -07:00
ashtneoi
531a68cea7 Factor out suggest_ref_mut; use it in rustc_borrowck
Also teach rustc_borrowck not to show useless help messages like
"use a mutable reference instead: `x`".
2018-07-12 22:51:30 -07:00
ashtneoi
323df7b504 Bless tests and update ERROR 2018-07-12 22:51:30 -07:00
csmoe
7a70140ed5 span_suggestion 2018-07-12 22:51:30 -07:00
csmoe
8932684ccc add nll stderr 2018-07-12 22:51:30 -07:00
csmoe
212da122f7 update test 2018-07-12 22:51:30 -07:00
csmoe
1662daa23d lint with ref_span 2018-07-12 22:51:30 -07:00
csmoe
4e5d22889b update test 2018-07-12 22:51:30 -07:00
ashtneoi
77d5f39771 Also test &mut self suggestion 2018-07-12 22:51:30 -07:00
ashtneoi
6fd1a9fff7 Don't try to suggest ref mut for implicit ref 2018-07-12 22:51:30 -07:00
ashtneoi
52d6ae854d Reimplement some "add mut" suggestions under NLL
Specifically, `&self` -> `&mut self` and explicit `ref` -> `ref mut`.
Implicit `ref` isn't handled yet and causes an ICE.
2018-07-12 22:51:30 -07:00
ashtneoi
f8eb9a685c Add ref mut suggestion test 2018-07-12 22:51:30 -07:00
Niko Matsakis
ed36698031 compute region values using SCCs not iterative flow
The strategy is this:

- we compute SCCs once all outlives constraints are known
- we allocate a set of values **per region** for storing liveness
- we allocate a set of values **per SCC** for storing the final values
- when we add a liveness constraint to the region R, we also add it
  to the final value of the SCC to which R belongs
- then we can apply the constraints by just walking the DAG for the
  SCCs and union'ing the children (which have their liveness
  constraints within)

There are a few intermediate refactorings that I really ought to have
broken out into their own commits:

- reverse the constraint graph so that `R1: R2` means `R1 -> R2` and
  not `R2 -> R1`. This fits better with the SCC computation and new
  style of inference (`->` now means "take value from" and not "push
  value into")
  - this does affect some of the UI tests, since they traverse the
    graph, but mostly the artificial ones and they don't necessarily
    seem worse
- put some things (constraint set, etc) into `Rc`. This lets us root
  them to permit mutation and iteration. It also guarantees they don't
  change, which is critical to the correctness of the algorithm.
- Generalize various helpers that previously operated only on points
  to work on any sort of region element.
2018-07-13 01:29:10 -04:00
bors
68c39b9fec Auto merge of #52275 - alexcrichton:no-macro-use, r=nrc
rustc: Lint against `#[macro_use]` in 2018 idioms

This commit adds a lint to the compiler to warn against the `#[macro_use]`
directive as part of the `rust_2018_idioms` lint. This lint is turned off by
default and is only enabled when the `use_extern_macros` feature is also
enabled.

The lint here isn't fully fleshed out as it's just a simple warning rather than
suggestions of how to actually import the macro, but hopefully it's a good base
to start from!

cc #52043
2018-07-13 03:40:33 +00:00
kennytm
d299f03e28
Fix some RangeInclusive test cases. 2018-07-13 09:53:37 +08:00
kennytm
0d7e9933d3
Change RangeInclusive to a three-field struct.
Fix #45222.
2018-07-13 09:53:36 +08:00
bors
e92e9ce0d8 Auto merge of #52046 - cramertj:fix-generator-mir, r=eddyb
Ensure StorageDead is created even if variable initialization fails

Rebase and slight cleanup of https://github.com/rust-lang/rust/pull/51109
Fixes https://github.com/rust-lang/rust/issues/49232

r? @eddyb
2018-07-13 00:38:17 +00:00
Vadim Petrochenkov
edffb2fcf0 proc_macro: Fix crate root detection 2018-07-13 01:59:41 +03:00
Alex Crichton
0b969a9d68 rustc: Lint against #[macro_use] in 2018 idioms
This commit adds a lint to the compiler to warn against the `#[macro_use]`
directive as part of the `rust_2018_idioms` lint. This lint is turned off by
default and is only enabled when the `use_extern_macros` feature is also
enabled.

The lint here isn't fully fleshed out as it's just a simple warning rather than
suggestions of how to actually import the macro, but hopefully it's a good base
to start from!

cc #52043
2018-07-12 14:10:39 -07:00
Taylor Cramer
9c15a6606e Ensure StorageDead is created even if variable initialization fails 2018-07-12 10:13:41 -07:00
varkor
e93de9556a Fix ICE when using a pointer cast as array size 2018-07-12 09:10:39 -07:00
bors
6cc42a4488 Auto merge of #52256 - tinco:issue_52255, r=sanxiyn
make pretty source comparison check be fatal (fixes #52255)

This is not ready for merging because it reveals (at least) two regressions in the pretty suite. Should I attempt to fix those in this PR also?
2018-07-12 15:12:37 +00:00
Michael Woerister
dd3f445ed2 Fix some run-make tests after object file naming has changed. 2018-07-12 14:59:50 +02:00
kennytm
63cc55b2ec
Rollup merge of #52276 - alexcrichton:validate-proc-macro-attr, r=petrochenkov
rustc: Verify #[proc_macro] is only a word

... and perform the same verification for #[proc_macro_attribute], currently
neither of these attributes take any arguments.

Closes #52273
2018-07-12 20:25:28 +08:00
bors
d334027c58 Auto merge of #52230 - alexcrichton:attr-and-derive, r=petrochenkov
rustc: Search all derives for inert attributes

This commit fixes an apparent mistake in librustc_resolve where when the
`proc_macro` feature is enabled (or `rust_2018_preview`) the resolution of
custom attributes for custom derive was tweaked. Previously when an attribute
failed to resolve it was attempted to locate if there is a custom derive also in
scope which declares the attribute, but only the first custom derive directive
was search.

Instead this commit fixes the loop to search all custom derive invocations
looking for any which register the attribute in question.

Closes #52219
2018-07-12 10:16:19 +00:00
Michael Woerister
94b32adb71 Adapt codegen-unit tests to new CGU naming scheme. 2018-07-12 10:44:13 +02:00
Mike Hommey
b5c2b79fb2 Don't display default generic parameters in diagnostics that compare types.
Fixes #52097
2018-07-12 17:14:53 +09:00
Mike Hommey
5336df7e3c Add UI tests for diagnostics comparing types
They highlight how types are displayed in those cases, and will show
how the current output is altered by the next patch.
2018-07-12 17:06:03 +09:00
bors
3244d53c79 Auto merge of #52089 - eddyb:issue-51907, r=nagisa
rustc_codegen_llvm: replace the first argument early in FnType::new_vtable.

Fixes #51907 by removing the vtable pointer before the `ArgType` is even created.
This allows any ABI to support trait object method calls, regardless of how it passes `*dyn Trait`.

r? @nikomatsakis
2018-07-12 01:20:19 +00:00
Tinco Andringa
b96deed121 fix expected output of pretty/cast-lt and issue-4264 tests 2018-07-12 01:19:27 +02:00
Alex Crichton
7735f45eab rustc: Verify #[proc_macro] is only a word
... and perform the same verification for #[proc_macro_attribute], currently
neither of these attributes take any arguments.

Closes #52273
2018-07-11 15:49:23 -07:00
Mark Rousskov
7897ee4d42
Rollup merge of #52207 - RalfJung:unsafety-errors, r=estebank
improve error message shown for unsafe operations

Add a short explanation saying why undefined behavior could arise. In particular, the error many people got for "creating a pointer to a packed field requires unsafe block" was not worded great -- it lead to people just adding the unsafe block without considering if what they are doing follows the rules.

I am not sure if a "note" is the right thing, but that was the easiest thing to add...

Inspired by @gnzlbg at https://github.com/rust-lang/rust/issues/46043#issuecomment-381544673
2018-07-11 12:38:36 -06:00
Mark Rousskov
322632ac10
Rollup merge of #51952 - petrochenkov:transmark, r=alexcrichton
hygiene: Decouple transparencies from expansion IDs

And remove fallback to parent modules during resolution of names in scope.

This is a breaking change for users of unstable macros 2.0 (both procedural and declarative), code like this:
```rust
#![feature(decl_macro)]

macro m($S: ident) {
    struct $S;
    mod m {
        type A = $S;
    }
}

fn main() {
    m!(S);
}
```
or equivalent
```rust
#![feature(decl_macro)]

macro m($S: ident) {
    mod m {
        type A = $S;
    }
}

fn main() {
    struct S;
    m!(S);
}
```
stops working due to module boundaries being properly enforced.

For proc macro derives this is still reported as a compatibility warning to give `actix_derive`, `diesel_derives` and `palette_derive` time to fix their issues.

Fixes https://github.com/rust-lang/rust/issues/50504 in accordance with [this comment](https://github.com/rust-lang/rust/issues/50504#issuecomment-399764767).
2018-07-11 12:38:33 -06:00
Mark Rousskov
d2a8a2b34a
Rollup merge of #51614 - csmoe:lit_sugg, r=estebank
Correct suggestion for println

Closes https://github.com/rust-lang/rust/issues/51585
r? @estebank
2018-07-11 12:38:32 -06:00
bors
d573fe1778 Auto merge of #51702 - ecstatic-morse:infinite-loop-detection, r=oli-obk
Infinite loop detection for const evaluation

Resolves #50637.

An `EvalContext` stores the transient state (stack, heap, etc.) of the MIRI virtual machine while it executing code. As long as MIRI only executes pure functions, we can detect if a program is in a state where it will never terminate by periodically taking a "snapshot" of this transient state and comparing it to previous ones. If any two states are exactly equal, the machine must be in an infinite loop.

Instead of fully cloning a snapshot every time the detector is run, we store a snapshot's hash. Only when a hash collision occurs do we fully clone the interpreter state. Future snapshots which cause a collision will be compared against this clone, causing the interpreter to abort if they are equal.

At the moment, snapshots are not taken until MIRI has progressed a certain amount. After this threshold, snapshots are taken every `DETECTOR_SNAPSHOT_PERIOD` steps. This means that an infinite loop with period `P` will be detected after a maximum of `2 * P * DETECTOR_SNAPSHOT_PERIOD` interpreter steps. The factor of 2 arises because we only clone a snapshot after it causes a hash collision.
2018-07-11 16:24:46 +00:00