Commit graph

24899 commits

Author SHA1 Message Date
Mazdak Farrokhzad
21b5c1d51e
Rollup merge of #61660 - petrochenkov:nocusta, r=Centril
Minimize use of `#![feature(custom_attribute)]`

Some preparations before resurrecting https://github.com/rust-lang/rust/pull/57921.
2019-06-09 00:20:35 +02:00
Mazdak Farrokhzad
2410b4de7c
Rollup merge of #61658 - RalfJung:const-tests, r=oli-obk
remove useless ident() functions in const tests

and replace the useful ones by black_box (with a comment)

r? @oli-obk
2019-06-09 00:20:34 +02:00
Vadim Petrochenkov
ee189ae028 Address review comments 2019-06-09 00:08:53 +03:00
Vadim Petrochenkov
8e8ab49bca Move some run-pass attribute tests to ui 2019-06-08 23:55:25 +03:00
Vadim Petrochenkov
6a66491883 Remove some more #![feature(custom_attribute)]s 2019-06-08 23:55:25 +03:00
Vadim Petrochenkov
ea4ad555d7 Introduce #[rustc_dummy] attribute and use it in tests
Unlike other built-in attributes, this attribute accepts any input
2019-06-08 23:55:25 +03:00
Vadim Petrochenkov
74a6d1c821 Turn #[allocator] into a built-in attribute and rename it to #[rustc_allocator] 2019-06-08 23:55:25 +03:00
Vadim Petrochenkov
8049e6199b Remove unused #![feature(custom_attribute)]s 2019-06-08 23:55:24 +03:00
Ralf Jung
3f99ad175a extra paranoid mode 2019-06-08 20:35:59 +02:00
Ralf Jung
a733b876f7 black-box the fn ptr, not the result 2019-06-08 18:13:16 +02:00
Ralf Jung
4567f22578 remove useless ident() functions in const tests and replace the useful ones by black_box (with a comment) 2019-06-08 12:30:52 +02:00
bors
fb7cca33f8 Auto merge of #61620 - SimonSapin:as_cell, r=RalfJung
Stabilize Cell::from_mut and as_slice_of_cells

FCP: https://github.com/rust-lang/rust/issues/43038#issuecomment-499900463
2019-06-08 10:15:31 +00:00
bors
7f90abe3aa Auto merge of #61635 - ecstatic-morse:const-signum, r=oli-obk
Make `i*::signum` a `const fn`.

Ticks a box in #53718.

This uses a well-known branchless implementation of `signum`: `(n > 0) as i32 - (n < 0) as i32`.

Here's a [playground](https://play.rust-lang.org/?version=nightly&mode=release&edition=2018&gist=747cf191c4974bf66c9d75e509ae6e6e) comparing the two techniques. On x86 in release mode, the branchless implementation is able to replace a `mov` and `cmov` with a `sar` and `add`, so this should be a bit faster as well.

~~This is marked as a draft since I think I'll need to add `#[rustc_const_unstable]` somewhere. Perhaps the reviewer can point me in the right direction.~~
2019-06-08 07:20:57 +00:00
Mazdak Farrokhzad
6d25bcdb75
Rollup merge of #61627 - davidtwco:ice-async-fn-lint, r=alexcrichton
Add regression test for #61452.

Fixes #61452.

Turns out this ICE had already been fixed, so this PR only adds a regression test.
2019-06-08 03:33:59 +02:00
Mazdak Farrokhzad
5062ad3c60
Rollup merge of #61615 - petrochenkov:errlit, r=matklad
syntax: Treat error literals in more principled way

Free them from their character literal origins.

I actually tried to remove `LitKind::Err` entirely (by converting it into `ExprKind::Err` immediately), and it caused no diagnostic regressions in the test suite.
However, I'd still want to use error literals as general purpose error tokens some day, so I kept them.

The downside of having `LitKind::Err` in addition to `ExprKind::Err` is that every time you want to do something with `ExprKind::Err` you need to make sure that `ExprKind::Lit(LitKind::Err)` is treated in the same way.
Fortunately, this usually happens automatically because both literals and errors are "leaf" expressions, however this PR does fix a couple of inconsistencies between them.

Addresses https://github.com/rust-lang/rust/pull/60679#discussion_r282640663 in a way
2019-06-08 03:33:55 +02:00
Dylan MacKenzie
f6611db1d5 Add const-ness tests for i32::signum 2019-06-07 17:54:50 -07:00
David Wood
5604d9a93f
tests: Add regression test for #61452. 2019-06-07 18:35:06 +01:00
Vadim Petrochenkov
2af47facc3 syntax: Treat error literals in more principled way 2019-06-07 18:01:50 +03:00
Mazdak Farrokhzad
9bbdc40334
Rollup merge of #61605 - GuillaumeGomez:const-generic-display, r=varkor
Fix slice const generic length display

