Commit graph

21441 commits

Author SHA1 Message Date
bors
a12e4f8098 Auto merge of #43532 - petrochenkov:pgargs, r=nikomatsakis
Desugar parenthesized generic arguments in HIR

Fixes ICE in https://github.com/rust-lang/rust/issues/43431 and maybe some other similar issues.

r? @eddyb
2017-08-24 03:48:25 +00:00
gaurikholkar
b569094d94 minor fix 2017-08-23 19:43:05 +05:30
gaurikholkar
90ab9d9a6d code review fixes 2017-08-23 18:43:26 +05:30
Alexey Tarasov
e13090e8b2 Fixes issue #43205: ICE in Rvalue::Len evaluation.
- fixes evaluation of array length for zero-sized type referenced by
  rvalue operand.
- adds test to verify fix.

Cause of the issue.

Zero-sized aggregates are handled as operands, not lvalues. Therefore while
visiting Assign statement by LocalAnalyser, mark_as_lvalue() is not called for
related Local. This behaviour is controlled by rvalue_creates_operand() method.
As result it causes error later, when rvalue operand is evaluated in
trans_rvalue_operand() while handling Rvalue::Len case. Array length evaluation
invokes trans_lvalue() which expects referenced Local to be value, not operand.

How it is fixed.

In certain cases result of Rvalue::Len can be evaluated without calling
trans_lvalue(). Method evaluate_array_len() is introduced to handle length
evaluation for zero-sized types referenced by Locals.
2017-08-23 23:10:03 +10:00
Corey Farwell
e9853c4758 Rollup merge of #44047 - cuviper:union-basic-endian, r=petrochenkov
Fix little-endian assumptions in run-pass/union/union-basic

None
2017-08-23 08:44:29 -04:00
bors
a3f0ee9a7b Auto merge of #40113 - smaeul:native-musl, r=alexcrichton
Support dynamically-linked and/or native musl targets

These changes allow native compilation on musl-based distributions and the use of dynamic libraries on linux-musl targets. This is intended to remove limitations based on past assumptions about musl targets, while maintaining existing behavior by default.

A minor related bugfix is included.
2017-08-23 08:43:52 +00:00
Zack M. Davis
35c449419c fn_must_use soft feature-gate warning on methods too, not only functions
This continues to be in the matter of #43302.
2017-08-22 20:39:56 -07:00
Zack M. Davis
8492ad2479 "soft" (warn instead of error) feature-gate for #[must_use] on functions
Before `#[must_use]` for functions was implemented, a `#[must_use]` attribute
on a function was a no-op. To avoid a breaking change in this behavior, we add
an option for "this-and-such feature is experimental" feature-gate messages to
be a mere warning rather than a compilation-halting failure (so old code that
used to have a useless no-op `#[must_use]` attribute now warns rather than
breaking). When we're on stable, we add a help note to clarify that the feature
isn't "on."

This is in support of #43302.
2017-08-22 20:37:14 -07:00
Zack M. Davis
0981211c62 hard feature-gate for #[must_use] on functions
We'll actually want a new "soft" warning-only gate to maintain
backwards-compatibility, but it's cleaner to start out with the established,
well-understood gate before implementing the alternative warn-only behavior in
a later commit.

This is in the matter of #43302.
2017-08-22 17:30:39 -07:00
Jeffrey Seyfried
7e191685e3 Fix fallout in tests. 2017-08-22 15:50:21 -07:00
Jeffrey Seyfried
d54a6d9413 Ensure that generic arguments don't end up in attribute paths. 2017-08-22 15:50:19 -07:00
Samuel Holland
e6cd941371 Update ignored tests for dynamic musl
Now that musl supports dynamic libraries (although not by default)
enable the tests that now pass. Additional currently-ignored tests
will pass if rustc is built with crt_static=false in config.toml.
2017-08-22 16:24:29 -05:00
Josh Stone
b1e8c7215d Fix little-endian assumptions in run-pass/union/union-basic 2017-08-22 12:45:10 -07:00
bors
469a6f9bd9 Auto merge of #44013 - arielb1:coerce-snapshot, r=eddyb
Register fn-ptr coercion obligations out of a snapshot

