Skip to content

Handle race when coloring nodes concurrently as both green and red#151509

Merged
rust-bors[bot] merged 1 commit intorust-lang:mainfrom
Zoxc:gen-color-race
Feb 10, 2026
Merged

Handle race when coloring nodes concurrently as both green and red#151509
rust-bors[bot] merged 1 commit intorust-lang:mainfrom
Zoxc:gen-color-race

Conversation

@Zoxc
Copy link
Contributor

@Zoxc Zoxc commented Jan 22, 2026

This fixes a race where a duplicate dep node gets written to the dep graph if a node was marked as green and promoted during execution, then marked as red after execution.

This can occur when a no_hash query A depends on a query B which cannot be forced so it was not colored when starting execution of query A. During the execution of query A it will execute query B and color it green. Before A finishes another thread tries to mark A green, this time succeeding as B is now green, and A gets promoted and written to metadata. Execution of A then finishes and because it's no_hash we assume the result changed and thus we color the node again, now as red and write it to metadata again. This doesn't happen with non-no_hash queries as they will be green if all their dependencies are green.

This changes the code coloring nodes red to also use compare_exchange to deal with this race ensuring that the coloring of nodes only happens once.

Fixes #150018
Fixes #142778
Fixes #141540

@rustbot rustbot added A-query-system Area: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html) S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Jan 22, 2026
@Zoxc
Copy link
Contributor Author

Zoxc commented Jan 22, 2026

@bors try @rust-timer queue

@rust-timer

This comment has been minimized.

@rust-bors

This comment has been minimized.

rust-bors bot pushed a commit that referenced this pull request Jan 22, 2026
Handle race when coloring nodes concurrently as both green and red
@rustbot rustbot added the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Jan 22, 2026
@Zoxc
Copy link
Contributor Author

Zoxc commented Jan 22, 2026

Looks fairly neutral locally.

BenchmarkBeforeBeforeAfterBeforeBeforeAfterBeforeBeforeAfter
TimeTime%Time%Physical MemoryPhysical Memory%Physical Memory%Committed MemoryCommitted Memory%Committed Memory%
🟣 clap:check:unchanged0.2478s0.2474s -0.15%0.2474s -0.17%99.35 MiB99.41 MiB 0.06%99.52 MiB 0.17%165.65 MiB165.71 MiB 0.03%165.74 MiB 0.05%
🟣 hyper:check:unchanged0.1119s0.1133s💔 1.30%0.1127s 0.76%63.07 MiB63.09 MiB 0.02%63.25 MiB 0.29%121.50 MiB121.51 MiB 0.01%121.59 MiB 0.08%
🟣 regex:check:unchanged0.2081s0.2058s💚 -1.12%0.2074s -0.35%81.38 MiB81.35 MiB -0.04%81.55 MiB 0.20%143.39 MiB143.39 MiB -0.01%143.55 MiB 0.11%
🟣 syn:check:unchanged0.4318s0.4327s 0.21%0.4308s -0.23%120.88 MiB121.01 MiB 0.10%121.46 MiB 0.48%187.29 MiB187.42 MiB 0.07%187.85 MiB 0.30%
Total0.9996s0.9992s -0.03%0.9983s -0.13%364.69 MiB364.85 MiB 0.05%365.78 MiB 0.30%617.83 MiB618.02 MiB 0.03%618.73 MiB 0.15%
Summary1.0000s1.0006s 0.06%1.0000s 0.00%1 byte1.00 bytes 0.04%1.00 bytes 0.29%1 byte1.00 bytes 0.03%1.00 bytes 0.13%

@cjgillot
Copy link
Contributor

cjgillot commented Jan 22, 2026

Here's what's bugging me. I'm under the impression that this PR allows a node to change colour from green to red. It should not. A node has a single colour and should never change.

So my recommendation would be:

  • fix the race by using proper atomics, yes;
  • change the logic around no_hash nodes to mark them green iff !eval_always && all parents are green.

@rust-bors
Copy link
Contributor

rust-bors bot commented Jan 23, 2026

☀️ Try build successful (CI)
Build commit: f9b6979 (f9b6979e5b37291f050e6355d9997a871b20de55, parent: 39052daf937d46373ac29778e1b8853c52c0cc25)

@rust-timer

This comment has been minimized.

@zetanumbers
Copy link
Contributor

Here's what's bugging me. I'm under the impression that this PR allows a node to change colour from green to red. It should not. A node has a single colour and should never change.

So my recommendation would be:

  • fix the race by using proper atomics, yes;

  • change the logic around no_hash nodes to mark them green iff !eval_always && all parents are green.

Wouldn't #150156 already address these concerns?

