Commit Graph

78695 Commits

Author SHA1 Message Date
kennytm
e1f031e5d4
Rollup merge of #50819 - cjkenn:cjkenn/div-by-zero, r=kennytm
Fix potential divide by zero

This should fix #50761

I had trouble reproducing with the provided code, but looking at the stack trace would indicate that this code is the likely cause. I made a number of assumptions here, because I don't have enough context on how the register size is set:

1. I assumed `rest.unit.size.bytes()` can be 0, and it's ok if it's set to 0 before this function is called
2. I assumed that if `rest.unit.size.bytes()` is 0, that we want `rest_count` to also be 0.
2018-05-20 04:17:41 +08:00
kennytm
9f34c7feea
Rollup merge of #50883 - dlrobertson:fix_warning, r=TimNN
Fix warning when building stage0 libcore

When building stage0 a warning will be triggered when compiling libcore
due to `align_to_offsets` not being used.
2018-05-20 04:16:11 +08:00
kennytm
974396b991
Rollup merge of #50858 - robinkrahl:rustdoc-fix-order, r=steveklabnik
Reorder description for snippets in rustdoc documentation

The example code snippets for the `no_run` and `compile_fail` attributes in the rustdoc documentation were followed by the description for the wrong attribute.  This patch reorders the descriptions to match the code snippets.
2018-05-20 04:16:08 +08:00
kennytm
907288c73f
Rollup merge of #50854 - zackmdavis:and_the_case_of_the_unused_field_pattern_3_straight_to_video, r=estebank
in which the unused shorthand field pattern debacle/saga continues

