Index: flang/include/flang/Semantics/semantics.h =================================================================== --- flang/include/flang/Semantics/semantics.h +++ flang/include/flang/Semantics/semantics.h @@ -145,6 +145,14 @@ return *this; } + bool anyDefinedIntrinsicOperator() const { + return anyDefinedIntrinsicOperator_; + } + SemanticsContext &set_anyDefinedIntrinsicOperator(bool yes = true) { + anyDefinedIntrinsicOperator_ = yes; + return *this; + } + const DeclTypeSpec &MakeNumericType(TypeCategory, int kind = 0); const DeclTypeSpec &MakeLogicalType(int kind = 0); @@ -270,6 +278,7 @@ const Scope *builtinsScope_{nullptr}; // module __Fortran_builtins std::list modFileParseTrees_; std::unique_ptr commonBlockMap_; + bool anyDefinedIntrinsicOperator_{false}; }; class Semantics { Index: flang/lib/Semantics/expression.cpp =================================================================== --- flang/lib/Semantics/expression.cpp +++ flang/lib/Semantics/expression.cpp @@ -3409,7 +3409,7 @@ if (expr.typedExpr) { return expr.typedExpr->v; } - if (!wasIterativelyAnalyzing) { + if (!wasIterativelyAnalyzing && !context_.anyDefinedIntrinsicOperator()) { iterativelyAnalyzingSubexpressions_ = true; result = IterativelyAnalyzeSubexpressions(expr); } Index: flang/lib/Semantics/resolve-names.cpp =================================================================== --- flang/lib/Semantics/resolve-names.cpp +++ flang/lib/Semantics/resolve-names.cpp @@ -3160,6 +3160,11 @@ if (auto *symbol{FindInScope(GenericSpecInfo{x}.symbolName())}) { SetGenericSymbol(*symbol); } + if (const auto *opr{std::get_if(&x.u)}; opr && + std::holds_alternative( + opr->u)) { + context().set_anyDefinedIntrinsicOperator(true); + } return false; }