@rust-timer
Copy link
Collaborator

Finished benchmarking commit (f9b6979): comparison URL.

Overall result: ✅ improvements - no action needed

Benchmarking this pull request means it may be perf-sensitive – we'll automatically label it not fit for rolling up. You can override this, but we strongly advise not to, due to possible changes in compiler perf.

@bors rollup=never
@rustbot label: -S-waiting-on-perf -perf-regression

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-0.2% [-0.2%, -0.2%] 3
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) -0.2% [-0.2%, -0.2%] 3

Max RSS (memory usage)

Results (primary -1.9%, secondary -5.7%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-1.9% [-1.9%, -1.9%] 1
Improvements ✅
(secondary)
-5.7% [-5.7%, -5.7%] 1
All ❌✅ (primary) -1.9% [-1.9%, -1.9%] 1

Cycles

This benchmark run did not return any relevant results for this metric.

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 473.794s -> 471.369s (-0.51%)
Artifact size: 383.23 MiB -> 383.22 MiB (-0.00%)

@rustbot rustbot removed the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Jan 23, 2026
@Zoxc
Copy link
Contributor Author

Zoxc commented Jan 23, 2026

I'm under the impression that this PR allows a node to change colour from green to red. It should not.

No, that's the current state of rustc. This PR prevents that.

@zetanumbers
Copy link
Contributor

I honestly feel like @Zoxc often deals with his own meaning of compiler's code and not the code's actual behavior. It comes up when I try to convince him about anything.

@teor2345
Copy link
Contributor

Would demonstrating what the code does help resolve this discussion?
(I understand it can be hard to find a reliable test/reproducer in concurrent code with race conditions.)

@Zoxc Zoxc marked this pull request as ready for review January 28, 2026 19:12
@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Jan 28, 2026
@Zoxc
Copy link
Contributor Author

Zoxc commented Jan 28, 2026

As discussed in Solving big #141540 issue and hunt for bad metadata files, I think the trait selection cache can leave nodes uncolored after execution. This means that we're not able to tell if dependencies are all green in all cases and #150156 would be insufficient to fix the race.

@rust-bors

This comment has been minimized.

@rustbot

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@rustbot
Copy link
Collaborator

rustbot commented Feb 3, 2026

This PR was rebased onto a different main commit. Here's a range-diff highlighting what actually changed.

Rebasing is a normal part of keeping PRs up to date, so no action is needed—this note is just to help reviewers.

@Zoxc
Copy link
Contributor Author

Zoxc commented Feb 3, 2026

r? @Zalathar

@Zoxc
Copy link
Contributor Author

Zoxc commented Feb 9, 2026

r? @petrochenkov

@rustbot rustbot assigned petrochenkov and unassigned Zalathar Feb 9, 2026
@petrochenkov
Copy link
Contributor

@bors r=zetanumbers,petrochenkov

@rust-bors
Copy link
Contributor

rust-bors bot commented Feb 9, 2026

📌 Commit d8d4d40 has been approved by zetanumbers,petrochenkov

It is now in the queue for this repository.

⚠️ The following reviewer(s) could not be found: zetanumbers

@rust-bors rust-bors bot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Feb 9, 2026
@rust-bors

This comment has been minimized.

rust-bors bot pushed a commit that referenced this pull request Feb 10, 2026
Handle race when coloring nodes concurrently as both green and red

This fixes a race where a duplicate dep node gets written to the dep graph if a node was marked as green and promoted during execution, then marked as red after execution.

This can occur when a `no_hash` query A depends on a query B which cannot be forced so it was not colored when starting execution of query A. During the execution of query A it will execute query B and color it green. Before A finishes another thread tries to mark A green, this time succeeding as B is now green, and A gets promoted and written to metadata. Execution of A then finishes and because it's `no_hash` we assume the result changed and thus we color the node again, now as red and write it to metadata again. This doesn't happen with non-`no_hash` queries as they will be green if all their dependencies are green.

This changes the code coloring nodes red to also use `compare_exchange` to deal with this race ensuring that the coloring of nodes only happens once.

Fixes #150018
Fixes #142778
Fixes #141540
@rust-log-analyzer
Copy link
Collaborator

The job i686-gnu-nopt-1 failed! Check out the build log: (web) (plain enhanced) (plain)

Click to see the possible cause of the failure (guessed by this bot)
##[group]Runner Image Provisioner
Hosted Compute Agent
Version: 20260123.484
Commit: 6bd6555ca37d84114959e1c76d2c01448ff61c5d
Build Date: 2026-01-23T19:41:17Z
Worker ID: {81c6386b-4333-4589-be09-880e37e69955}
Azure Region: westcentralus
##[endgroup]
##[group]Operating System
Ubuntu
24.04.3
LTS
---
REPOSITORY                                   TAG       IMAGE ID       CREATED       SIZE
ghcr.io/dependabot/dependabot-updater-core   latest    b72a662c47e3   10 days ago   790MB
=> Removing docker images...
Deleted Images:
untagged: ghcr.io/dependabot/dependabot-updater-core:latest
untagged: ghcr.io/dependabot/dependabot-updater-core@sha256:57ef9cc45f72cc4258ee1baa8243bc3cd55c0a0e570b6768c37346247be35f0d
deleted: sha256:b72a662c47e31df2e7bf59368b2b83be239f02a1baa721393717711a1a719df9
deleted: sha256:3e13ccd80f19769f39008cfc6549938e1ea4905f47b028c1df2dd6085191386c
deleted: sha256:842807995a512b2c5a9b241a3aecdbe79af6b0642d96fa5460cfcf0c9d8be295
deleted: sha256:0f9074b9f46f4570eb7cb4b65fcb3c3d909f9b1d14ca66b30508117b6deda303
deleted: sha256:2ca99cb9251d19157c56b5d91c8961bb4b35196a5ca9b4ffdccbf24abbfe2a5f
---
[5/3894] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/AArch64AttributeParser.cpp.o
[6/3894] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Allocator.cpp.o
[7/3894] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/ARMBuildAttributes.cpp.o
[8/3894] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/ARMAttributeParser.cpp.o
[9/3894] Building CXX object lib/Support/LSP/CMakeFiles/LLVMSupportLSP.dir/Protocol.cpp.o
[10/3894] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/Base64.cpp.o
[11/3894] Building CXX object lib/Support/LSP/CMakeFiles/LLVMSupportLSP.dir/Logging.cpp.o
[12/3894] Building CXX object lib/Support/LSP/CMakeFiles/LLVMSupportLSP.dir/Transport.cpp.o
[13/3894] Building CXX object lib/Demangle/CMakeFiles/LLVMDemangle.dir/RustDemangle.cpp.o
[14/3894] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/AllocToken.cpp.o
[15/3894] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/ARMWinEH.cpp.o
[16/3894] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/AArch64BuildAttributes.cpp.o
[17/3894] Building CXX object lib/Support/CMakeFiles/LLVMSupport.dir/AutoConvert.cpp.o
---
[223/3894] Building TargetLibraryInfo.inc...
[224/3894] Building CXX object lib/CAS/CMakeFiles/LLVMCAS.dir/ActionCaches.cpp.o
[225/3894] Building GenVT.inc...
[226/3894] Building Attributes.inc...
[227/3894] Building CXX object lib/CAS/CMakeFiles/LLVMCAS.dir/BuiltinCAS.cpp.o
[228/3894] Building CXX object lib/CAS/CMakeFiles/LLVMCAS.dir/BuiltinUnifiedCASDatabases.cpp.o
[229/3894] Building IntrinsicsAArch64.h...
[230/3894] Building IntrinsicEnums.inc...
[231/3894] Building IntrinsicsBPF.h...
[232/3894] Building IntrinsicImpl.inc...
[233/3894] Building IntrinsicsAMDGPU.h...
---
[423/3894] Building CXX object lib/InterfaceStub/CMakeFiles/LLVMInterfaceStub.dir/IFSStub.cpp.o
[424/3894] Building CXX object lib/InterfaceStub/CMakeFiles/LLVMInterfaceStub.dir/IFSHandler.cpp.o
[425/3894] Building CXX object lib/IRPrinter/CMakeFiles/LLVMIRPrinter.dir/IRPrintingPasses.cpp.o
[426/3894] Building CXX object lib/IRReader/CMakeFiles/LLVMIRReader.dir/IRReader.cpp.o
[427/3894] Building CXX object lib/CAS/CMakeFiles/LLVMCAS.dir/OnDiskCAS.cpp.o
[428/3894] Building CXX object lib/CAS/CMakeFiles/LLVMCAS.dir/OnDiskCommon.cpp.o
[429/3894] Building CXX object lib/CAS/CMakeFiles/LLVMCAS.dir/OnDiskDataAllocator.cpp.o
[430/3894] Building CXX object lib/CAS/CMakeFiles/LLVMCAS.dir/OnDiskGraphDB.cpp.o
[431/3894] Building CXX object lib/CAS/CMakeFiles/LLVMCAS.dir/OnDiskKeyValueDB.cpp.o
[432/3894] Building CXX object lib/CAS/CMakeFiles/LLVMCAS.dir/OnDiskTrieRawHashMap.cpp.o
[433/3894] Building CXX object lib/CAS/CMakeFiles/LLVMCAS.dir/UnifiedOnDiskCache.cpp.o
[434/3894] Linking CXX static library lib/libLLVMCAS.a
[435/3894] Building CXX object lib/CGData/CMakeFiles/LLVMCGData.dir/CodeGenData.cpp.o
[436/3894] Building CXX object lib/CGData/CMakeFiles/LLVMCGData.dir/CodeGenDataReader.cpp.o
[437/3894] Building CXX object lib/CGData/CMakeFiles/LLVMCGData.dir/CodeGenDataWriter.cpp.o
[438/3894] Building CXX object lib/CGData/CMakeFiles/LLVMCGData.dir/OutlinedHashTree.cpp.o
[439/3894] Building CXX object lib/CGData/CMakeFiles/LLVMCGData.dir/OutlinedHashTreeRecord.cpp.o
---
[1281/3894] Building CXX object lib/Analysis/CMakeFiles/LLVMAnalysis.dir/ValueLattice.cpp.o
[1282/3894] Building CXX object lib/Analysis/CMakeFiles/LLVMAnalysis.dir/ValueTracking.cpp.o
[1283/3894] Building CXX object lib/Analysis/CMakeFiles/LLVMAnalysis.dir/VectorUtils.cpp.o
[1284/3894] Building CXX object lib/MC/CMakeFiles/LLVMMC.dir/ConstantPools.cpp.o
[1285/3894] Building CXX object lib/DTLTO/CMakeFiles/LLVMDTLTO.dir/DTLTO.cpp.o
[1286/3894] Building CXX object lib/LTO/CMakeFiles/LLVMLTO.dir/LTO.cpp.o
[1287/3894] Building CXX object lib/LTO/CMakeFiles/LLVMLTO.dir/LTOModule.cpp.o
[1288/3894] Building CXX object lib/LTO/CMakeFiles/LLVMLTO.dir/LTOCodeGenerator.cpp.o
[1289/3894] Building CXX object lib/LTO/CMakeFiles/LLVMLTO.dir/LTOBackend.cpp.o
[1290/3894] Building CXX object lib/MC/CMakeFiles/LLVMMC.dir/DXContainerPSVInfo.cpp.o
---
[2132/3894] Building CXX object lib/Target/AMDGPU/CMakeFiles/LLVMAMDGPUCodeGen.dir/AMDGPUMacroFusion.cpp.o
[2133/3894] Building CXX object lib/Target/AMDGPU/CMakeFiles/LLVMAMDGPUCodeGen.dir/AMDGPUMCInstLower.cpp.o
[2134/3894] Building CXX object lib/Target/AMDGPU/CMakeFiles/LLVMAMDGPUCodeGen.dir/AMDGPUIGroupLP.cpp.o
[2135/3894] Building CXX object lib/Target/AMDGPU/CMakeFiles/LLVMAMDGPUCodeGen.dir/AMDGPUMCResourceInfo.cpp.o
[2136/3894] Building CXX object lib/Target/AMDGPU/CMakeFiles/LLVMAMDGPUCodeGen.dir/AMDGPULowerVGPREncoding.cpp.o
[2137/3894] Building CXX object lib/Target/AMDGPU/CMakeFiles/LLVMAMDGPUCodeGen.dir/AMDGPUMarkLastScratchLoad.cpp.o
[2138/3894] Building CXX object lib/Target/AMDGPU/CMakeFiles/LLVMAMDGPUCodeGen.dir/AMDGPUMIRFormatter.cpp.o
[2139/3894] Building CXX object lib/Target/AMDGPU/CMakeFiles/LLVMAMDGPUCodeGen.dir/AMDGPUPerfHintAnalysis.cpp.o
[2140/3894] Building CXX object lib/Target/AMDGPU/CMakeFiles/LLVMAMDGPUCodeGen.dir/AMDGPUPostLegalizerCombiner.cpp.o
[2141/3894] Building CXX object lib/Target/AMDGPU/CMakeFiles/LLVMAMDGPUCodeGen.dir/AMDGPUPrintfRuntimeBinding.cpp.o
---
[2803/3894] Building CXX object lib/Target/RISCV/CMakeFiles/LLVMRISCVCodeGen.dir/RISCVVectorMaskDAGMutation.cpp.o
[2804/3894] Building CXX object lib/Target/RISCV/CMakeFiles/LLVMRISCVCodeGen.dir/RISCVVectorPeephole.cpp.o
[2805/3894] Building CXX object lib/Target/RISCV/CMakeFiles/LLVMRISCVCodeGen.dir/RISCVVLOptimizer.cpp.o
[2806/3894] Building CXX object lib/Target/RISCV/CMakeFiles/LLVMRISCVCodeGen.dir/RISCVVMV0Elimination.cpp.o
[2807/3894] Building CXX object lib/Target/RISCV/CMakeFiles/LLVMRISCVCodeGen.dir/RISCVVSETVLIInfoAnalysis.cpp.o
[2808/3894] Building CXX object lib/Target/RISCV/CMakeFiles/LLVMRISCVCodeGen.dir/RISCVZacasABIFix.cpp.o
[2809/3894] Building CXX object lib/Target/RISCV/CMakeFiles/LLVMRISCVCodeGen.dir/RISCVZilsdOptimizer.cpp.o
[2810/3894] Building CXX object lib/Target/RISCV/CMakeFiles/LLVMRISCVCodeGen.dir/GISel/RISCVCallLowering.cpp.o
[2811/3894] Building CXX object lib/Target/RISCV/CMakeFiles/LLVMRISCVCodeGen.dir/GISel/RISCVLegalizerInfo.cpp.o
[2812/3894] Building CXX object lib/Target/RISCV/CMakeFiles/LLVMRISCVCodeGen.dir/GISel/RISCVPostLegalizerCombiner.cpp.o
[2813/3894] Building CXX object lib/Target/RISCV/CMakeFiles/LLVMRISCVCodeGen.dir/GISel/RISCVO0PreLegalizerCombiner.cpp.o
[2814/3894] Building CXX object lib/Target/RISCV/CMakeFiles/LLVMRISCVCodeGen.dir/GISel/RISCVPreLegalizerCombiner.cpp.o
---
[3600/3894] Linking CXX executable bin/llvm-ifs
[3601/3894] Linking CXX executable bin/llvm-extract
[3602/3894] Building CXX object tools/llvm-jitlink/CMakeFiles/llvm-jitlink.dir/llvm-jitlink-elf.cpp.o
[3603/3894] Building CXX object tools/llvm-isel-fuzzer/CMakeFiles/llvm-isel-fuzzer.dir/DummyISelFuzzer.cpp.o
[3604/3894] Building CXX object tools/llvm-ir2vec/CMakeFiles/llvm-ir2vec.dir/llvm-ir2vec.cpp.o
[3605/3894] Building CXX object tools/llvm-isel-fuzzer/CMakeFiles/llvm-isel-fuzzer.dir/llvm-isel-fuzzer.cpp.o
[3606/3894] Building CXX object tools/llvm-jitlink/CMakeFiles/llvm-jitlink.dir/llvm-jitlink-coff.cpp.o
[3607/3894] Building CXX object tools/llvm-jitlink/CMakeFiles/llvm-jitlink.dir/llvm-jitlink-statistics.cpp.o
[3608/3894] Building CXX object tools/llvm-jitlink/CMakeFiles/llvm-jitlink.dir/llvm-jitlink.cpp.o
[3609/3894] Linking CXX executable bin/llvm-exegesis
---
[3788/3894] Building CXX object tools/llvm-reduce/CMakeFiles/llvm-reduce.dir/deltas/ReduceVirtualRegisters.cpp.o
[3789/3894] Building CXX object tools/llvm-reduce/CMakeFiles/llvm-reduce.dir/deltas/ReduceRegisterMasks.cpp.o
[3790/3894] Building CXX object tools/llvm-reduce/CMakeFiles/llvm-reduce.dir/deltas/ReduceRegisterUses.cpp.o
[3791/3894] Building CXX object tools/llvm-reduce/CMakeFiles/llvm-reduce.dir/deltas/ReduceRegisterDefs.cpp.o
[3792/3894] Building CXX object tools/llvm-reduce/CMakeFiles/llvm-reduce.dir/deltas/ReduceSinkDefsToUses.cpp.o
[3793/3894] Building CXX object tools/llvm-reduce/CMakeFiles/llvm-reduce.dir/deltas/ReduceTargetFeaturesAttr.cpp.o
[3794/3894] Building CXX object tools/llvm-reduce/CMakeFiles/llvm-reduce.dir/deltas/ReduceUsingSimplifyCFG.cpp.o
[3795/3894] Building CXX object tools/llvm-reduce/CMakeFiles/llvm-reduce.dir/deltas/SimplifyInstructions.cpp.o
[3796/3894] Building CXX object tools/llvm-reduce/CMakeFiles/llvm-reduce.dir/deltas/RunIRPasses.cpp.o
[3797/3894] Building CXX object tools/llvm-reduce/CMakeFiles/llvm-reduce.dir/deltas/StripDebugInfo.cpp.o
---
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/DWARFLinker/DWARFLinkerBase.h
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/DWARFLinker/DWARFFile.h
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/DWARFLinker/Parallel
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/DWARFLinker/Parallel/DWARFLinker.h
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/DTLTO
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/DTLTO/DTLTO.h
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/TargetParser
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/TargetParser/X86TargetParser.h
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/TargetParser/Triple.h
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/TargetParser/ARMTargetParserCommon.h
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/TargetParser/SubtargetFeature.h
---
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/FuzzMutate/RandomIRBuilder.h
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/Plugins
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/Plugins/PassPlugin.h
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/CAS
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/CAS/BuiltinCASContext.h
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/CAS/CASReference.h
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/CAS/OnDiskKeyValueDB.h
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/CAS/OnDiskGraphDB.h
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/CAS/FileOffset.h
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/CAS/OnDiskTrieRawHashMap.h
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/CAS/ObjectStore.h
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/CAS/UnifiedOnDiskCache.h
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/CAS/BuiltinUnifiedCASDatabases.h
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/CAS/BuiltinObjectHasher.h
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/CAS/CASID.h
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/CAS/ActionCache.h
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/CAS/MappedFileRegionArena.h
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/CAS/OnDiskDataAllocator.h
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/ToolDrivers
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/ToolDrivers/llvm-lib
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/ToolDrivers/llvm-lib/LibDriver.h
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/ToolDrivers/llvm-dlltool
-- Installing: /checkout/obj/build/i686-unknown-linux-gnu/llvm/include/llvm/ToolDrivers/llvm-dlltool/DlltoolDriver.h
---
test [ui] tests/ui/abi/abi-typo-unstable.rs#feature_disabled ... ok
test [ui] tests/ui/abi/abi-typo-unstable.rs#feature_enabled ... ok
test [ui] tests/ui/abi/abi-sysv64-register-usage.rs ... ok
test [ui] tests/ui/abi/abi-sysv64-arg-passing.rs ... ok
test [ui] tests/ui/abi/avr-sram.rs#disable_sram ... ok
test [ui] tests/ui/abi/avr-sram.rs#has_sram ... ok
test [ui] tests/ui/abi/anon-extern-mod.rs ... ok
test [ui] tests/ui/abi/arm-unadjusted-intrinsic.rs#aarch64 ... ok
test [ui] tests/ui/abi/avr-sram.rs#no_sram ... ok
test [ui] tests/ui/abi/arm-unadjusted-intrinsic.rs#arm ... ok
test [ui] tests/ui/abi/bad-custom.rs ... ok
test [ui] tests/ui/abi/c-stack-as-value.rs ... ok
test [ui] tests/ui/abi/c-zst.rs#aarch64-darwin ... ok
test [ui] tests/ui/abi/c-zst.rs#powerpc-linux ... ok
---
test [ui] tests/ui/asm/aarch64/type-f16.rs ... ignored, only executed when the architecture is aarch64
test [ui] tests/ui/array-slice-vec/vec-tail-matching.rs ... ok
test [ui] tests/ui/asm/aarch64/arm64ec-sve.rs ... ok
test [ui] tests/ui/array-slice-vec/vector-slice-matching-8498.rs ... ok
test [ui] tests/ui/asm/aarch64v8r.rs#r82 ... ok
test [ui] tests/ui/asm/aarch64v8r.rs#hf ... ok
test [ui] tests/ui/asm/aarch64v8r.rs#sf ... ok
test [ui] tests/ui/asm/arm-low-dreg.rs ... ok
test [ui] tests/ui/asm/binary_asm_labels.rs ... ignored, only executed when the architecture is x86_64
test [ui] tests/ui/asm/binary_asm_labels_allowed.rs ... ignored, only executed when the architecture is aarch64
test [ui] tests/ui/asm/bad-template.rs#aarch64 ... ok
test [ui] tests/ui/asm/cfg.rs#reva ... ignored, only executed when the architecture is x86_64
---
test [ui] tests/ui/const-generics/occurs-check/unused-substs-5.rs ... ok
test [ui] tests/ui/const-generics/ogca/basic-fail.rs ... ok
test [ui] tests/ui/const-generics/ogca/basic.rs ... ok
test [ui] tests/ui/const-generics/occurs-check/unused-substs-4.rs ... ok
test [ui] tests/ui/const-generics/ogca/rhs-but-not-root.rs ... ok
test [ui] tests/ui/const-generics/ogca/coherence-ambiguous.rs ... ok
test [ui] tests/ui/const-generics/outer-lifetime-in-const-generic-default.rs ... ok
test [ui] tests/ui/const-generics/opaque_types.rs ... ok
test [ui] tests/ui/const-generics/opaque_types2.rs ... ok
test [ui] tests/ui/const-generics/overlapping_impls.rs ... ok
test [ui] tests/ui/const-generics/params-in-ct-in-ty-param-lazy-norm.rs#full ... ok
---
test [ui] tests/ui/extern/issue-64655-extern-rust-must-allow-unwind.rs#fat2 ... ok
test [ui] tests/ui/extern/issue-64655-extern-rust-must-allow-unwind.rs#fat3 ... ok
test [ui] tests/ui/extern/issue-80074.rs ... ok
test [ui] tests/ui/extern/issue-95829.rs ... ok
test [ui] tests/ui/extern/lgamma-linkage.rs ... ok
test [ui] tests/ui/extern/no-mangle-associated-fn.rs ... ok
test [ui] tests/ui/extern/not-in-block.rs ... ok
test [ui] tests/ui/extern/unsized-extern-derefmove.rs ... ok
test [ui] tests/ui/extern/windows-tcb-trash-13259.rs ... ok
test [ui] tests/ui/feature-gates/allow-features-empty.rs ... ok
---
test [ui] tests/ui/feature-gates/feature-gate-macro-metavar-expr-concat.rs ... ok
test [ui] tests/ui/feature-gates/feature-gate-marker_trait_attr.rs ... ok
test [ui] tests/ui/feature-gates/feature-gate-may-dangle.rs ... ok
test [ui] tests/ui/feature-gates/feature-gate-min-generic-const-args.rs ... ok
test [ui] tests/ui/feature-gates/feature-gate-mgca-type-const-syntax.rs ... ok
test [ui] tests/ui/feature-gates/feature-gate-more-maybe-bounds.rs ... ok
test [ui] tests/ui/feature-gates/feature-gate-min_const_fn.rs ... ok
test [ui] tests/ui/feature-gates/feature-gate-movrs_target_feature.rs ... ignored, only executed when the architecture is x86_64
test [ui] tests/ui/feature-gates/feature-gate-more-qualified-paths.rs ... ok
test [ui] tests/ui/feature-gates/feature-gate-naked_functions_rustic_abi.rs ... ignored, only executed when the architecture is x86_64
---
test [ui] tests/ui/imports/ambiguous-8.rs ... ok
test [ui] tests/ui/imports/ambiguous-glob-vs-expanded-extern.rs ... ok
test [ui] tests/ui/imports/ambiguous-panic-glob-vs-multiouter.rs ... ok
test [ui] tests/ui/imports/ambiguous-panic-no-implicit-prelude.rs ... ok
test [ui] tests/ui/imports/ambiguous-panic-globvsglob.rs ... ok
test [ui] tests/ui/imports/ambiguous-panic-non-prelude-core-glob.rs ... ok
test [ui] tests/ui/imports/ambiguous-panic-non-prelude-std-glob.rs ... ok
test [ui] tests/ui/imports/ambiguous-panic-pick-core.rs ... ok
test [ui] tests/ui/imports/ambiguous-panic-pick-std.rs ... ok
test [ui] tests/ui/imports/ambiguous-panic-re-emit.rs ... ok
---

---- [ui] tests/ui/generics/issue-94923.rs stdout ----

error: test compilation failed although it shouldn't!
status: signal: 6 (SIGABRT) (core dumped)
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/i686-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/generics/issue-94923.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/i686-unknown-linux-gnu/stage2" "--target=i686-unknown-linux-gnu" "--check-cfg" "cfg(test,FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "-C" "prefer-dynamic" "-o" "/checkout/obj/build/i686-unknown-linux-gnu/test/ui/generics/issue-94923/a" "-A" "internal_features" "-A" "unused_parens" "-A" "unused_braces" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/i686-unknown-linux-gnu/native/rust-test-helpers" "-C" "opt-level=3"
stdout: none
--- stderr -------------------------------
rustc: /checkout/src/llvm-project/llvm/include/llvm/ADT/DenseMap.h:663: bool llvm::DenseMapBase<DerivedT, KeyT, ValueT, KeyInfoT, BucketT>::LookupBucketFor(const LookupKeyT&, BucketT*&) [with LookupKeyT = unsigned int; DerivedT = llvm::SmallDenseMap<unsigned int, unsigned int, 8, llvm::DenseMapInfo<unsigned int, void>, llvm::detail::DenseMapPair<unsigned int, unsigned int> >; KeyT = unsigned int; ValueT = unsigned int; KeyInfoT = llvm::DenseMapInfo<unsigned int, void>; BucketT = llvm::detail::DenseMapPair<unsigned int, unsigned int>]: Assertion `!KeyInfoT::isEqual(Val, EmptyKey) && !KeyInfoT::isEqual(Val, TombstoneKey) && "Empty/Tombstone value shouldn't be inserted into map!"' failed.
------------------------------------------

---- [ui] tests/ui/generics/issue-94923.rs stdout end ----

failures:

@rust-bors rust-bors bot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Feb 10, 2026
@rust-bors
Copy link
Contributor

rust-bors bot commented Feb 10, 2026

💔 Test for 0c09117 failed: CI. Failed job:

@petrochenkov
Copy link
Contributor

@bors retry

@rust-bors rust-bors bot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Feb 10, 2026
@rust-bors

This comment has been minimized.

@rust-bors rust-bors bot added merged-by-bors This PR was explicitly merged by bors. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Feb 10, 2026
@rust-bors
Copy link
Contributor

rust-bors bot commented Feb 10, 2026

☀️ Test successful - CI
Approved by: zetanumbers,petrochenkov
Duration: 4h 6m 19s
Pushing 9e79395 to main...

@rust-bors rust-bors bot merged commit 9e79395 into rust-lang:main Feb 10, 2026
12 checks passed
@rustbot rustbot added this to the 1.95.0 milestone Feb 10, 2026
@github-actions
Copy link
Contributor

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 d00ba92 (parent) -> 9e79395 (this PR)

Test differences

No test diffs found

Test dashboard

Run

cargo run --manifest-path src/ci/citool/Cargo.toml -- \
    test-dashboard 9e79395f92bff6a8f536430e42a4beae69f60ff8 --output-dir test-dashboard

And then open test-dashboard/index.html in your browser to see an overview of all executed tests.

Job duration changes

  1. dist-apple-various: 2h 27m -> 1h 38m (-32.9%)
  2. dist-x86_64-apple: 2h 52m -> 3h 40m (+27.3%)
  3. dist-aarch64-apple: 3h -> 2h 27m (-18.3%)
  4. aarch64-gnu-llvm-20-1: 57m 12s -> 1h 3m (+11.2%)
  5. test-various: 1h 54m -> 2h 5m (+9.6%)
  6. dist-aarch64-llvm-mingw: 1h 46m -> 1h 37m (-8.8%)
  7. dist-x86_64-freebsd: 1h 25m -> 1h 32m (+8.2%)
  8. aarch64-msvc-2: 1h 38m -> 1h 46m (+7.3%)
  9. dist-x86_64-llvm-mingw: 1h 58m -> 2h 5m (+6.6%)
  10. x86_64-mingw-1: 2h 47m -> 2h 56m (+5.3%)
How to interpret the job duration changes?

Job durations can vary a lot, based on the actual runner instance
that executed the job, system noise, invalidated caches, etc. The table above is provided
mostly for t-infra members, for simpler debugging of potential CI slow-downs.

@rust-timer
Copy link
Collaborator

Finished benchmarking commit (9e79395): comparison URL.

Overall result: ❌✅ regressions and improvements - no action needed

@rustbot label: -perf-regression

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
0.1% [0.0%, 0.1%] 3
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-0.1% [-0.2%, -0.0%] 4
All ❌✅ (primary) - - 0

Max RSS (memory usage)

Results (secondary -1.8%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
1.2% [1.2%, 1.2%] 1
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-4.7% [-4.7%, -4.7%] 1
All ❌✅ (primary) - - 0

Cycles

Results (secondary 1.7%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
10.2% [7.5%, 12.9%] 2
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-6.8% [-8.4%, -5.2%] 2
All ❌✅ (primary) - - 0

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 474.836s -> 476.965s (0.45%)
Artifact size: 398.02 MiB -> 398.02 MiB (0.00%)

@Zoxc Zoxc deleted the gen-color-race branch February 11, 2026 03:06
bgw added a commit to vercel/next.js that referenced this pull request Feb 18, 2026
Rust finally merged a fix to the "trying to encode a dep node twice" ICE we seem to most frequently run into, triggered by the rustc parallel frontend feature: rust-lang/rust#151509

- @mischnic  commented on the issue: rust-lang/rust#150018 (comment)
- @mischnic just updated our toolchain last week, but I'd like to get this fix in.

CI Job for build-and-release that covers all platforms: https://github.com/vercel/next.js/actions/runs/22156881743  
  
In the process of this upgrade, I found and reported rust-lang/rust#152735 upstream (fixed `nightly-2026-02-18`).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-query-system Area: The rustc query system (https://rustc-dev-guide.rust-lang.org/query.html) merged-by-bors This PR was explicitly merged by bors. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Projects

None yet

9 participants

Comments