From 0057c9145e5007f2ffc0e5623c48b07e0bbb41d7 Mon Sep 17 00:00:00 2001 From: Benjamin Maxwell Date: Thu, 1 May 2025 10:33:44 +0000 Subject: [PATCH] [StackSlotColoring] Fix a latent bug In InitializeSlots, if an interval with a non-zero StackID (A) is encountered we set All/UsedColors to a size of A + 1. If after this we process another interval with a non-zero StackID (B), where B < A, then we resize All/UsedColors to size < A + 1, and loose BitVector associated with A. --- llvm/lib/CodeGen/StackSlotColoring.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/llvm/lib/CodeGen/StackSlotColoring.cpp b/llvm/lib/CodeGen/StackSlotColoring.cpp index 6e1c9fd167174..2f81bea4e86ba 100644 --- a/llvm/lib/CodeGen/StackSlotColoring.cpp +++ b/llvm/lib/CodeGen/StackSlotColoring.cpp @@ -287,8 +287,10 @@ void StackSlotColoring::InitializeSlots() { auto StackID = MFI->getStackID(FI); if (StackID != 0) { - AllColors.resize(StackID + 1); - UsedColors.resize(StackID + 1); + if (StackID >= AllColors.size()) { + AllColors.resize(StackID + 1); + UsedColors.resize(StackID + 1); + } AllColors[StackID].resize(LastFI); UsedColors[StackID].resize(LastFI); }