In e4b1a79 (#47922), we corrected erroneous suggestions for unused
shorthand field pattern bindings, suggesting `field: _` where the
previous suggestion of `_field` wouldn't even have compiled
(#47390). Soon, it was revealed that this was insufficient (#50303), and
the fix was extended to references, slices, &c. (#50327) But even this
proved inadequate, as the erroneous suggestions were still being issued
for patterns in local (`let`) bindings (#50804). Here, we yank the
shorthand-detection and variable/node registration code into a new
common function that can be called while visiting both match arms and
`let` bindings.

Resolves #50804.

r? @estebank
2018-05-20 04:16:06 +08:00
kennytm
611dafcf06
Rollup merge of #50829 - est31:master, r=estebank
CheckLoopVisitor: also visit break expressions

Fixes #50802
2018-05-20 04:16:03 +08:00
kennytm
fbfce83f58
Rollup merge of #50827 - nox:llvmup, r=eddyb
Update LLVM to 56c931901cfb85cd6f7ed44c7d7520a8de1edf97

This brings in https://github.com/rust-lang/llvm/pull/115, which fixes https://github.com/rust-lang/rust/issues/49873.
2018-05-20 04:16:01 +08:00
bors
a3085756ed Auto merge of #50782 - matthewjasper:wheres-main, r=matthewjasper
Prevent main from having a where clause.

Closes #50714

Should this have a crater run?

cc #48557, #48214

r? @nikomatsakis
2018-05-19 20:10:34 +00:00
cjkenn
8d9a87c14d remove feature line from test 2018-05-19 13:01:28 -07:00
Eduard-Mihai Burtescu
26aad25487 rustc: introduce {ast,hir}::AnonConst to consolidate so-called "embedded constants". 2018-05-19 20:34:42 +03:00
bors
5c3960c2d6 Auto merge of #50690 - oli-obk:mir_stuff, r=eddyb
Ensure that statics are always ByRef

Statics aren't values to be used, they are names for memory locations.

r? @eddyb

cc @Zoxc

fixes #50706
2018-05-19 17:30:18 +00:00
cjkenn
ecce274e56 use if let to avoid potential div by zero
remove semicolon -_-

Add rem_bytes to conditional to avoid error when performing mod by 0

Add test file to confirm compilation passes.

Ensure we don't divide or mod by zero in llvm_type. Include test file from issue.
2018-05-19 08:49:54 -07:00
Eduard-Mihai Burtescu
072b0f617f rustc: removed unused DefPathData::Initializer DefId's for associated constants. 2018-05-19 18:47:06 +03:00
kennytm
9e914cc223
Rollup merge of #50531 - iancormac84:merge-typeidhasher-cleanup, r=michaelwoerister
Cleanup uses of TypeIdHasher and replace them with StableHasher

Fixes #50424

r? @michaelwoerister
2018-05-19 23:40:58 +08:00
bors
1b240dad06 Auto merge of #50763 - KyleStach1678:unused-loop-label, r=petrochenkov
Add lint checks for unused loop labels

Previously no warning was generated when a loop label was written out but never used (i.e. in a `break` or `continue` statement):
```rust
fn main() {
    'unused_label: loop {}
}
```
would compile without complaint.

This fix introduces `-W unused_loop_label`, which generates the following warning message for the above snippet:
```
warning: unused loop label
 --> main.rs:2:5
  |
2 |     'unused_label: loop {}
  |     ^^^^^^^^^^^^^
  |
  = note: #[warn(unused_loop_label)] on by default
```

Fixes: #50751.
2018-05-19 14:52:30 +00:00
David Wood
280c6fadee
Remove extra calls to kill_loans_out_of_scope_at_location - keep only before_statement_effect and before_terminator_effect. 2018-05-19 15:39:38 +01:00
Oliver Schneider
7c25aa79c5 Use Size instead of u64 in mir interpretation 2018-05-19 16:38:49 +02:00
Oliver Schneider
3e933f4d8c Keep statics' constant as ByRef 2018-05-19 14:24:24 +02:00
Oliver Schneider
6630678428 Go through an allocation when accessing fields of constants 2018-05-19 14:24:24 +02:00
Oliver Schneider
76ddede5c2 Reintroduce some sanity checks 2018-05-19 14:24:24 +02:00
Oliver Schneider
8b99c61701 Ensure that statics are always ByRef 2018-05-19 14:24:24 +02:00
bors
ef8ee64774 Auto merge of #50760 - petrochenkov:legimp, r=nikomatsakis
Turn deprecation lint `legacy_imports` into a hard error

Closes https://github.com/rust-lang/rust/issues/38260

The lint was introduced in Dec 2016, then made deny-by-default in Jun 2017 when crater run found 0 regressions caused by it.

This lint requires some not entirely trivial amount of import resolution logic that (surprisingly or not) interacts with `feature(use_extern_macros)` (https://github.com/rust-lang/rust/issues/35896), so it would be desirable to remove it before stabilizing `use_extern_macros`.
In particular, this PR fixes the failing example in https://github.com/rust-lang/rust/issues/50725 (but not the whole issue, `use std::panic::{self}` still can cause other undesirable errors when `use_extern_macros` is enabled).
2018-05-19 12:16:50 +00:00
Oliver Schneider
387875dfe3 Update clippy 2018-05-19 13:18:02 +02:00
Oliver Schneider
8753d0f12f Overflows only panic in debug mode 2018-05-19 13:10:52 +02:00
Oliver Schneider
27e710f557 Add a test showing the erroneous promoted bug 2018-05-19 13:10:51 +02:00
Oliver Schneider
d81651e8e9 Release mode overflows should not cause const eval to error 2018-05-19 13:10:51 +02:00
bors
c95e1cccc9 Auto merge of #50874 - nikomatsakis:nll-reset-unification, r=estebank
use `reset_unifications` instead of creating new unification table

This eliminates a hot spot in NLL performance.
2018-05-19 10:04:42 +00:00
bors
bdace29de0 Auto merge of #50744 - nikic:mutable-noalias, r=alexcrichton
Emit noalias on &mut parameters by default

This used to be disabled due to LLVM bugs in the handling of
noalias information in conjunction with unwinding. However,
according to #31681 all known LLVM bugs have been fixed by
LLVM 6.0, so it's probably time to reenable this optimization.

-Z no-mutable-noalias is left as an escape-hatch to debug problems
suspected to stem from this change.
2018-05-19 07:42:03 +00:00
bobtwinkles
e62fa27071 Refactor borrowck to share more code with fact dumping
Following up my changes in #50798, I wanted to grab at least the low-hanging
fruit for code deduplication.
2018-05-18 23:47:48 -07:00
bors
8319ef5b78 Auto merge of #50709 - alexcrichton:revert-musl, r=sfackler
Revert #50105 until regression is fixed

Discovered at https://github.com/rust-lang/rust/pull/50105#issuecomment-388630750 it looks like this caused a regression with i686 musl, so let's revert in the meantime while a fix is worked out
2018-05-19 03:10:53 +00:00
Dan Robertson
8b02488834
Fix warning when building stage0 libcore
When building stage0 a warning will be triggered when compiling libcore
due to align_to_offsets not being used.
2018-05-19 01:13:31 +00:00
bors
c6a1979e20 Auto merge of #50603 - eddyb:issue-49955, r=nikomatsakis
rustc_mir: allow promotion of promotable temps indexed at runtime.

Fixes #49955.

r? @nikomatsakis
2018-05-19 00:27:45 +00:00
Kyle Stachowicz
6da64a7666 Default unused_labels to allow, move to "unused" 2018-05-18 16:57:16 -07:00
Kyle Stachowicz
5586cd80e2 Revert "Remove unused label in mir"
This reverts commit b2a2450cf2925498e1c3bdd781aa1978f9eb00e5.
2018-05-18 16:57:16 -07:00
Kyle Stachowicz
335f91fd69 Revert "Allow unused_labels in some compile-fail tests"
This reverts commit b9257e2ca161b1bf5aae9d6b667f4d0c6b8d7be6.
2018-05-18 16:57:16 -07:00
Kyle Stachowicz
a336aa91db Allow unused_labels in some compile-fail tests 2018-05-18 16:57:16 -07:00
Kyle Stachowicz
f488d2b393 Remove unused label in mir 2018-05-18 16:57:16 -07:00
Kyle Stachowicz
702f1dd846 Add tests for new labeled blocks for unused_labels 2018-05-18 16:57:16 -07:00
Kyle Stachowicz
88f4063c83 Reimplement unused_labels lint as a compiler builtin in the resolver 2018-05-18 16:57:15 -07:00
Kyle Stachowicz
7676982e90 Revert "Add lint checks for unused loop labels"
This functionality is being reimplemented in the resolver phase

This reverts commit 503a69e844970476b27bf1ac7be951bb22194f50.
2018-05-18 16:57:15 -07:00
Kyle Stachowicz
167cedefe6 Fix formatting in unused label linting to make tidy checks pass 2018-05-18 16:57:15 -07:00
Kyle Stachowicz
4de4e61864 Fix ignored unused outer label when inner label shadows and is broken multiple times 2018-05-18 16:57:15 -07:00
Kyle Stachowicz
0f274122ee Add test case for shadowed labels, with the inner broken multiple times 2018-05-18 16:57:15 -07:00
Kyle Stachowicz
acd6ab8f0f Rename unused_loop_label to unused_label and fix/clean up lint logic 2018-05-18 16:57:15 -07:00
Kyle Stachowicz
bb867d3512 Add additional test case to unused_label lint 2018-05-18 16:57:15 -07:00
Kyle Stachowicz
7c4aa7362e Rename test to unused_label and remove empty stdout file 2018-05-18 16:57:15 -07:00
Kyle Stachowicz
d67628e053 Add lint checks for unused loop labels 2018-05-18 16:57:15 -07:00
Matthew Jasper
aa5635338c Filter global bounds from ParamEnv again. 2018-05-18 23:40:44 +01:00
bors
37a409177c Auto merge of #50319 - nagisa:align_to, r=alexcrichton
Implement [T]::align_to

Note that this PR deviates from what is accepted by RFC slightly by making `align_offset` to return an offset in elements, rather than bytes. This is necessary to sanely support `[T]::align_to` and also simply makes more sense™. The caveat is that trying to align a pointer of ZST is now an equivalent to `is_aligned` check, rather than anything else (as no number of ZST elements will align a misaligned ZST pointer).

It also implements the `align_to` slightly differently than proposed in the RFC to properly handle cases where size of T and U aren’t co-prime.

Furthermore, a promise is made that the slice containing `U`s will be as large as possible (contrary to the RFC) – otherwise the function is quite useless.

The implementation uses quite a few underhanded tricks and takes advantage of the fact that alignment is a power-of-two quite heavily to optimise the machine code down to something that results in as few known-expensive instructions as possible. Currently calling `ptr.align_offset` with an unknown-at-compile-time `align` results in code that has just a single "expensive" modulo operation; the rest is "cheap" arithmetic and bitwise ops.

cc https://github.com/rust-lang/rust/issues/44488 @oli-obk

As mentioned in the commit message for align_offset, many thanks go to Chris McDonald.
2018-05-18 21:49:38 +00:00
Niko Matsakis
cce9132780 track the root UseTree in addition to the leaf 2018-05-18 17:18:04 -04:00
Matthew Jasper
218a81b06c Prevent main and start from having a where clause. 2018-05-18 22:03:24 +01:00