Skip to content

Conversation

klausler
Copy link
Contributor

@klausler klausler commented Apr 9, 2024

Constant folding had a CHECK on array subscript rank that should more gracefully handle a bad program with a subscript that is a matrix or higher rank.

Fixes #88112.

Constant folding had a CHECK on array subscript rank that should
more gracefully handle a bad program with a subscript that is
a matrix or higher rank.

Fixes llvm#88112.
@llvmbot
Copy link
Member

llvmbot commented Apr 9, 2024

@llvm/pr-subscribers-flang-semantics

Author: Peter Klausler (klausler)

Changes

Constant folding had a CHECK on array subscript rank that should more gracefully handle a bad program with a subscript that is a matrix or higher rank.

Fixes #88112.


Full diff: https://github.com/llvm/llvm-project/pull/88192.diff

1 Files Affected:

  • (modified) flang/lib/Evaluate/fold-implementation.h (+2-1)
diff --git a/flang/lib/Evaluate/fold-implementation.h b/flang/lib/Evaluate/fold-implementation.h
index 470dbe9e740997..543d415209271b 100644
--- a/flang/lib/Evaluate/fold-implementation.h
+++ b/flang/lib/Evaluate/fold-implementation.h
@@ -201,11 +201,12 @@ std::optional<Constant<T>> Folder<T>::ApplySubscripts(const Constant<T> &array,
   ConstantSubscripts resultShape;
   ConstantSubscripts ssLB;
   for (const auto &ss : subscripts) {
-    CHECK(ss.Rank() <= 1);
     if (ss.Rank() == 1) {
       resultShape.push_back(static_cast<ConstantSubscript>(ss.size()));
       elements *= ss.size();
       ssLB.push_back(ss.lbounds().front());
+    } else if (ss.Rank() > 1) {
+      return std::nullopt; // error recovery
     }
   }
   ConstantSubscripts ssAt(rank, 0), at(rank, 0), tmp(1, 0);

@klausler klausler merged commit 138524e into llvm:main Apr 22, 2024
@klausler klausler deleted the bug88112 branch April 22, 2024 22:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
flang:semantics flang Flang issues not falling into any other category
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Flang] fatal internal error: CHECK(ss.Rank() <= 1) failed at /root/llvm-project/flang/lib/Evaluate/fold-implementation.h(204)
3 participants