Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 15 Apr 2024 16:30:56 GMT
From:      Dimitry Andric <dim@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 514c98ba14a0 - main - Merge commit 37b7207651b4 from llvm-project (by zhongyunde@huawei.com):
Message-ID:  <202404151630.43FGUumD015028@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by dim:

URL: https://cgit.FreeBSD.org/src/commit/?id=514c98ba14a0f590891844d1a6bec0ac4de54489

commit 514c98ba14a0f590891844d1a6bec0ac4de54489
Author:     Dimitry Andric <dim@FreeBSD.org>
AuthorDate: 2024-04-15 16:24:39 +0000
Commit:     Dimitry Andric <dim@FreeBSD.org>
CommitDate: 2024-04-15 16:30:29 +0000

    Merge commit 37b7207651b4 from llvm-project (by zhongyunde@huawei.com):
    
      [SimplifyCFG] Fix crash when there is unreachable large index (#88616)
    
      The large case index out of scope is dead code, but it is still be
      created for TableContents in SwitchLookupTable::SwitchLookupTable,
      so make sure the table size after growing should not get smaller.
    
      Fix https://github.com/llvm/llvm-project/issues/88607
    
    This should fix "Assertion failed: (idx < size()), function operator[]"
    when building the science/dynare port.
    
    PR:             276104, 278320
    Reported by:    yuri
    MFC after:      1 month
---
 contrib/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/contrib/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/contrib/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
index 13eae549b2ce..f95dae1842fe 100644
--- a/contrib/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
+++ b/contrib/llvm-project/llvm/lib/Transforms/Utils/SimplifyCFG.cpp
@@ -6710,9 +6710,11 @@ static bool SwitchToLookupTable(SwitchInst *SI, IRBuilder<> &Builder,
           return SwitchLookupTable::WouldFitInRegister(
               DL, UpperBound, KV.second /* ResultType */);
         })) {
+      // There may be some case index larger than the UpperBound (unreachable
+      // case), so make sure the table size does not get smaller.
+      TableSize = std::max(UpperBound, TableSize);
       // The default branch is unreachable after we enlarge the lookup table.
       // Adjust DefaultIsReachable to reuse code path.
-      TableSize = UpperBound;
       DefaultIsReachable = false;
     }
   }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202404151630.43FGUumD015028>