Commit graph

3303 commits

Author SHA1 Message Date
bors
ebbb2bf37a Auto merge of #67886 - Centril:rustc_hir_canon_imports, r=nagisa
Nix `rustc_hir` reexports in rustc::hir

r? @Zoxc cc @Mark-Simulacrum
2020-01-06 12:55:40 +00:00
Aaron Hill
db2c4f214f
Fix typo 2020-01-05 15:00:55 -05:00
Aaron Hill
33caf0b61f
Rename Instance.ty to Instance.monomorphic_ty 2020-01-05 14:59:40 -05:00
Aaron Hill
464b58ca11
s/projections/params/ 2020-01-05 14:37:59 -05:00
Aaron Hill
71d163b53c
Run rustfmt 2020-01-05 14:37:59 -05:00
Aaron Hill
d41f9dd5dd
Change 'panic!' to 'bug!'
Co-Authored-By: Wesley Wiser <wwiser@gmail.com>
2020-01-05 14:37:59 -05:00
Aaron Hill
ee922d47f2
Fix ICE involving calling Instance.ty during const evaluation
Fixes #67639

`Instance.ty` assumes that we are in a fully monomorphic context (e.g.
codegen), and can therefore use an empty `ParamEnv` when performing
normalization. Howver, the MIR constant evaluator code ends up calling
`Instance.ty` as a result of us attemptign to 'speculatively'
const-evaluate generic functions during const propagation.

As a result,
we may end up with projections involving type parameters
(e.g. <T as MyTrait>::Bar>) in the type we are trying to normalize.
Normalization expects us to have proper predicates in the `ParamEnv` for
such projections, and will ICE if we don't.

This commit adds a new method `Instance.ty_env`, which takes a
`ParamEnv` for use during normalization. The MIR const-evaluator code is
changed to use this method, passing in the proper `ParamEnv` for the
context at hand.
2020-01-05 14:37:59 -05:00
Mazdak Farrokhzad
ebfd8673a7 Remove rustc_hir reexports in rustc::hir. 2020-01-05 12:49:22 +01:00
John Kåre Alsaker
5a485ce4a3 Use self profile infrastructure for -Z time and -Z time-passes 2020-01-05 02:57:14 +01:00
Mazdak Farrokhzad
1f7b4e9a59 extract Export, ExportMap from hir::def 2020-01-04 19:03:27 +01:00
Mazdak Farrokhzad
2f64ab6633 {HirId,ItemLocal}{Map,Set} -> rustc::hir & nix rustc::nodemap 2020-01-04 19:01:42 +01:00
Mazdak Farrokhzad
ca297f8cf4 DefId{Map,Set} -> rustc::hir::def_id 2020-01-04 19:01:42 +01:00
Mazdak Farrokhzad
5ccc1e45bd move Node{Map,Set} -> rustc_session::node_id 2020-01-04 18:59:28 +01:00
Mazdak Farrokhzad
7901c7f707 canonicalize FxHash{Map,Set} imports 2020-01-04 18:57:22 +01:00
Mazdak Farrokhzad
66f5bf1b8b extract rustc::middle::codegen_fn_attrs 2020-01-04 18:43:06 +01:00
Mazdak Farrokhzad
4ff12ce4c1 Normalize syntax::symbol imports. 2020-01-02 13:57:04 +01:00
Mazdak Farrokhzad
75e4783f63 Normalize syntax::source_map imports. 2020-01-02 13:57:04 +01:00
Camille GILLOT
36b6630771 Move stability queries to librustc_passes.
Contains:
- check_mod_unstable_api_usage query;
- stability_index query;
- check_unused_or_stable features pass.
2020-01-01 14:15:02 +01:00
Vadim Petrochenkov
70f1d57048 Rename syntax_pos to rustc_span in source code 2020-01-01 09:15:18 +03:00
bors
d297b19663 Auto merge of #67721 - JohnTitor:rollup-o8zm4r9, r=JohnTitor
Rollup of 10 pull requests

Successful merges:

 - #64273 (Stabilize attribute macros on inline modules)
 - #67287 (typeck: note other end-point when checking range pats)
 - #67564 (docs: Iterator adapters have unspecified results after a panic)
 - #67622 (Some keyword documentation.)
 - #67657 (Clean up const-hack PRs now that const if / match exist.)
 - #67677 (resolve: Minor cleanup of duplicate macro reexports)
 - #67687 (Do not ICE on lifetime error involving closures)
 - #67698 (Move reachable_set and diagnostic_items to librustc_passes.)
 - #67701 (tidy: Enforce formatting rather than just check it if `--bless` is specified)
 - #67715 (Typo fix)

