Commit Graph

231337 Commits

Author SHA1 Message Date
Nicholas Nethercote
6fc2c481e5 Move TokenCursor::break_last_token into Parser.
Similar to the last commit, it's more of a `Parser`-level concern than a
`TokenCursor`-level concern. And the struct size reductions are nice.

After this change, `TokenCursor` is as minimal as possible (two fields
and two methods) which is nice.
2023-08-02 10:11:41 +10:00
Nicholas Nethercote
54eb6bc34c Move TokenCursor::num_next_calls into Parser and rename it.
It's more of a `Parser`-level concern than a `TokenCursor`-level
concern. Also, `num_bump_calls` is a more accurate name, because it's
incremented in `Parser::bump`.
2023-08-02 10:07:18 +10:00
Nicholas Nethercote
203cba76e0 Only call parse_token_tree once.
This code currently uses a `while` loop and gathers token trees into a
vector, but it only succeeds in the case where there is a single token
tree. We can instead just call `parse_token_tree` once and then look for
`Eof` to detect the success case.
2023-08-02 10:04:00 +10:00
Nicholas Nethercote
db7b07aa02 Inline and remove parse_all_token_trees.
It has a single call site.
2023-08-02 10:03:16 +10:00
Nicholas Nethercote
d9f2fdfaed parse_all_token_trees cannot fail. 2023-08-02 10:01:49 +10:00
Taras Tsugrii
f74eee2fa6 [rustc_span][perf] Remove unnecessary string joins and allocs.
Comparing vectors of string parts yields the same result but avoids
unnecessary `join` and potential allocation for resulting `String`.
This code is cold so it's unlikely to have any measurable impact, but
considering but since it's also simpler, why not? :)
2023-08-01 16:57:43 -07:00
Michael Goulet
99969d282b Use upvar_tys in more places, make it a list 2023-08-01 23:19:31 +00:00
bors
f77c624c03 Auto merge of #113339 - lqd:respect-filters, r=tmiasko
Filter out short-lived LLVM diagnostics before they reach the rustc handler

During profiling I saw remark passes being unconditionally enabled: for example `Machine Optimization Remark Emitter`.

