[flang-commits] [flang] 2c31bc7 - [flang][Semantics][OpenMP] Fix ICE for unknown reduction starting with . (#94398)
via flang-commits
flang-commits at lists.llvm.org
Wed Jun 5 03:26:38 PDT 2024
Author: Tom Eccles
Date: 2024-06-05T11:26:34+01:00
New Revision: 2c31bc7c0455e2167dcaef6b284cb0574406fc72
URL: https://github.com/llvm/llvm-project/commit/2c31bc7c0455e2167dcaef6b284cb0574406fc72
DIFF: https://github.com/llvm/llvm-project/commit/2c31bc7c0455e2167dcaef6b284cb0574406fc72.diff
LOG: [flang][Semantics][OpenMP] Fix ICE for unknown reduction starting with . (#94398)
In this case the union inside of the `parser::DefinedOperator` contains
a string name instead of the expected
`parser::DefinedOperator::IntrinsicOperator`. This led to a
`std::abort`.
This patch adapts the code so that if it contains a string name we emit
a semantic error.
Added:
flang/test/Semantics/OpenMP/reduction13.f90
Modified:
flang/lib/Semantics/check-omp-structure.cpp
Removed:
################################################################################
diff --git a/flang/lib/Semantics/check-omp-structure.cpp b/flang/lib/Semantics/check-omp-structure.cpp
index 5e3a5725c18d2..54ce45157537c 100644
--- a/flang/lib/Semantics/check-omp-structure.cpp
+++ b/flang/lib/Semantics/check-omp-structure.cpp
@@ -2321,9 +2321,15 @@ bool OmpStructureChecker::CheckReductionOperators(
common::visit(
common::visitors{
[&](const parser::DefinedOperator &dOpr) {
- const auto &intrinsicOp{
- std::get<parser::DefinedOperator::IntrinsicOperator>(dOpr.u)};
- ok = CheckIntrinsicOperator(intrinsicOp);
+ if (const auto *intrinsicOp{
+ std::get_if<parser::DefinedOperator::IntrinsicOperator>(
+ &dOpr.u)}) {
+ ok = CheckIntrinsicOperator(*intrinsicOp);
+ } else {
+ context_.Say(GetContext().clauseSource,
+ "Invalid reduction operator in REDUCTION clause."_err_en_US,
+ ContextDirectiveAsFortran());
+ }
},
[&](const parser::ProcedureDesignator &procD) {
const parser::Name *name{std::get_if<parser::Name>(&procD.u)};
diff --git a/flang/test/Semantics/OpenMP/reduction13.f90 b/flang/test/Semantics/OpenMP/reduction13.f90
new file mode 100644
index 0000000000000..edb153ce20ef6
--- /dev/null
+++ b/flang/test/Semantics/OpenMP/reduction13.f90
@@ -0,0 +1,10 @@
+! RUN: %python %S/../test_errors.py %s %flang_fc1 -fopenmp
+! OpenMP Version 4.5
+! 2.15.3.6 Reduction Clause
+program omp_reduction
+ integer :: k
+ ! misspelling. Should be "min"
+ !ERROR: Invalid reduction operator in REDUCTION clause.
+ !$omp parallel reduction(.min.:k)
+ !$omp end parallel
+end program omp_reduction
More information about the flang-commits
mailing list