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