Commit Graph

232317 Commits

Author SHA1 Message Date
bors
27fb598d51 Auto merge of #114905 - matthiaskrgr:rollup-uxhhr7p, r=matthiaskrgr
Rollup of 5 pull requests

Successful merges:

 - #113115 (we are migrating to askama)
 - #114784 (Improve `invalid_reference_casting` lint)
 - #114822 (Improve code readability by moving fmt args directly into the string)
 - #114878 (rustc book: make more pleasant to search)
 - #114899 (Add missing Clone/Debug impls to SMIR Trait related tys)

r? `@ghost`
`@rustbot` modify labels: rollup
2023-08-16 19:51:47 +00:00
Camille GILLOT
5b2524eb03 Do not pre-compute reachable blocks. 2023-08-16 19:40:46 +00:00
Camille GILLOT
f5e4eb91b7 Use Terminator::edges for backward analysis too. 2023-08-16 19:40:46 +00:00
Camille GILLOT
94c5ea350f Update doc comment. 2023-08-16 18:15:49 +00:00
Camille GILLOT
b8fed2f21c Make dataflow const-prop handle_switch_int monotonic. 2023-08-16 18:12:18 +00:00
Camille GILLOT
e9990ce89c Only evaluate yield place after resume in liveness. 2023-08-16 18:12:18 +00:00
Camille GILLOT
7ded3409b8 Specify that method only applies statement effects. 2023-08-16 18:12:18 +00:00
Camille GILLOT
aa697f599e Rename YieldResumeEffect. 2023-08-16 18:12:18 +00:00
Camille GILLOT
388f6a6413 Make TerminatorEdge plural. 2023-08-16 18:12:18 +00:00
Camille GILLOT
6cf15d4cb5 Rename MaybeUnreachable. 2023-08-16 18:12:18 +00:00
Camille GILLOT
f19cd3f2e1 Use TerminatorEdge for dataflow-const-prop. 2023-08-16 18:12:18 +00:00
Camille GILLOT
3acfa092db Only run MaybeInitializedPlaces once for drop elaboration. 2023-08-16 18:12:18 +00:00
Camille GILLOT
5173d85043 Allow apply_terminator_effect to customize edges. 2023-08-16 18:12:17 +00:00
Camille GILLOT
32711b2b4e Introduce MaybeUnreachable. 2023-08-16 18:12:17 +00:00
Camille GILLOT
934a99eb65 Move domain_size to GenKillAnalysis. 2023-08-16 18:12:17 +00:00
Camille GILLOT
8726cbc75f Move initialization dataflow impls into their own module. 2023-08-16 18:12:17 +00:00
Camille GILLOT
760881b29d Create bottom on-the-fly instead of cloning it. 2023-08-16 18:12:17 +00:00
Camille GILLOT
9c97abd54c Simplify for_each_mut_borrow. 2023-08-16 18:12:17 +00:00
Matthias Krüger
f6c20ad131
Rollup merge of #114899 - spastorino:add-missing-debug, r=compiler-errors
Add missing Clone/Debug impls to SMIR Trait related tys

r? `@compiler-errors`
2023-08-16 20:10:38 +02:00
Matthias Krüger
82b92ad738
Rollup merge of #114878 - tshepang:tshepang-patch-1-1, r=davidtwco
rustc book: make more pleasant to search
2023-08-16 20:10:38 +02:00
Matthias Krüger
6533929ae0
Rollup merge of #114822 - GuillaumeGomez:code-readability-improvement, r=notriddle
Improve code readability by moving fmt args directly into the string

There are some of occurrences where I also transformed `write!(f, "{}", x)` into `f.write_str(x.as_str())`.

r? `@notriddle`
2023-08-16 20:10:38 +02:00
Matthias Krüger
2667d853a6
Rollup merge of #114784 - Urgau:many-improve-invalid_reference_casting-lint, r=est31
Improve `invalid_reference_casting` lint

