From ba038a308021203d9d565b96c2eea5bd2f231ce2 Mon Sep 17 00:00:00 2001 From: Mike Kashkarov Date: Tue, 5 Apr 2022 17:09:43 +0300 Subject: [PATCH] [flang] Do not ICE on out-of-range data statement designator Print error message instead of assert trigger. Reviewed By: klausler Differential Revision: https://reviews.llvm.org/D123132 --- flang/lib/Evaluate/fold-designator.cpp | 4 +++- flang/test/Semantics/data06.f90 | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/flang/lib/Evaluate/fold-designator.cpp b/flang/lib/Evaluate/fold-designator.cpp index f3e1cf40cb8a..e00bb09a3c74 100644 --- a/flang/lib/Evaluate/fold-designator.cpp +++ b/flang/lib/Evaluate/fold-designator.cpp @@ -298,7 +298,9 @@ static std::optional OffsetToDataRef(FoldingContext &context, // Reconstructs a Designator from a symbol, an offset, and a size. std::optional> OffsetToDesignator(FoldingContext &context, const Symbol &baseSymbol, ConstantSubscript offset, std::size_t size) { - CHECK(offset >= 0); + if (offset < 0) { + return std::nullopt; + } if (std::optional dataRef{ OffsetToDataRef(context, NamedEntity{baseSymbol}, offset, size)}) { const Symbol &symbol{dataRef->GetLastSymbol()}; diff --git a/flang/test/Semantics/data06.f90 b/flang/test/Semantics/data06.f90 index bf32fd8f3404..08cdd147a084 100644 --- a/flang/test/Semantics/data06.f90 +++ b/flang/test/Semantics/data06.f90 @@ -28,6 +28,9 @@ subroutine s1 integer :: a4(3) !ERROR: DATA statement designator 'a4(5_8)' is out of range data (a4(j),j=1,5,2) /3*222/ + integer :: a5(3) + !ERROR: DATA statement designator 'a5(-2_8)' is out of range + data a5(-2) / 1 / interface real function rfunc(x) real, intent(in) :: x