325 Commits

Author SHA1 Message Date
Alex Burka
d4a28268cc add trait aliases to AST 2017-12-14 12:56:26 -05:00
bors
442b7bd10a Auto merge of #46570 - AgustinCB:issue-46553, r=oli-obk
Ignore `unsopported constant expr` error

Fixes #46553
2017-12-12 23:08:56 +00:00
Agustin Chiappe Berrini
75fc11806d Ignore unsopported constant expr error 2017-12-07 14:33:28 -05:00
Agustin Chiappe Berrini
29e2680602 remove unnecessary change 2017-12-07 04:01:59 -05:00
Agustin Chiappe Berrini
ce1fed7f52 address comments 2017-12-07 03:52:25 -05:00
Agustin Chiappe Berrini
65ccf24ce8 and refactor to just move the checking 2017-12-06 04:28:01 -05:00
Eduard-Mihai Burtescu
473f044225 MIR: s/lv(al(ue)?)?/place in function/variable/module names. 2017-12-01 18:48:57 +02:00
Eduard-Mihai Burtescu
511743c438 MIR: s/Lvalue/Place in type names. 2017-12-01 18:47:36 +02:00
Pietro Albini
91ba8b42fc
Implement RFC 2128 (use_nested_groups)
This commit adds support for nested groups inside `use` declarations,
such as `use foo::{bar, sub::{baz::Foo, *}};`.
2017-11-30 13:10:26 +01:00
Eduard-Mihai Burtescu
c42a118188 MIR: split Operand::Consume into Copy and Move. 2017-11-28 04:18:32 +02:00
Vadim Petrochenkov
2e9b89ddc5 Support ::crate in paths 2017-11-21 00:21:24 +03:00
Eduard-Mihai Burtescu
d6aa56f44e rustc: split off BodyOwnerKind from MirSource. 2017-11-14 08:54:27 +02:00
Vadim Petrochenkov
f7b4b88840 Always report patterns more complex than mut IDENT as errors 2017-11-11 15:45:40 +03:00
Vadim Petrochenkov
1055bdfb2a Accept interpolated patterns in trait method parameters
Remove some outdated messages from "no patterns allowed" errors
2017-11-11 15:44:19 +03:00
bors
fd9ecfdfd0 Auto merge of #45736 - oli-obk:rvalue_promotable_map, r=nikomatsakis
Use a `Set<T>` instead of a `Map<T, bool>`

r? @nikomatsakis

introduced in #44501
2017-11-09 04:14:28 +00:00
bors
785643a5eb Auto merge of #45668 - nikomatsakis:nll-free-region, r=arielb1
extend NLL with preliminary support for free regions on functions

This PR extends https://github.com/rust-lang/rust/pull/45538 with support for free regions. This is pretty preliminary and will no doubt want to change in various ways, particularly as we add support for closures, but it's enough to get the basic idea in place:

- We now create specific regions to represent each named lifetime declared on the function.
- Region values can contain references to these regions (represented for now as a `BTreeSet<RegionIndex>`).
- If we wind up trying to infer that `'a: 'b` must hold, but no such relationship was declared, we report an error.

It also does a number of drive-by refactorings.

r? @arielb1

cc @spastorino
2017-11-06 23:30:57 +00:00
bors
d762b1d6c6 Auto merge of #45394 - davidtwco:rfc-2008, r=petrochenkov
RFC 2008: Future-proofing enums/structs with #[non_exhaustive] attribute

