From 04b13547e13e3410b911fdbb06cbb27b5051cfbf Mon Sep 17 00:00:00 2001 From: mlugg Date: Sat, 17 Aug 2024 08:31:33 +0100 Subject: [PATCH] Zcu: avoid unnecessary re-analysis in some dependency loop situations I'm like 80% sure this is correct --- src/Zcu.zig | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Zcu.zig b/src/Zcu.zig index f191f6a5f1..fc7978b15f 100644 --- a/src/Zcu.zig +++ b/src/Zcu.zig @@ -2429,7 +2429,11 @@ fn markTransitiveDependersPotentiallyOutdated(zcu: *Zcu, maybe_outdated: AnalUni pub fn findOutdatedToAnalyze(zcu: *Zcu) Allocator.Error!?AnalUnit { if (!zcu.comp.incremental) return null; - if (zcu.outdated.count() == 0 and zcu.potentially_outdated.count() == 0) { + if (zcu.outdated.count() == 0) { + // Any units in `potentially_outdated` must just be stuck in loops with one another: none of those + // units have had any outdated dependencies so far, and all of their remaining PO deps are triggered + // by other units in `potentially_outdated`. So, we can safety assume those units up-to-date. + zcu.potentially_outdated.clear(); log.debug("findOutdatedToAnalyze: no outdated depender", .{}); return null; }