Fixes #43923.

beta-nominating because regression.
r? @eddyb
2017-08-22 19:14:12 +00: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
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
Alex Crichton
04c66c30a7 Merge remote-tracking branch 'origin/master' into gen 2017-08-21 21:47:07 -07: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
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
Alex Crichton
35b8dbaef3 Merge remote-tracking branch 'origin/master' into gen 2017-08-21 15:45:40 -07:00
Alex Crichton
b31998ec93 Merge remote-tracking branch 'origin/master' into gen 2017-08-21 10:41:56 -07: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
Ariel Ben-Yehuda
e00263438c register fn-ptr coercion obligations out of a snapshot
Fixes #43923.
2017-08-21 14:11:57 +03: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
Tamir Duberstein
c1ed862bc4
borrowck: name the correct type in error message
Closes #36407.
2017-08-20 18:31:36 -04: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
c7e3c7932c Auto merge of #43933 - topecongiro:bad-span-for-attributes, r=petrochenkov
Fix bad span for attributes

Closes #42641.
2017-08-19 01:59:36 +00:00
Vadim Petrochenkov
000f87ab1e Desugar parenthesized generic arguments in HIR 2017-08-19 02:14:53 +03:00
Alex Crichton
4ba2df11d8 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-18 10:36:39 -07:00
bors
b8ce1a3d2e Auto merge of #43901 - GuillaumeGomez:unsized-union-field, r=petrochenkov
udpdate error message for unsized union field

Fixes #36312.
2017-08-18 10:57:55 +00:00
Guillaume Gomez
c3c99b92c7 Handle structs, unions and enums unsized field/variant separately 2017-08-18 10:24:53 +02:00
Alex Crichton
9620d26138 Fix more UI tests 2017-08-17 22:52:04 -07:00
Esteban Küber
f06323337d Verify that an if condition block returns a value 2017-08-17 20:25:46 -07:00
Esteban Küber
20a2716206 Check for else keyword on missing if condition 2017-08-17 15:48:39 -07:00
Alex Crichton
a47038f551 Fix UI tests 2017-08-17 15:20:06 -07:00
Alex Crichton
4b5f330c70 Merge remote-tracking branch 'origin/master' into gen 2017-08-17 13:23:20 -07:00
Malo Jaffré
d4e0e52281 Accept underscores in unicode escapes
Fixes #43692.
2017-08-17 20:03:32 +02:00
Esteban Küber
c4672f8e87 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 {
   |       ^^^^
```
2017-08-17 10:18:06 -07:00
Oliver Schneider
e0ba29c413
Improve placement of use suggestions 2017-08-17 18:16:15 +02:00
Seiichi Uchida
567b9b761b Update ui tests 2017-08-17 21:59:19 +09:00
gaurikholkar
fe9c68a051 Adding E0623 for structs 2017-08-17 15:06:32 +05:30
bors
a7e001833e Auto merge of #43878 - kennytm:fix-43869-put-impl-trait-out-of-the-loop, r=alexcrichton
Exclude `impl Trait` functions from everybody_loops.

Fixes #43869.

cc #34511.
2017-08-17 06:19:38 +00:00
bors
be0f77dc8a Auto merge of #43864 - GuillaumeGomez:static-method-invalid-use, r=eddyb
Add help for static method invalid use

Fixes #30391.
2017-08-16 23:40:01 +00:00
Eduard-Mihai Burtescu
014333fbd4 Stabilize rvalue promotion to 'static. 2017-08-16 20:30:56 +03:00
Alex Crichton
1210ebff43 Merge remote-tracking branch 'origin/master' into gen 2017-08-16 10:03:47 -07:00
bors
c88624682d Auto merge of #43850 - GuillaumeGomez:unused-variable-lint, r=arielb1
Add a note to unused variables

Fixes #26720.
2017-08-16 12:47:28 +00:00
Guillaume Gomez
9b0607ab4e Add a note to unused variables 2017-08-16 13:53:47 +02:00
Guillaume Gomez
589d994c38 udpdate error message for unsized union field 2017-08-16 13:32:41 +02:00