Skip to content

Conversation

@luporl
Copy link
Contributor

@luporl luporl commented Dec 19, 2025

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

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 llvm#127425
@llvmbot llvmbot added flang Flang issues not falling into any other category flang:semantics labels Dec 19, 2025
@llvmbot
Copy link
Member

llvmbot commented Dec 19, 2025

@llvm/pr-subscribers-flang-semantics

Author: Leandro Lupori (luporl)

Changes

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 --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

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] Incorrect compilation message when the first argument of CRAY POINTER is undefined and used in any intrinsic function

2 participants