[flang-commits] [flang] [flang] More information on generic resolution failures (PR #164738)
via flang-commits
flang-commits at lists.llvm.org
Fri Oct 24 06:28:23 PDT 2025
github-actions[bot] wrote:
<!--LLVM CODE FORMAT COMMENT: {clang-format}-->
:warning: C/C++ code formatter, clang-format found issues in your code. :warning:
<details>
<summary>
You can test this locally with the following command:
</summary>
``````````bash
git-clang-format --diff origin/main HEAD --extensions cpp,h -- flang/include/flang/Evaluate/call.h flang/include/flang/Semantics/expression.h flang/lib/Evaluate/formatting.cpp flang/lib/Semantics/check-call.cpp flang/lib/Semantics/check-call.h flang/lib/Semantics/expression.cpp --diff_from_common_commit
``````````
:warning:
The reproduction instructions above might return results for more than one PR
in a stack if you are using a stacked PR workflow. You can limit the results by
changing `origin/main` to the base branch/commit you want to compare against.
:warning:
</details>
<details>
<summary>
View the diff from clang-format here.
</summary>
``````````diff
diff --git a/flang/include/flang/Semantics/expression.h b/flang/include/flang/Semantics/expression.h
index 713e81e70..63ff4e244 100644
--- a/flang/include/flang/Semantics/expression.h
+++ b/flang/include/flang/Semantics/expression.h
@@ -372,9 +372,8 @@ private:
bool failedDueToAmbiguity{false};
SymbolVector tried;
};
- GenericResolution ResolveGeneric(
- const Symbol &, const ActualArguments &, const AdjustActuals &,
- bool isSubroutine, SymbolVector &&tried,
+ GenericResolution ResolveGeneric(const Symbol &, const ActualArguments &,
+ const AdjustActuals &, bool isSubroutine, SymbolVector &&tried,
bool mightBeStructureConstructor = false);
void EmitGenericResolutionError(const Symbol &, bool dueToNullActuals,
bool isSubroutine, ActualArguments &, const SymbolVector &);
diff --git a/flang/lib/Semantics/expression.cpp b/flang/lib/Semantics/expression.cpp
index 0ae9f3b32..120ae7d94 100644
--- a/flang/lib/Semantics/expression.cpp
+++ b/flang/lib/Semantics/expression.cpp
@@ -2552,11 +2552,12 @@ auto ExpressionAnalyzer::AnalyzeProcedureComponentRef(
}
return true;
}};
- auto result{ResolveGeneric(generic, arguments, adjustment, isSubroutine, SymbolVector{})};
+ auto result{ResolveGeneric(
+ generic, arguments, adjustment, isSubroutine, SymbolVector{})};
sym = result.specific;
if (!sym) {
- EmitGenericResolutionError(
- generic, result.failedDueToAmbiguity, isSubroutine, arguments, result.tried);
+ EmitGenericResolutionError(generic, result.failedDueToAmbiguity,
+ isSubroutine, arguments, result.tried);
return std::nullopt;
}
// re-resolve the name to the specific binding
@@ -2886,11 +2887,10 @@ const Symbol *ExpressionAnalyzer::ResolveForward(const Symbol &symbol) {
// Resolve a call to a generic procedure with given actual arguments.
// adjustActuals is called on procedure bindings to handle pass arg.
-auto ExpressionAnalyzer::ResolveGeneric(
- const Symbol &symbol, const ActualArguments &actuals,
- const AdjustActuals &adjustActuals, bool isSubroutine,
- SymbolVector &&tried,
- bool mightBeStructureConstructor) -> GenericResolution {
+auto ExpressionAnalyzer::ResolveGeneric(const Symbol &symbol,
+ const ActualArguments &actuals, const AdjustActuals &adjustActuals,
+ bool isSubroutine, SymbolVector &&tried, bool mightBeStructureConstructor)
+ -> GenericResolution {
const Symbol &ultimate{symbol.GetUltimate()};
// Check for a match with an explicit INTRINSIC
const Symbol *explicitIntrinsic{nullptr};
@@ -3041,8 +3041,8 @@ auto ExpressionAnalyzer::ResolveGeneric(
// Check parent derived type
if (const auto *parentScope{symbol.owner().GetDerivedTypeParent()}) {
if (const Symbol * extended{parentScope->FindComponent(symbol.name())}) {
- auto result{ResolveGeneric(
- *extended, actuals, adjustActuals, isSubroutine, std::move(tried), false)};
+ auto result{ResolveGeneric(*extended, actuals, adjustActuals,
+ isSubroutine, std::move(tried), false)};
if (result.specific != nullptr) {
return result;
}
@@ -4984,7 +4984,10 @@ std::optional<ProcedureRef> ArgumentAnalyzer::GetDefinedAssignmentProc(
auto restorer{context_.GetContextualMessages().DiscardMessages()};
if (const Symbol *symbol{scope.FindSymbol(oprName)}) {
ExpressionAnalyzer::AdjustActuals noAdjustment;
-proc = context_.ResolveGeneric(*symbol, actuals_, noAdjustment, true, SymbolVector{}).specific;
+ proc = context_
+ .ResolveGeneric(
+ *symbol, actuals_, noAdjustment, true, SymbolVector{})
+ .specific;
if (proc) {
isProcElemental = IsElementalProcedure(*proc);
}
@@ -5133,8 +5136,8 @@ const Symbol *ArgumentAnalyzer::FindBoundOp(parser::CharBlock oprName,
[&](const Symbol &proc, ActualArguments &) {
return passIndex == GetPassIndex(proc).value_or(-1);
}};
- auto result{
- context_.ResolveGeneric(*generic, actuals_, adjustment, isSubroutine, SymbolVector{})};
+ auto result{context_.ResolveGeneric(
+ *generic, actuals_, adjustment, isSubroutine, SymbolVector{})};
if (const Symbol *binding{result.specific}) {
CHECK(binding->has<semantics::ProcBindingDetails>());
// Use the most recent override of the binding, if any
@@ -5143,8 +5146,8 @@ const Symbol *ArgumentAnalyzer::FindBoundOp(parser::CharBlock oprName,
if (isAmbiguous) {
*isAmbiguous = result.failedDueToAmbiguity;
}
- context_.EmitGenericResolutionError(
- *generic, result.failedDueToAmbiguity, isSubroutine, actuals_, result.tried);
+ context_.EmitGenericResolutionError(*generic, result.failedDueToAmbiguity,
+ isSubroutine, actuals_, result.tried);
}
}
return nullptr;
``````````
</details>
https://github.com/llvm/llvm-project/pull/164738
More information about the flang-commits
mailing list