Failed merges:

r? @ghost
2019-12-30 05:12:48 +00:00
Yuki Okushi
88e322c4f1
Rollup merge of #67698 - cjgillot:passes-first, r=Zoxc
Move reachable_set and diagnostic_items to librustc_passes.

Split out of #67688

r? @Zoxc
2019-12-30 14:07:55 +09:00
bors
214548b8af Auto merge of #67631 - oli-obk:polymorphic_promotion, r=wesleywiser
Work around a resolve bug in const prop

r? @wesleywiser @anp

This isn't exposed right now, but further changes to rustc may start causing bugs without this.
2019-12-30 02:05:24 +00:00
bors
2ba0d2acbd Auto merge of #66942 - cjgillot:hirene-ty, r=Zoxc
Allocate HIR on an arena 3/4 -- Ty

This is the third PR in the series started by #66931 and #66936

Once again, commits don't really make sense on their own.
They are mostly split by type of compile error.

The additional diff is here: https://github.com/cjgillot/rust/compare/hirene-expr...hirene-ty
2019-12-29 22:51:02 +00:00
Camille GILLOT
57681628f9 Move get_lib_features query in librustc_passes. 2019-12-29 16:18:05 +01:00
Camille GILLOT
fd4d50d442 Move diagnostic_items queries to librustc_passes. 2019-12-29 10:45:20 +01:00
Camille GILLOT
4922310a3b Move reachable_set query in librustc_passes. 2019-12-29 10:45:00 +01:00
bors
774a4bd4f4 Auto merge of #67614 - Mark-Simulacrum:global-callbacks, r=Zoxc
Set callbacks globally

This sets the callbacks from syntax and rustc_errors just once, utilizing static (rather than thread-local) storage.
2019-12-29 04:30:56 +00:00
Camille GILLOT
6b87d5cdf1 Syntax for hir::Ty. 2019-12-27 19:20:28 +01:00
Wesley Wiser
25a8b5d58e Fix Instance::resolve() incorrectly returning specialized instances
We only want to return specializations when `Reveal::All` is passed, not
when `Reveal::UserFacing` is. Resolving this fixes several issues with
the `ConstProp`, `SimplifyBranches`, and `Inline` MIR optimization
passes.

Fixes #66901
2019-12-27 13:04:32 -05:00
bors
8f5f8f916f Auto merge of #67192 - oli-obk:const_zst_addr, r=RalfJung,varkor
Various const eval and pattern matching ICE fixes

r? @RalfJung
cc @spastorino

This PR does not change existing behaviour anymore and just fixes a bunch of ICEs reachable from user code (sometimes even on stable via obscure union transmutes).
2019-12-27 07:38:52 +00:00
Camille GILLOT
2b1cfe5b5b Syntax for hir::Expr. 2019-12-26 23:36:12 +01:00
Oliver Scherer
b5b5258d74 Retire to_ptr which should already have no users but still kept getting new ones 2019-12-26 22:50:14 +01:00
Mark Rousskov
4dcc6270e8 Fix skipped setting of syntax::GLOBALS 2019-12-25 14:26:42 -05:00
Mark Rousskov
b98633b94c Store callbacks in global statics
The callbacks have precisely two states: the default, and the one
present throughout almost all of the rustc run (the filled in value
which has access to TyCtxt).

We used to store this as a thread local, and reset it on each thread to
the non-default value. But this is somewhat wasteful, since there is no
reason to set it globally -- while the callbacks themselves access TLS,
they do not do so in a manner that fails in when we do not have TLS to
work with.
2019-12-25 14:10:46 -05:00
Matthew Jasper
18df72142a Remove -Znll-dont-emit-read-for-match 2019-12-25 09:13:15 +00:00
Mark Rousskov
6891388e66 x.py fmt after previous deignore 2019-12-24 17:38:22 -05:00
bors
a4cd03dee2 Auto merge of #66296 - Centril:bindings_after_at-init, r=pnkfelix
Initial implementation of `#![feature(bindings_after_at)]`

Following up on #16053, under the gate `#![feature(bindings_after_at)]`, `x @ Some(y)` is allowed subject to restrictions necessary for soundness.

The implementation and test suite should be fairly complete now.

One aspect that is not covered is the interaction with nested `#![feature(or_patterns)]`.
This is not possible to test at the moment in a good way because that feature has not progressed sufficiently and has fatal errors in MIR building. We should make sure to add such tests before we stabilize both features (but shipping one of them is fine).