The diagnostic remarks enabled by default are [from missed optimizations and opt analyses](https://github.com/rust-lang/rust/pull/113339#discussion_r1259480303). They are created by LLVM, passed to the diagnostic handler on the C++ side, emitted to rust, where they are unpacked, C++ strings are converted to rust, etc.

Then they are discarded in the vast majority of the time (i.e. unless some kind of `-Cremark` has enabled some of these passes' output to be printed).

These unneeded allocations are very short-lived, basically only lasting between the LLVM pass emitting them and the rust handler where they are discarded. So it doesn't hugely impact max-rss, and is only a slight reduction in instruction count (cachegrind reports a reduction between 0.3% and 0.5%) _on linux_. It's possible that targets without `jemalloc` or with a worse allocator, may optimize these less.

It is however significant in the aggregate, looking at the total number of allocated bytes:
- it's the biggest source of allocations according to dhat, on the benchmarks I've tried e.g. `syn` or `cargo`
- allocations on `syn` are reduced by 440MB, 17% (from 2440722647 bytes total, to 2030461328 bytes)
- allocations on `cargo` are reduced by 6.6GB, 19% (from 35371886402 bytes total, to 28723987743 bytes)

Some of these diagnostics objects [are allocated in LLVM](https://github.com/rust-lang/rust/pull/113339#discussion_r1252387484) *before* they're emitted to our diagnostic handler, where they'll be filtered out. So we could remove those in the future, but that will require changing a few LLVM call-sites upstream, so I left a FIXME.
2023-08-01 23:15:20 +00:00
Michael Goulet
d21a335e8f Don't select infer -> dyn Trait 2023-08-01 23:12:03 +00:00
Michael Goulet
ac6f2f0d2e Fix a comment 2023-08-01 23:10:38 +00:00
Michael Goulet
44be25d8a2 don't create a predicate for just a comparison 2023-08-01 23:10:38 +00:00
Michael Goulet
8696fa71b3 Convert adt_sized_constraint to early-binder, use list 2023-08-01 23:10:38 +00:00
Guillaume Gomez
c7db0f4751 Migrate GUI colors test to original CSS color format 2023-08-02 00:44:41 +02:00
yukang
58bda47669 fmt_override is a better name since we are also adding files to whitelist 2023-08-02 06:42:40 +08:00
yukang
79709e5d1a print more detailed format files and untracked files count 2023-08-02 06:32:54 +08:00
Rémy Rakic
7c12b2e636 Revert "Rollup merge of #113588 - RalfJung:llvm-merge-base, r=albertlarsan68"
This reverts commit 849f4f8845, reversing
changes made to 02426434e2.
2023-08-01 21:45:20 +00:00
bors
d12c6e947c Auto merge of #114273 - nnethercote:move-doc-comment-desugaring, r=petrochenkov
Move doc comment desugaring out of `TokenCursor`.

It's awkward that `TokenCursor` sometimes desugars doc comments on the fly, but usually doesn't.

r? `@petrochenkov`
2023-08-01 21:27:48 +00:00
Rémy Rakic
ca5a383fb6 remove remark filtering on the rust side
now that remarks are filtered before cg_llvm's diagnostic handler callback
is called, we don't need to do the filtering post c++-to-rust conversion
of the diagnostic.
2023-08-01 21:01:20 +00:00
Rémy Rakic
77d01103a3 filter LLVM diagnostics before crossing the rust bridge
this will eliminate many short-lived allocations (e.g. 20% of the memory used
building cargo) when unpacking the diagnostic and converting its various
C++ strings into rust strings, just to be filtered out most of the time.
2023-08-01 21:01:20 +00:00
Waffle Maybe
60fffbc978
Temporary remove myself from review rotation 2023-08-02 00:09:54 +04:00
bors
abd3637e42 Auto merge of #105545 - erikdesjardins:ptrclean, r=bjorn3
cleanup: remove pointee types

This can't be merged until the oldest LLVM version we support uses opaque pointers, which will be the case after #114148. (Also note `-Cllvm-args="-opaque-pointers=0"` can technically be used in LLVM 15, though I don't think we should support that configuration.)

I initially hoped this would provide some minor perf win, but in https://github.com/rust-lang/rust/pull/105412#issuecomment-1341224450 it had very little impact, so this is only valuable as a cleanup.

As a followup, this will enable #96242 to be resolved.

r? `@ghost`

`@rustbot` label S-blocked
2023-08-01 19:44:17 +00:00
Taras Tsugrii
9563eec9a8 [rustc_attr][nit] Replace filter + is_some with map_or.
It's slightly shorter and better communicates the intent.
2023-08-01 12:39:32 -07:00
Urgau
0b9529cca3 Add diagnostic items for <*const _>::cast and ptr::from_mut 2023-08-01 20:04:01 +02:00
Urgau
ef3413d423 Add more tests for useless_ptr_null_checks lint 2023-08-01 20:04:01 +02:00
Urgau
84c5372a45 Rename incorrect_fn_null_checks to useless_ptr_null_checks (clippy side) 2023-08-01 20:04:01 +02:00
bors
fe90d7dfcd Auto merge of #113854 - klensy:aarch64-msvc-remove-hack, r=Mark-Simulacrum
aarch64-msvc: remove CI hack for bad Windows SDK version

This removes hack which manually replaced windows sdk version, as it looks like useless now, as CI uses newer version: https://github.com/rust-lang-ci/rust/actions/runs/5596259246/jobs/10233070602#step:24:929
`C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt\corecrt_io.h` (look at version)

related https://github.com/rust-lang/rust/issues/88796

It's nice to have some way to assert bad version, but i don't see anything except checking env https://github.com/rust-lang/cc-rs/pull/646
2023-08-01 17:58:02 +00:00
Urgau
d2b7c8028f Rename incorrect_fn_null_checks to useless_ptr_null_checks 2023-08-01 19:35:31 +02:00
Urgau
743ae5a2eb Expand incorrect_fn_null_check lint with reference null checking 2023-08-01 19:35:31 +02:00
Michael Goulet
1c35634efe Suppress unnecessary outlives 2023-08-01 17:16:47 +00:00
Ralf Jung
69b02ef4be fix and extend ptr_comparison test 2023-08-01 18:23:37 +02:00
bors
4896daa398 Auto merge of #114331 - matthiaskrgr:rollup-rnrmwcx, r=matthiaskrgr
Rollup of 7 pull requests

Successful merges:

 - #100455 (Implement RefUnwindSafe for Backtrace)
 - #113428 (coverage: Replace `ExpressionOperandId` with enum `Operand`)
 - #114283 (Use parking lot's rwlock even without parallel-rustc)
 - #114288 (Improve diagnostic for wrong borrow on binary operations)
 - #114296 (interpret: fix alignment handling for Repeat expressions)
 - #114306 ([rustc_data_structures][perf] Simplify base_n::push_str.)
 - #114320 (Cover statements for stable_mir)

r? `@ghost`
`@rustbot` modify labels: rollup
2023-08-01 16:09:13 +00:00
Ralf Jung
8496292dda properly track why we checked whether a pointer is in-bounds
also simplify the in-bounds checking in Miri's borrow trackers
2023-08-01 17:57:13 +02:00
Matthias Krüger
41364c7c1d
Rollup merge of #114320 - ouz-a:smir_statements, r=oli-obk
Cover statements for stable_mir

Added missing statements to stable_mir, used opaque types for few types that are only used for diagnostic.

cc https://github.com/rust-lang/project-stable-mir/issues/16

r? `@oli-obk`
2023-08-01 17:39:13 +02:00
Matthias Krüger
00ad3ccae6
Rollup merge of #114306 - ttsugriy:push_str, r=wesleywiser
[rustc_data_structures][perf] Simplify base_n::push_str.

This minor change removes the need to reverse resulting digits. Since reverse is O(|digit_num|) but bounded by 128, it's unlikely to be a noticeable in practice. At the same time, this code is also a 1 line shorter, so combined with tiny perf win, why not?

I ran https://gist.github.com/ttsugriy/ed14860ef597ab315d4129d5f8adb191 on M1 macbook air and got a small improvement
```
Running benches/base_n_benchmark.rs (target/release/deps/base_n_benchmark-825fe5895b5c2693)
push_str/old            time:   [14.180 µs 14.313 µs 14.462 µs]
                        Performance has improved.
Found 5 outliers among 100 measurements (5.00%)
  4 (4.00%) high mild
  1 (1.00%) high severe
push_str/new            time:   [13.741 µs 13.839 µs 13.973 µs]
                        Performance has improved.
Found 8 outliers among 100 measurements (8.00%)
  3 (3.00%) high mild
  5 (5.00%) high severe
```
2023-08-01 17:39:12 +02:00
Matthias Krüger
fa33d6e185
Rollup merge of #114296 - RalfJung:interpret-repeat-align, r=oli-obk
interpret: fix alignment handling for Repeat expressions
2023-08-01 17:39:12 +02:00
Matthias Krüger
c726dcb962
Rollup merge of #114288 - Urgau:fix-issue-109352, r=b-naber
Improve diagnostic for wrong borrow on binary operations

This PR improves the diagnostic for wrong borrow on binary operations by suggesting to reborrow on appropriate expressions.

```diff
+    = note: an implementation for `&Foo * &Foo` exist
+ help: consider reborrowing both sides
+    |
+ LL |     let _ = &*ref_mut_foo * &*ref_mut_foo;
+    |             ++              ++
```

Fixes https://github.com/rust-lang/rust/issues/109352
2023-08-01 17:39:11 +02:00
Matthias Krüger
b38718090e
Rollup merge of #114283 - oli-obk:parkin_lot_rwlock, r=SparrowLii
Use parking lot's rwlock even without parallel-rustc

Considering that this doesn't affect perf, I think we should use the simplest solution.
2023-08-01 17:39:10 +02:00
Matthias Krüger
52bfceb8f9
Rollup merge of #113428 - Zalathar:operand, r=davidtwco
coverage: Replace `ExpressionOperandId` with enum `Operand`

*This is one step in my larger coverage refactoring ambitions described at <https://github.com/rust-lang/compiler-team/issues/645>.*

LLVM coverage has a concept of “mapping expressions” that allow a span's execution count to be computed as a simple arithmetic expression over other counters/expressions, instead of requiring a dedicated physical counter for every control-flow branch.

These expressions have an operator (`+` or `-`) and two operands. Operands are currently represented as `ExpressionOperandId`, which wraps a `u32` with the following semantics:

- 0 represents a special counter that always has a value of zero
- Values ascending from 1 represent counter IDs
- Values descending from `u32::MAX` represent the IDs of other expressions

---

This change replaces that whole `ExpressionOperandId` scheme with a simple enum that explicitly distinguishes between the three cases.

This lets us remove a lot of fiddly code for dealing with the different operand kinds:
- Previously it was only possible to distinguish between counter-ID operands and expression-ID operands by comparing the operand ID with the total number of counters in a function. This is unnecessary now that the enum distinguishes them explicitly.
- There's no need for expression IDs to descend from `u32::MAX` and then get translated into zero-based indices in certain places. Now that they ascend from zero, they can be used as indices directly.
- There's no need to reserve ID number 0 for the special zero operand, since it can just have its own variant in the enum, so counter IDs can count up from 0.

(Making counter IDs ascend from 0 also lets us fix an off-by-one error in the query for counting the total number of counters, which would cause LLVM to emit an extra unused counter for every instrumented function.)

---

This PR may be easiest to review as individual patches, since that breaks it up into clearly distinct parts:
- Replace a `u32` wrapper with an explicit enum, without changing the semantics of the underlying IDs being stored.
- Change the numbering scheme used by `Operand::Expression` to make expression IDs ascend from 0 (instead of descending from `u32::MAX`).
- Change the numbering scheme used by `Operand::Counter` to make counter IDs ascend from 0 (instead of ascending from 1).
2023-08-01 17:39:10 +02:00
Matthias Krüger
c97af34de1
Rollup merge of #100455 - xfix:backtrace-ref-unwind-safe, r=dtolnay
Implement RefUnwindSafe for Backtrace

Backtrace doesn't have visible mutable state.

See also https://internals.rust-lang.org/t/should-backtrace-be-refunwindsafe/17169?u=xfix
2023-08-01 17:39:09 +02:00
Mu001999
049c728c60 Suggests turbofish in patterns 2023-08-01 23:30:40 +08:00
ouz-a
2ff62fdfcc clean up, use opaque types 2023-08-01 17:48:20 +03:00
bors
828bdc2c26 Auto merge of #112849 - m-ou-se:panic-message-format, r=thomcc
Change default panic handler message format.

This changes the default panic hook's message format from:

```
thread '{thread}' panicked at '{message}', {location}
```

to

```
thread '{thread}' panicked at {location}:
{message}
```

This puts the message on its own line without surrounding quotes, making it easiser to read. For example:

Before:
```
thread 'main' panicked at 'env variable `IMPORTANT_PATH` should be set by `wrapper_script.sh`', src/main.rs:4:6
```
After:
```
thread 'main' panicked at src/main.rs:4:6:
env variable `IMPORTANT_PATH` should be set by `wrapper_script.sh`
```

---

See this PR by `@nyurik,` which does that for only multi-line messages (specifically because of `assert_eq`): https://github.com/rust-lang/rust/pull/111071

This is the change that does that for *all* panic messages.
2023-08-01 14:15:09 +00:00
Yuri Astrakhan
2c5ecf22a2 Fix windows test output. 2023-08-01 14:24:11 +02:00
Ralf Jung
7d5886504c rename deref_operand → deref_pointer and some Miri helper functions 2023-08-01 13:40:29 +02:00
Urgau
a40829498e Rename maybe_suggest_convert_to_slice fn name to consistent naming 2023-08-01 12:34:31 +02:00
Urgau
87e8feaf50 Fix invalid slice coercion suggestion reported in turbofish 2023-08-01 12:34:31 +02:00
ouz-a
206bfc47ea Cover statements for stable_mir 2023-08-01 12:57:13 +03:00
bors
c435af0d5c Auto merge of #114318 - matthiaskrgr:rollup-c7gcw18, r=matthiaskrgr
Rollup of 7 pull requests

Successful merges:

 - #111081 (impl SliceIndex<str> for (Bound<usize>, Bound<usize>))
 - #113394 (style-guide: Document style editions, start 2024 style edition)
 - #113588 (bootstrap: use git merge-base for LLVM CI download logic)
 - #113743 (Directly link more target docs)
 - #114262 (Improve the rust style guide doc)
 - #114309 (Update books)
 - #114313 ([rustc_data_structures] Simplify SortedMap::insert.)

r? `@ghost`
`@rustbot` modify labels: rollup
2023-08-01 09:40:59 +00:00
Urgau
ad0729e9d2 Improve diagnostic for wrong borrow on binary operations 2023-08-01 10:08:17 +02:00
Oli Scherer
3eb5733ed4 Always use parking_lot's RwLock, even without parallel compiler 2023-08-01 06:55:12 +00:00