Fixes #61487.

r? @varkor
2019-06-07 16:48:09 +02:00
Mazdak Farrokhzad
de6bc12868
Rollup merge of #61532 - wesleywiser:const_prop_more, r=oli-obk
[const-prop] Support Rvalue::{Ref,Len} and Deref

Also fixes an ICE I found in testing.

r? @oli-obk

~~The final commit is just for a perf run. I'll remove it after that is completed.~~
2019-06-07 16:48:03 +02:00
Mazdak Farrokhzad
9ab654c53e
Rollup merge of #61332 - kennethbgoodin:borrowck-remove-asterisk-suggestion, r=matthewjasper
Remove asterisk suggestion for move errors in borrowck

As per the decision in #54985 completely removes the suggestion to add an asterisk when checking move errors. I believe I've preserved the correct behavior with the "consider borrowing here" branch of the original match arm, but I'm not positive on that.

This is my first PR to rustc so any feedback is greatly appreciated. Thanks.
2019-06-07 16:48:02 +02:00
Simon Sapin
2ce9440368 Stabilize Cell::from_mut and as_slice_of_cells
FCP: https://github.com/rust-lang/rust/issues/43038#issuecomment-499900463
2019-06-07 16:25:41 +02:00
Guillaume Gomez
8f3753703c Fix slice const generic length display 2019-06-07 15:54:16 +02:00
bors
c1c60d292e Auto merge of #61209 - matthewjasper:const-tuple-constructors, r=oli-obk
Make tuple constructors real const fns

Mir construction special cases `Ctor(...)` to be lowered as `Ctor { 0: ... }`, which means this doesn't come up much in practice, but it seems inconsistent not to allow this.

r? @oli-obk
2019-06-07 09:41:06 +00:00
Wesley Wiser
459e37b304 Bless test output 2019-06-06 17:52:17 -04:00
Matthew Jasper
bcf8365675 Make sure constructors functions are type checked correctly 2019-06-06 17:20:06 +01:00
Matthew Jasper
0d75ab2293 Make constructors actually be const functions 2019-06-06 17:20:06 +01:00
Matthew Jasper
6c9a018b60 Don't run MIR passes on constructor shims 2019-06-06 16:10:37 +01:00
Wesley Wiser
dee05ab2cc [const-prop] Handle Rvalue::Len 2019-06-06 08:31:54 -04:00
Wesley Wiser
1e50e01bb7 [const-prop] Handle ProjectionElem::Deref 2019-06-06 08:31:54 -04:00
Wesley Wiser
529b94ea6a [const-prop] Fix ICE when casting function pointers
This fixes an ICE when building libcore with `-Z mir-opt-level=3`.
2019-06-06 08:31:28 -04:00
Vadim Petrochenkov
ff40e37b98 Some code cleanup and tidy/test fixes 2019-06-06 14:04:02 +03:00
bors
daf1ed0e98 Auto merge of #61373 - tmandry:emit-storagedead-along-unwind, r=eddyb
Emit StorageDead along unwind paths for generators

Completion of the work done in #60840. That PR made a change to implicitly consider a local `StorageDead` after Drop, but that was incorrect for DropAndReplace (see also #61060 which tried to fix this in a different way).

This finally enables the optimization implemented in #60187.

r? @eddyb
cc @Zoxc @cramertj @RalfJung
2019-06-06 06:36:12 +00:00
bors
740668dbd9 Auto merge of #57428 - alexreg:associated_type_bounds, r=nikomatsakis,Centril
Implementation of RFC 2289 (associated_type_bounds)