r? @pnkfelix
cc @nikomatsakis @matthewjasper @pcwalton
cc https://github.com/rust-lang/rust/issues/65490
2019-12-23 21:49:44 +00:00
Mazdak Farrokhzad
1de2705c79
Rollup merge of #67466 - oli-obk:const_intrinsic, r=Centril
Require const stability attributes on intrinsics to be able to use them in constant contexts

r? @Centril

finally fixes #61495

cc @RalfJung
2019-12-23 15:16:23 +01:00
Mazdak Farrokhzad
5a8baa2876 refactor with extract_binding_mode 2019-12-23 14:47:19 +01:00
Mark Rousskov
a06baa56b9 Format the world 2019-12-22 17:42:47 -05:00
Mazdak Farrokhzad
97bee3a793
Rollup merge of #66877 - skinny121:const-eval-entry-points, r=oli-obk
Add simpler entry points to const eval for common usages.

I found the `tcx.const_eval` API to be complex/awkward to work with, because of the inherent complexity from all of the different situations it is called from. Though it mainly used in one of the following ways:
- Evaluates the value of a constant without any substitutions, e.g. evaluating a static, discriminant, etc.
- Evaluates the value of a resolved instance of a constant. this happens when evaluating unevaluated constants or normalising trait constants.
- Evaluates a promoted constant.

This PR adds three new functions `const_eval_mono`, `const_eval_resolve`, and `const_eval_promoted` to `TyCtxt`, which each cater to one of the three ways `tcx.const_eval`
 is normally used.
2019-12-22 19:46:07 +01:00
bors
26286c7ad0 Auto merge of #66931 - cjgillot:hirene-preamble, r=eddyb
Allocate HIR on an arena 1/4

This PR is the first in a series of 4, aiming at allocating the HIR on an arena, as a memory optimisation.

1. This first PR lays the groundwork and migrates some low-hanging fruits.
2. The second PR will migrate `hir::Expr`, `hir::Pat` and related.
3. The third PR will migrate `hir::Ty` and related.
4. The final PR will be dedicated to eventual cleanups.

In order to make the transition as gradual as possible, some lowering routines receive `Box`-allocated data and move it into the arena. This is a bit wasteful, but hopefully temporary.
Nonetheless, special care should be taken to avoid double arena allocations.

Work mentored by @Zoxc.
2019-12-22 10:30:51 +00:00
Camille GILLOT
084e6722f9 Use Arena inside hir::Item. 2019-12-21 23:17:29 +01:00
Ben Lewis
c010d843aa Add simpler entry points to const eval for common usages. 2019-12-22 11:15:16 +13:00
Mazdak Farrokhzad
b50c3b7ddf
Rollup merge of #67160 - matthewjasper:gat-generics, r=nikomatsakis
Make GATs less ICE-prone.

After this PR simple lifetime-generic associated types can now be used in a compiling program. There are two big limitations:

* #30472 has not been addressed in any way (see src/test/ui/generic-associated-types/iterable.rs)
* Using type- and const-generic associated types errors because bound types and constants aren't handled by trait solving.
    * The errors are technically non-fatal, but they happen in a [part of the compiler](4abb0ad273/src/librustc_typeck/lib.rs (L298)) that fairly aggressively stops compiling on errors.

closes #47206
closes #49362
closes #62521
closes #63300
closes #64755
closes #67089
2019-12-21 19:07:31 +01:00
Oliver Scherer
9ee16e14c5 Require const stability attributes on intrinsics to be able to use them in constant contexts 2019-12-20 23:15:50 +01:00
Mazdak Farrokhzad
a7aec3f207 1. ast::Mutability::{Mutable -> Mut, Immutable -> Not}.
2. mir::Mutability -> ast::Mutability.
2019-12-20 22:22:44 +01:00
Matthew Jasper
cd3ead19dd Use delay_span_bug less often 2019-12-20 20:14:11 +00:00
Matthew Jasper
4b164f681d Correctly lower paths to generic associated types 2019-12-20 20:14:11 +00:00
Mazdak Farrokhzad
ef01330887
Rollup merge of #64588 - matthewjasper:mir-address-of, r=oli-obk
Add a raw "address of" operator

* Parse and feature gate `&raw [const | mut] expr` (feature gate name is `raw_address_of`)
* Add `mir::Rvalue::AddressOf`
* Use the new `Rvalue` for:
    * the new syntax
    * reference to pointer casts
    * drop shims for slices and arrays
* Stop using `mir::Rvalue::Cast` with a reference as the operand
* Correctly evaluate `mir::Rvalue::{Ref, AddressOf}` in constant propagation

cc @Centril @RalfJung @oli-obk @eddyb
cc #64490
2019-12-20 17:22:16 +01:00