[llvm-branch-commits] [flang] [flang][OpenMP] Improve diagnosing invalid operators in DECLARE_REDUCTION (PR #232353)
Krzysztof Parzyszek via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Oct 16 04:32:59 PDT 2026
================
@@ -2756,17 +2756,32 @@ void OmpStructureChecker::Enter(const parser::OmpDeclareMapperDirective &x) {
}
void OmpStructureChecker::Enter(const parser::OmpDeclareReductionDirective &x) {
+ llvm::omp::Version version{context_.langOptions().getOpenMPVersion()};
+ std::string dirName{
+ GetUpperName(llvm::omp::Directive::OMPD_declare_reduction, version)};
+
const parser::OmpArgumentList &args{x.v.Arguments()};
if (args.v.size() != 1) {
context_.Say(args.source,
- "DECLARE_REDUCTION directive should have a single argument"_err_en_US);
+ "%s directive should have a single argument"_err_en_US, dirName);
return;
}
const parser::OmpArgument &arg{args.v.front()};
- if (!std::holds_alternative<parser::OmpReductionSpecifier>(arg.u)) {
+ if (auto *spec{std::get_if<parser::OmpReductionSpecifier>(&arg.u)}) {
+ auto &ident{std::get<parser::OmpReductionIdentifier>(spec->t)};
+ using IntrinsicOperator = parser::DefinedOperator::IntrinsicOperator;
+ if (auto *intOp{parser::Unwrap<IntrinsicOperator>(ident)}) {
+ if (!CheckReductionIntrinsicOperator(*intOp, arg.source)) {
----------------
kparzysz wrote:
Hm, I thought it was checked unconditionally before as well. Ok, I'll make it conditional on version.
https://github.com/llvm/llvm-project/pull/232353
More information about the llvm-branch-commits
mailing list