[flang-commits] [flang] 2364736 - [flang] Fixed a crash in CheckReduce() (#156382)
via flang-commits
flang-commits at lists.llvm.org
Tue Sep 2 10:54:06 PDT 2025
Author: Eugene Epshteyn
Date: 2025-09-02T13:54:02-04:00
New Revision: 2364736d6b55a4c92a53e33ee2be2679d36d26b5
URL: https://github.com/llvm/llvm-project/commit/2364736d6b55a4c92a53e33ee2be2679d36d26b5
DIFF: https://github.com/llvm/llvm-project/commit/2364736d6b55a4c92a53e33ee2be2679d36d26b5.diff
LOG: [flang] Fixed a crash in CheckReduce() (#156382)
Added extra checks to fix the crash.
Fixes #156167
Added:
Modified:
flang/lib/Semantics/check-call.cpp
flang/test/Semantics/reduce01.f90
Removed:
################################################################################
diff --git a/flang/lib/Semantics/check-call.cpp b/flang/lib/Semantics/check-call.cpp
index a9cfe4d059982..f0078fda3600c 100644
--- a/flang/lib/Semantics/check-call.cpp
+++ b/flang/lib/Semantics/check-call.cpp
@@ -1985,8 +1985,9 @@ static void CheckReduce(
}
}
}
- const auto *result{
- procChars ? procChars->functionResult->GetTypeAndShape() : nullptr};
+ const auto *result{procChars && procChars->functionResult
+ ? procChars->functionResult->GetTypeAndShape()
+ : nullptr};
if (!procChars || !procChars->IsPure() ||
procChars->dummyArguments.size() != 2 || !procChars->functionResult) {
messages.Say(
diff --git a/flang/test/Semantics/reduce01.f90 b/flang/test/Semantics/reduce01.f90
index ad63a42d73cae..3384366db812f 100644
--- a/flang/test/Semantics/reduce01.f90
+++ b/flang/test/Semantics/reduce01.f90
@@ -71,6 +71,8 @@ pure function f11(x,y) result(res)
type(pdt(max(x%len, y%len))) :: res
res%ch = x%ch // y%ch
end function
+ subroutine bad_reduce
+ end subroutine
subroutine errors
real :: a(10,10), b, c(10)
@@ -115,6 +117,8 @@ subroutine errors
!ERROR: MASK= has no .TRUE. element, so IDENTITY= must be present
b = reduce(a, f, reshape([(j > 100, j=1, 100)], shape(a)))
b = reduce(a, f, reshape([(j == 50, j=1, 100)], shape(a))) ! ok
+ !ERROR: OPERATION= argument of REDUCE() must be a pure function of two data arguments
+ b = reduce(a, bad_reduce)
end subroutine
subroutine not_errors
type(pdt(10)) :: a(10), b
More information about the flang-commits
mailing list