Rollup of 21 pull requests - #160102
Conversation
This matches rustc and should improve performance for the published versions of rustdoc. We shouldn't be including all our debug! calls in builds for users.
The existing API is preserved as `parse_limited_sym` as a simple helper. Similarly, `parse_limited_should_emit` is preserved as `parse_limited_sym_should_emit`. I've noted that all users targets crate, so the `target_node_id` and `target` parameters are removed from it.
It is also removed.
This splits the functionality to two parts per RFC. The `#![register_tool]` attribute registers the tool in both ways. Semantics remain unchanged and will be adjusted in later commit.
Under the RFC, it's not an error to register tool multiple times, but it is an error to register "rustc" tool.
Coercing the fn item `bar` to a fn pointer while `Foo::value` holds the
associated-type projection `<<T as Func>::Ret as Id>::Assoc` used to ICE
during normalization ("maybe try to call `try_normalize_erasing_regions`
instead"). It now reports the ordinary `u32: Id` trait-bound error instead
of crashing.
Lots of names weren't changed to account for the introduction of the `Clause` type as a specialized form of `Predicate`, presumably because it was tedious. This commit converts as many of them as I could find. It's mostly very tedious renamings of types, functions, variables, and queries. The more interesting ones are a couple of files (`predicates_of.rs`, `impossible_predicates.rs`) and a MIR pass (`ImpossiblePredicates`).
The carets should ideally point to the path, not the entire attribute, but that's hard to achieve with the current code structure.
The carets already point to just the attribute path, which is what we want.
…ator" This reverts commit 9e9467a.
…-uninit constants" This reverts commit ed9de1e.
MIR GVN propagates MaybeUninit::uninit() as `const <uninit>` in aggregate constructions and codegen emits a memcpy from an `[N x i8] undef` global for each such field, which LLVM materializes as zero-initialization. We extract the existing `all_bytes_uninit` skip already present for `Rvalue::Use` and `Rvalue::Repeat` to a separate helper function, and use it in the `Rvalue::Aggregate` field loop.
This comment has been minimized.
This comment has been minimized.
Rollup of 21 pull requests try-job: dist-various-1 try-job: test-various try-job: x86_64-gnu-aux try-job: x86_64-gnu-llvm-21-3 try-job: x86_64-msvc-1 try-job: aarch64-apple try-job: x86_64-mingw-1 try-job: i686-msvc-*
This comment has been minimized.
This comment has been minimized.
What is this?This is an experimental post-merge analysis report that shows differences in test outcomes between the merged PR and its parent PR.Comparing e19d321 (parent) -> 26ae60a (this PR) Test differencesShow 241 test diffsStage 1
Stage 2
Additionally, 214 doctest diffs were found. These are ignored, as they are noisy. Job group index
Test dashboardRun cargo run --manifest-path src/ci/citool/Cargo.toml -- \
test-dashboard 26ae60a9eeb20b4935be49d7a931a650fa1d2923 --output-dir test-dashboardAnd then open Job duration changes
How to interpret the job duration changes?Job durations can vary a lot, based on the actual runner instance |
|
📌 Perf builds for each rolled up PR:
previous master: e19d321c06 In the case of a perf regression, run the following command for each PR you suspect might be the cause: |
|
Finished benchmarking commit (26ae60a): comparison URL. Overall result: ❌✅ regressions and improvements - please read:Our benchmarks found a performance regression caused by this PR. Next Steps:
@rustbot label: +perf-regression Instruction countOur most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.
Max RSS (memory usage)Results (primary 2.4%, secondary 0.3%)A less reliable metric. May be of interest, but not used to determine the overall result above.
CyclesResults (primary 6.0%, secondary 4.1%)A less reliable metric. May be of interest, but not used to determine the overall result above.
Binary sizeThis perf run didn't have relevant results for this metric. Bootstrap: 490.165s -> 489.651s (-0.10%) |
Engine moves to 0.3.1 — the first bump that is NOT additive. Every release before it could say "no rule that already existed changed what it matches"; this one cannot. Verdicts move in both directions. The audit was verified before it was acted on. Of 24 findings, most held, three did not reproduce, and one described the wrong mechanism — a distinction that mattered, because "evidence is not masked" would have been fixed in the wrong place (it IS masked; the masker keyed off quote characters). Two defects the audit missed were found by asking what the symmetric case of its findings was. Secret disclosure Redaction keyed off quoting, which is a property of source syntax and not of whether a value is a credential. An AWS key in a .env, a YAML value, or a WiFi password survived into `snippet` — the field the SARIF adapter emits, which security-scan.yml and the README both document uploading to GitHub code scanning. A scan published the key it had just found. Length was the wrong discriminator too: `Tsu9any0!` is nine characters and a real password. Silent clean A diff scan reported zero findings and exit 0 when it had read nothing: paths from git are repo-root-relative and were joined onto the scan target. Worse, and reachable from CI, a user's `diff.noprefix` made every header unparseable — 8 findings became 0 with no warning. git is now invoked with the knobs pinned rather than the parser taught every variant. The Chrome PR scan covered 43% of a large PR and said nothing: GitHub collapses big diffs behind "Load diff" and scrolling does not help. Measured in a browser on rust-lang/rust#160102 — 284 changed files, 121 rendered. Mixed-language pages lost one language's sinks entirely, because every block was concatenated and scanned under one language. A decoy could take a real finding's place Blanking a comment lets a canonical match span it, so a raw match inside that comment overlapped and won the merge. The executed assignment vanished and the comment was reported wearing its position — and suppressing that apparent false positive silenced the file. A raw match may now veto a canonical one only when it sits on text that survived normalisation. Claims the tool could not support `match-limit` asserted further matches "exist" after stopping without looking; the lockfile veto asserted a package "EXISTS" when it had read a file, not a registry. Both now say what was observed. The veto is also recorded on the response, so JSON and SARIF can tell "clean" from "vetoed". Not fixed, on purpose The C line-splicing FALSE NEGATIVE stays open and is now a stated limitation with a canary test: closing it needs a face whose offsets no longer match the source, and every position VibeGuard reports is identity-mapped by construction. Evaluation harnesses E6 divided findings by a KLOC it did not measure; sast-baseline compared locations by basename and called files the baseline never opened "missed by the baseline"; both McNemar tests reported a p-value on pairs that are repeated transforms of 19 findings. Numerators and denominators now come from one manifest, and the p-values carry the cluster structure that invalidates them. samples/safe 0 and samples/vulnerable 51 throughout — the corrections are targeted, not broad. Tests 1,278 -> 1,401. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Successful merges:
Ty::new_fn_defcalls withtype_ofqueries directly #159665 (Replace mostTy::new_fn_defcalls withtype_ofqueries directly)run_passes_inner#160057 (refactor(mir-transform): Calculate optimization status insiderun_passes_inner)try_normalize_erasing_regionsinstead #132767)browser-ui-testversion to0.25.0#160030 (Updatebrowser-ui-testversion to0.25.0)r? @ghost
Create a similar rollup