[flang-commits] [flang] [flang] Check for errors when analyzing array constructors (PR #173092)

via flang-commits flang-commits at lists.llvm.org
Fri Dec 19 12:15:06 PST 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-flang-semantics

Author: Leandro Lupori (luporl)

<details>
<summary>Changes</summary>

Errors in array constructor values result in the array having
less elements than it should, which can cause other errors that
will confuse the user. Avoid this by not returning an expression
on errors.

Fixes #<!-- -->127425


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


2 Files Affected:

- (modified) flang/lib/Semantics/expression.cpp (+4) 
- (added) flang/test/Semantics/bug127425.f90 (+8) 


``````````diff
diff --git a/flang/lib/Semantics/expression.cpp b/flang/lib/Semantics/expression.cpp
index 6f5d0bf9eb242..0b67d1ae013a2 100644
--- a/flang/lib/Semantics/expression.cpp
+++ b/flang/lib/Semantics/expression.cpp
@@ -2076,11 +2076,15 @@ MaybeExpr ArrayConstructorContext::ToExpr() {
 
 MaybeExpr ExpressionAnalyzer::Analyze(const parser::ArrayConstructor &array) {
   const parser::AcSpec &acSpec{array.v};
+  bool hadAnyFatalError{context_.AnyFatalError()};
   ArrayConstructorContext acContext{
       *this, AnalyzeTypeSpec(acSpec.type, GetFoldingContext())};
   for (const parser::AcValue &value : acSpec.values) {
     acContext.Add(value);
   }
+  if (!hadAnyFatalError && context_.AnyFatalError()) {
+    return std::nullopt;
+  }
   return acContext.ToExpr();
 }
 
diff --git a/flang/test/Semantics/bug127425.f90 b/flang/test/Semantics/bug127425.f90
new file mode 100644
index 0000000000000..b01fabba70135
--- /dev/null
+++ b/flang/test/Semantics/bug127425.f90
@@ -0,0 +1,8 @@
+! RUN: %python %S/test_errors.py %s %flang_fc1
+
+program main
+  pointer (j1,ja)
+  pointer (j2,jb)
+  !ERROR: Values in array constructor must have the same declared type when no explicit type appears
+  if (any((/j1,j2,j3,j4,j5/)/=(/1,2,3,4,5/))) print *,'fail'
+end program main

``````````

</details>


https://github.com/llvm/llvm-project/pull/173092


More information about the flang-commits mailing list