This PR implements the [`asociated_type_bounds` feature](https://github.com/rust-lang/rfcs/blob/master/text/2289-associated-type-bounds.md).

Associated type bounds are implemented in:
   - function/method arguments and return types
   - structs, enums, unions
   - associated items in traits
   - type aliases
   - type parameter defaults
   - trait objects
   - let bindings

CC @nikomatsakis @centril
2019-06-06 03:56:22 +00:00
Alexander Regueiro
ee890331f6 Reblessed tests with NLL compare mode on. 2019-06-06 03:29:02 +01:00
Tyler Mandry
7718b14301 Test StorageDead statements explicitly 2019-06-05 15:10:19 -07:00
Alexander Regueiro
2cdd7f8387 Removed unnecessary nested-lifetime-bounds test. 2019-06-05 21:09:27 +01:00
Alexander Regueiro
10b6daa6c8 Reblessed tests. 2019-06-05 21:09:27 +01:00
Alexander Regueiro
a71d55701e Addressed points raised in review. 2019-06-05 21:09:27 +01:00
Alexander Regueiro
4310ba2c98 Added test suite. 2019-06-05 21:09:27 +01:00
Alexander Regueiro
35585c499f Aggregation of drive-by cosmetic changes. 2019-06-05 21:09:26 +01:00
bors
7cdaffd796 Auto merge of #61548 - Centril:rollup-5t6cvbk, r=Centril
Rollup of 5 pull requests

Successful merges:

 - #61503 (Fix cfg(test) build for x86_64-fortanix-unknown-sgx)
 - #61534 (Edit docs of ExitStatus)
 - #61536 (Don't allow using const fn arguments as "args_required_const")
 - #61538 (Don't use GNU noexec stack note)
 - #61546 (azure: Fix some minor issues which have broken our configuration )

Failed merges:

r? @ghost
2019-06-05 18:29:39 +00:00
Mazdak Farrokhzad
850b50a44f
Rollup merge of #61536 - oli-obk:args_required_const_in_const_fn, r=eddyb
Don't allow using const fn arguments as "args_required_const"

r? @eddyb
2019-06-05 17:43:31 +02:00
bors
47f4975cd7 Auto merge of #61498 - TankhouseAle:const-fn-type-name, r=oli-obk
Add "type_name" support in emulate_intrinsic()

I did some dumb Git things and deleted my original fork repo semi-accidentally (but probably for the best as I'd messed up the history.)

This is the same issue as #61399, which was obviously auto-closed, to be clear.
2019-06-05 15:40:16 +00:00
Oliver Scherer
192c1d0717 Explain the existience of the regression test 2019-06-05 13:25:17 +02:00
Oliver Scherer
dcd46d6b67 Don't allow using const fn arguments as "args_required_const" 2019-06-05 09:49:04 +02:00
Tyler Mandry
e244f625be Add test for DropAndReplace bug 2019-06-04 16:14:36 -07:00
bors
81eb15210a Auto merge of #61527 - pietroalbini:rollup-vhxyqlk, r=pietroalbini
Rollup of 5 pull requests

Successful merges:

 - #61069 (Make MIR drop terminators borrow the dropped location)
 - #61453 (Remove unneeded feature attr from atomic integers doctests)
 - #61488 (Fix NLL typeck ICEs)
 - #61500 (Fix regression 61475)
 - #61523 (Hide gen_future API from documentation)

Failed merges:

r? @ghost
2019-06-04 23:05:05 +00:00
Pietro Albini
46344122d1
Rollup merge of #61500 - estebank:expregression, r=petrochenkov
Fix regression 61475

Addresses #61475.
2019-06-04 22:39:39 +02:00
Pietro Albini
d5643be9b4
Rollup merge of #61488 - matthewjasper:fix-nll-typeck-ices, r=pnkfelix
Fix NLL typeck ICEs

* Don't ICE when a type containing a region is constrained by nothing
* Don't ICE trying to normalize a type in a `ParamEnv` containing global bounds.

To explain what was happening in the `issue-61311-normalize.rs` case:

* When borrow checking the `the_fn` in the last `impl` we would try to normalize `Self::Proj` (`<Unit as HasProjFn>::Proj`).
* We would find the `impl` that we're checking and and check its `where` clause.
* This would need us to check `<Box<dyn Obj + 'static> as HasProj>::Proj: Bound`
* We find two possible implementations, the blanket impl and the bound in our `ParamEnv`.
* The bound in our `ParamEnv` was canonicalized, so we don't see it as a global bound. As such we prefer it to the `impl`.
* This means that we cannot normalize `<Box<dyn Obj + 'static> as HasProj>::Proj` to `Unit`.
* The `<Box<dyn Obj + 'static> as HasProj>::Proj: Bound` bound, which looks like it should be in our `ParamEnv` has been normalized to `Unit: Bound`.
* We fail to prove `<Box<dyn Obj + 'static> as HasProj>::Proj: Bound`.
* We ICE, since we believe typeck have errored.

Closes #61311
Closes #61315
Closes #61320

r? @pnkfelix
cc @nikomatsakis
2019-06-04 22:39:38 +02:00