This PR improves the `invalid_reference_casting` lint:
 - by considering an unlimited number of casts instead only const to mut ptr
 - by also considering ptr-to-integer and integer-to-ptr casts
 - by also taking into account [`ptr::cast`](https://doc.rust-lang.org/std/primitive.pointer.html#method.cast), [`ptr::cast`](https://doc.rust-lang.org/std/primitive.pointer.html#method.cast-1) and [`ptr::cast_const`](https://doc.rust-lang.org/std/primitive.pointer.html#method.cast_const)

Most of this improvements comes from skimming Github Code Search result for [`&mut \*.*as \*const`](https://github.com/search?q=lang%3Arust+%2F%26mut+%5C*.*as+%5C*const%2F&type=code)

r? ``@est31`` (maybe)
2023-08-16 20:10:37 +02:00
Matthias Krüger
52d69476a6
Rollup merge of #113115 - tshepang:patch-5, r=est31
we are migrating to askama

see https://github.com/rust-lang/rust/issues/108868
2023-08-16 20:10:37 +02:00
bors
ce01f4d2e0 Auto merge of #114617 - petrochenkov:docspacing, r=Mark-Simulacrum
proc_macro: Update docs for `Spacing`

Brings the docs more in line with reality
2023-08-16 17:56:14 +00:00
bors
6249c70dbb Auto merge of #3027 - ttsugriy:range-map, r=RalfJung
Avoid unnecessary Vec resize.

If `size > 0` current implementation will first create an empty vec and then push an element into it, which will cause a resize that can be easily avoided.

It's obviously not a big deal, but this also gets rid of `mut` local variable.
2023-08-16 17:13:42 +00:00
Taras Tsugrii
ac0a8ca40d Avoid unnecessary Vec resize.
If `size > 0` current implementation will first create an empty
vec and then push an element into it, which will cause a resize
that can be easily avoided.

It's obviously not a big deal, but this also gets rid of `mut`
local variable.
2023-08-16 10:05:14 -07:00
Santiago Pastorino
66573b5781
Add missing Clone/Debug impls to SMIR Trait related tys 2023-08-16 13:10:52 -03:00
Josh Triplett
5210f482d7 Partially revert #107200
`Ok(0)` is indeed something the caller may interpret as an error, but
that's the *correct* thing to return if the writer can't accept any more
bytes.
2023-08-16 09:00:16 -07:00
bors
c94cb834d0 Auto merge of #112500 - lukas-code:span-ctxt, r=petrochenkov
Fix argument removal suggestion around macros

Fixes #112437.
Fixes #113866.
Helps with #114255.

The issue was that `span.find_ancestor_inside(outer)` could previously return a span with a different expansion context from `outer`.

This happens for example for the built-in macro `panic!`, which expands to another macro call of `panic_2021!` or `panic_2015!`. Because the call site of `panic_20xx!` has not associated source code, its span currently points to the call site of `panic!` instead.

Something similar also happens items that get desugared in AST->HIR lowering. For example, `for` loops get two spans: One "inner" span that has the `.desugaring_kind()` kind set to `DesugaringKind::ForLoop` and one "outer" span that does not. Similar to the macro situation, both of these spans point to the same source code, but have different expansion contexts.

This causes problems, because joining two spans with different expansion contexts will usually[^1] not actually join them together to avoid creating "spaghetti" spans that go from the macro definition to the macro call. For example, in the following snippet `full_span` might not actually contain the `adjusted_start` and `adjusted_end`. This caused the broken suggestion / debug ICE in the linked issues.
```rust
let adjusted_start = start.find_ancestor_inside(shared_ancestor);
let adjusted_end = end.find_ancestor_inside(shared_ancestor);
let full_span = adjusted_start.to(adjusted_end)
```

To fix the issue, this PR introduces a new method, `find_ancestor_inside_same_ctxt`, which combines the functionality of `find_ancestor_inside` and `find_ancestor_in_same_ctxt`: It finds an ancestor span that is contained within the parent *and* has the same syntax context, and is therefore safe to extend. This new method should probably be used everywhere, where the returned span is extended, but for now it is just used for the argument removal suggestion.

Additionally, this PR fixes a second issue where the function call itself is inside a macro but the arguments come from outside the macro. The test is added in the first commit to include stderr diff, so this is best reviewed commit by commit.

[^1]: If one expansion context is the root context and the other is not.
2023-08-16 14:47:01 +00:00
Guillaume Gomez
16b34bfae3 Use more named format args 2023-08-16 16:35:23 +02:00
Guillaume Gomez
a1a94b1c0f Improve code readability by moving fmt args directly into the string 2023-08-16 16:35:23 +02:00
bors
f99343f9eb Auto merge of #3030 - RalfJung:oob, r=saethlin
on out-of-bounds error, show where the allocation was created

This seems useful, I think?
r? `@saethlin`
2023-08-16 14:19:58 +00:00
John Kåre Alsaker
a4e55f140b Remove conditional use of Sharded from query caches 2023-08-16 14:16:05 +02:00
bors
1ec628d7fa Auto merge of #114850 - khei4:khei4/trailing_zero_codegen, r=nikic
add codegen test for `trailing_zeros` comparison

This PR add codegen test for
https://github.com/rust-lang/rust/issues/107554#issuecomment-1677369236

Fixes #107554.
2023-08-16 11:07:13 +00:00
Vadim Petrochenkov
176a9392d1 proc_macro: Update docs for Spacing
Brings the docs more in line with reality
2023-08-16 19:00:51 +08:00
bors
2bc7929138 Auto merge of #114847 - nikic:update-llvm-12, r=cuviper
Update LLVM submodule

Merge the current release/17.x branch.

Fixes #114691.
Fixes #114312.

The test for the latter is taken from #114726.
2023-08-16 09:19:38 +00:00
Ralf Jung
f71d76e0dd on out-of-bounds error, show where the allocation was created 2023-08-16 10:49:08 +02:00
bors
22f5aadd1d Auto merge of #2940 - saethlin:use-after-free-spans, r=RalfJung
When reporting a heap use-after-free, say where the allocation was allocated and deallocated

This is a partial solution to: https://github.com/rust-lang/miri/issues/2917

Currently in the interpreter, we only have accurate information for where heap allocations are allocated and deallocated (see https://github.com/rust-lang/miri/pull/2940#discussion_r1243559711). So this just implements support for allocations where the information is already available, and the full support will require more interpreter tweaks.
2023-08-16 08:00:33 +00:00
bors
60713f4234 Auto merge of #114879 - matthiaskrgr:rollup-tim571q, r=matthiaskrgr
Rollup of 7 pull requests

Successful merges:

 - #114721 (Optimizing the rest of bool's Ord implementation)
 - #114746 (Don't add associated type bound for non-types)
 - #114779 (Add check before suggest removing parens)
 - #114859 (Add trait related queries to SMIR's rustc_internal)
 - #114861 (fix typo: affect -> effect)
 - #114867 ([nit] Fix a comment typo.)
 - #114871 (Update the link in the docs of `std::intrinsics`)

r? `@ghost`
`@rustbot` modify labels: rollup
2023-08-16 07:37:32 +00:00
Ralf Jung
3e9679e861 clarify CStr lack of layout guarnatees 2023-08-16 09:37:06 +02:00
bors
edc6fc12e3 Auto merge of #3028 - ttsugriy:range-map-find-offset, r=RalfJung
Replace hand-written binary search with Vec::binary_search_by.

It's similar to https://github.com/rust-lang/miri/pull/3021 and should improve maintainability.
2023-08-16 07:26:49 +00:00
Matthias Krüger
6024ad1a05
Rollup merge of #114871 - schvv31n:fix-link-in-docs, r=scottmcm
Update the link in the docs of `std::intrinsics`

The previous link in that place, https://github.com/rust-lang/miri/blob/master/src/shims/intrinsics.rs, no longer points to an existing file.
2023-08-16 08:43:53 +02:00
Matthias Krüger
8201f0ffda
Rollup merge of #114867 - ttsugriy:ttsugriy-patch-1, r=scottmcm
[nit] Fix a comment typo.
2023-08-16 08:43:53 +02:00
Matthias Krüger
6f27032118
Rollup merge of #114861 - RalfJung:no-effect, r=wesleywiser
fix typo: affect -> effect

I just realized I made a silly typo when writing that comment...
2023-08-16 08:43:52 +02:00
Matthias Krüger
b54fe76494
Rollup merge of #114859 - spastorino:add-smir-cx-trait-fns, r=compiler-errors
Add trait related queries to SMIR's rustc_internal

r? `@oli-obk`
2023-08-16 08:43:52 +02:00
Matthias Krüger
8f1c8116f6
Rollup merge of #114779 - MU001999:fix/114701, r=petrochenkov
Add check before suggest removing parens

Fixes #114701
2023-08-16 08:43:51 +02:00
Matthias Krüger
e21e039a78
Rollup merge of #114746 - compiler-errors:atb-no-const, r=TaKO8Ki
Don't add associated type bound for non-types

We had this fix for equality constraints (#99890), but for some reason not trait constraints 😅

Fixes #114744
2023-08-16 08:43:50 +02:00
Matthias Krüger
4b2d87d82c
Rollup merge of #114721 - danflapjax:bool-ord-optimization, r=cuviper
Optimizing the rest of bool's Ord implementation

After coming across issue #66780, I realized that the other functions provided by Ord (`min`, `max`, and `clamp`) were similarly inefficient for bool. This change provides implementations for them in terms of boolean operators, resulting in much simpler assembly and faster code.
Fixes issue #114653

[Comparison on Godbolt](https://rust.godbolt.org/z/5nb5P8e8j)

`max` assembly before:
```assembly
example::max:
        mov     eax, edi
        mov     ecx, eax
        neg     cl
        mov     edx, esi
        not     dl
        cmp     dl, cl
        cmove   eax, esi
        ret
```
`max` assembly after:
```assembly
example::max:
        mov     eax, edi
        or      eax, esi
        ret
```
`clamp` assembly before:
```assembly
example:🗜️
        mov     eax, esi
        sub     al, dl
        inc     al
        cmp     al, 2
        jae     .LBB1_1
        mov     eax, edi
        sub     al, sil
        movzx   ecx, dil
        sub     dil, dl
        cmp     dil, 1
        movzx   edx, dl
        cmovne  edx, ecx
        cmp     al, -1
        movzx   eax, sil
        cmovne  eax, edx
        ret
.LBB1_1:
        ; identical assert! code
```
`clamp` assembly after:
```assembly
example:🗜️
        test    edx, edx
        jne     .LBB1_2
        test    sil, sil
        jne     .LBB1_3
.LBB1_2:
        or      dil, sil
        and     dil, dl
        mov     eax, edi
        ret
.LBB1_3:
        ; identical assert! code
```
2023-08-16 08:43:49 +02:00
bors
e08baec579 Auto merge of #3029 - rust-lang:rustup-2023-08-16, r=RalfJung
Automatic sync from rustc
2023-08-16 06:24:00 +00:00
The Miri Conjob Bot
50b4bc0758 Merge from rustc 2023-08-16 05:32:16 +00:00