This work-in-progress pull request contains my changes to implement [RFC 2008](https://github.com/rust-lang/rfcs/pull/2008). The related tracking issue is #44109.

As of writing, enum-related functionality is not included and there are some issues related to tuple/unit structs. Enum related tests are currently ignored.

WIP PR requested by @nikomatsakis [in Gitter](https://gitter.im/rust-impl-period/WG-compiler-middle?at=59e90e6297cedeb0482ade3e).
2017-11-04 18:07:07 +00:00
bors
95a401609f Auto merge of #45384 - mikhail-m1:mir_add_false_edges_terminator_kind, r=arielb1
add TerminatorKind::FalseEdges and use it in matches

impl #45184 and fixes #45043 right way.

False edges unexpectedly affects uninitialized variables analysis in MIR borrowck.
2017-11-04 00:09:14 +00:00
David Wood
059eccb07f
Implemented RFC 2008 for enums (not including variants) and structs. 2017-11-03 19:36:18 +00:00
leonardo.yvens
97de8cae6e Parse auto traits the same as traits.
This moves the well formedness checks to the AST validation pass. Tests
were adjusted.

The auto keyword should be back-compat now.
2017-11-03 16:13:22 -02:00
leonardo.yvens
06506bb751 [Syntax Breaking] Rename DefaultImpl to AutoImpl
DefaultImpl is a highly confusing name for what we now call auto impls,
as in `impl Send for ..`. The name auto impl is not formally decided
but for sanity anything is better than `DefaultImpl` which refers
neither to `default impl` nor to `impl Default`.
2017-11-03 16:13:20 -02:00
Oliver Schneider
2961937a31
Use a Set<T> instead of a Map<T, bool> 2017-11-03 09:27:20 +01:00
Niko Matsakis
81f6ce5ce3 rename Lookup to TyContext and pass more info when visiting tys 2017-11-02 04:40:49 -04:00
Mikhail Modin
2d71c5f10c add TerminatorKind::FalseEdges and use it in matches 2017-11-02 09:43:36 +03:00
Vadim Petrochenkov
bf0cdb52f2 Add several lints into unused lint group
Remove a couple of obsolete lints
2017-10-29 22:14:23 +03:00
Paul Lietar
77f7e85d7f Implement RFC 1861: Extern types 2017-10-27 23:01:34 +02:00
Niko Matsakis
0f568e2f34 convert constant promotion into a query 2017-10-16 17:32:22 -04:00
Niko Matsakis
807e157b4c invoke const only on body-ids 2017-10-16 17:32:22 -04:00
Vadim Petrochenkov
e6115af4bd Implement dyn Trait syntax 2017-10-14 12:51:13 +03:00
Taylor Cramer
64314e3ae2 Implement underscore lifetimes 2017-09-20 23:45:05 -07:00
bors
3cb24bd37b Auto merge of #44275 - eddyb:deferred-ctfe, r=nikomatsakis
Evaluate fixed-length array length expressions lazily.

This is in preparation for polymorphic array lengths (aka `[T; T::A]`) and const generics.
We need deferred const-evaluation to break cycles when array types show up in positions which require knowing the array type to typeck the array length, e.g. the array type is in a `where` clause.

The final step - actually passing bounds in scope to array length expressions from the parent - is not done because it still produces cycles when *normalizing* `ParamEnv`s, and @nikomatsakis' in-progress lazy normalization work is needed to deal with that uniformly.

However, the changes here are still useful to unlock work on const generics, which @EpicatSupercell manifested interest in, and I might be mentoring them for that, but we need this baseline first.

r? @nikomatsakis cc @oli-obk
2017-09-12 04:14:07 +00:00
Aaron Hill
fb540e3de4 Update comment to properly describe static promotion restrictions 2017-09-11 10:51:28 -04:00
Eduard-Mihai Burtescu
57ebd28fdb rustc: use ConstVal::Unevaluated instead of mir::Literal::Item. 2017-09-11 08:41:16 +03:00
Eduard-Mihai Burtescu
932289c12d rustc: introduce ty::Const { ConstVal, Ty }. 2017-09-11 08:41:15 +03:00
Eduard-Mihai Burtescu
50076b00c2 rustc: intern ConstVal's in TyCtxt. 2017-09-11 08:41:03 +03:00
Aaron Hill
813b323bdc
Don't promote references to statics that occur in non-static locations 2017-09-09 16:01:45 -04:00
Aaron Hill
07becc5f24
Fix regression in promotion of rvalues referencing a static
This commit makes librustc_passes::consts::CheckCrateVisitor properly
mark expressions as promotable if they reference a static, as it's
perfectly fine for one static to reference another. It fixes a
regression that prevented a temporary rvalue from referencing a static
if it was itself declared within a static.

Prior to commit https://github.com/rust-lang/rust/commit/b8c05fe90bc,
`region::ScopeTree` would only register a 'terminating scope' for function
bodies. Thus, while rvalues in a static that referenced a static would be marked
unpromotable, the lack of enclosing scope would cause
mem_categorization::MemCategorizationContext::cat_rvalue_node
to compute a 'temporary scope' of `ReStatic`. Since this had the same
effect as explicitly selecting a scope of `ReStatic`
due to the rvalue being marked by CheckCrateVisitor as promotable,
no issue occurred.

However, commit https://github.com/rust-lang/rust/commit/b8c05fe90bc
made ScopeTree unconditionally register a 'terminating scope'
Since mem_categorization would now compute a non-static 'temporary scope', the
aforementioned rvalues would be erroneously marked as living for too
short a time.

By fixing the behavior of CheckCrateVisitor, this commit avoids changing
mem_categorization's behavior, while ensuring that temporary values in
statics are still allowed to reference other statics.

Fixes issue #44373
2017-09-08 20:22:50 -04:00
Alex Crichton
a2e2aba07d rustc: Migrate lang items to a query
This commit moves the calculation of the `LanguageItems` structure into a
query rather than being calculated before the `TyCtxt` exists, with the eventual
end goal of removing some `CrateStore` methods.
2017-09-05 07:37:57 -07:00
Eduard-Mihai Burtescu
8bdfd8a003 rustc: rename CodeExtent to Scope and RegionMaps to ScopeTree. 2017-09-01 23:27:48 +03:00
bors
7eeac1b814 Auto merge of #43932 - eddyb:const-scoping, r=nikomatsakis
Forward-compatibly deny drops in constants if they *could* actually run.

This is part of #40036, specifically the checks for user-defined destructor invocations on locals which *may not* have been moved away, the motivating example being:
```rust
const FOO: i32 = (HasDrop {...}, 0).1;
```
The evaluation of constant MIR will continue to create `'static` slots for more locals than is necessary (if `Storage{Live,Dead}` statements are ignored), but it shouldn't be misusable.

r? @nikomatsakis
2017-08-30 20:12:25 +00:00
Eduard-Mihai Burtescu
c76a024121 rustc: treat impl associated consts like const items for constness. 2017-08-28 09:27:58 +03:00
John Kåre Alsaker
d29af37999 Merge branch 'master' of https://github.com/rust-lang/rust into gen 2017-08-28 02:41:16 +02:00
Tamir Duberstein
b3f50caee0
*: remove crate_{name,type} attributes
Fixes #41701.
2017-08-25 16:18:21 -04:00
Alex Crichton
c872f47276 Merge remote-tracking branch 'origin/master' into gen 2017-08-25 07:15:12 -07:00
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
Alex Crichton
b31998ec93 Merge remote-tracking branch 'origin/master' into gen 2017-08-21 10:41:56 -07:00
Vadim Petrochenkov
de4dbe5789 rustc: Remove some dead code 2017-08-19 13:27:16 +03:00
Vadim Petrochenkov
000f87ab1e Desugar parenthesized generic arguments in HIR 2017-08-19 02:14:53 +03:00
Alex Crichton
1210ebff43 Merge remote-tracking branch 'origin/master' into gen 2017-08-16 10:03:47 -07:00
Zack M. Davis
1b6c9605e4 use field init shorthand EVERYWHERE
Like #43008 (f668999), but _much more aggressive_.
2017-08-15 15:29:17 -07:00