From d38735e601d97d5dad4e6c7e7452632d5954f652 Mon Sep 17 00:00:00 2001 From: Valentin Clement Date: Tue, 22 Nov 2022 15:13:18 +0100 Subject: [PATCH] [flang][NFC] Switch CollectBindings return to SymbolVector As suggested on D138129, switching rteurn of CollectBindings function to SymbolVector. Reviewed By: jeanPerier Differential Revision: https://reviews.llvm.org/D138419 --- flang/include/flang/Semantics/runtime-type-info.h | 6 +++++- flang/lib/Lower/Bridge.cpp | 8 ++++---- flang/lib/Semantics/runtime-type-info.cpp | 14 +++++++------- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/flang/include/flang/Semantics/runtime-type-info.h b/flang/include/flang/Semantics/runtime-type-info.h index 4bb93c8..76560b9 100644 --- a/flang/include/flang/Semantics/runtime-type-info.h +++ b/flang/include/flang/Semantics/runtime-type-info.h @@ -14,6 +14,7 @@ #ifndef FORTRAN_SEMANTICS_RUNTIME_TYPE_INFO_H_ #define FORTRAN_SEMANTICS_RUNTIME_TYPE_INFO_H_ +#include "flang/Common/reference.h" #include #include #include @@ -27,6 +28,9 @@ class Scope; class SemanticsContext; class Symbol; +using SymbolRef = common::Reference; +using SymbolVector = std::vector; + struct RuntimeDerivedTypeTables { Scope *schemata{nullptr}; std::set names; @@ -38,7 +42,7 @@ RuntimeDerivedTypeTables BuildRuntimeDerivedTypeTables(SemanticsContext &); /// to describe other derived types at runtime in flang descriptor. constexpr char typeInfoBuiltinModule[]{"__fortran_type_info"}; -std::vector CollectBindings(const Scope &dtScope); +SymbolVector CollectBindings(const Scope &dtScope); } // namespace Fortran::semantics #endif // FORTRAN_SEMANTICS_RUNTIME_TYPE_INFO_H_ diff --git a/flang/lib/Lower/Bridge.cpp b/flang/lib/Lower/Bridge.cpp index 5d8be03..bfd3041 100644 --- a/flang/lib/Lower/Bridge.cpp +++ b/flang/lib/Lower/Bridge.cpp @@ -223,21 +223,21 @@ public: parent ? Fortran::lower::mangle::mangleName(*parent) : ""); auto insertPt = builder.saveInsertionPoint(); - std::vector bindings = + Fortran::semantics::SymbolVector bindings = Fortran::semantics::CollectBindings(*info.typeSpec->scope()); if (!bindings.empty()) builder.createBlock(&dt.getRegion()); - for (const Fortran::semantics::Symbol *binding : bindings) { + for (const Fortran::semantics::SymbolRef &binding : bindings) { const auto *details = - binding->detailsIf(); + binding.get().detailsIf(); std::string bindingName = Fortran::lower::mangle::mangleName(details->symbol()); builder.create( info.loc, mlir::StringAttr::get(builder.getContext(), - binding->name().ToString()), + binding.get().name().ToString()), mlir::SymbolRefAttr::get(builder.getContext(), bindingName)); } if (!bindings.empty()) diff --git a/flang/lib/Semantics/runtime-type-info.cpp b/flang/lib/Semantics/runtime-type-info.cpp index a3877e7..62cb264 100644 --- a/flang/lib/Semantics/runtime-type-info.cpp +++ b/flang/lib/Semantics/runtime-type-info.cpp @@ -940,8 +940,8 @@ SomeExpr RuntimeTableBuilder::PackageIntValueExpr( return StructureExpr(PackageIntValue(genre, n)); } -std::vector CollectBindings(const Scope &dtScope) { - std::vector result; +SymbolVector CollectBindings(const Scope &dtScope) { + SymbolVector result; std::map localBindings; // Collect local bindings for (auto pair : dtScope) { @@ -957,14 +957,14 @@ std::vector CollectBindings(const Scope &dtScope) { const Symbol &symbol{**iter}; auto overridden{localBindings.find(symbol.name())}; if (overridden != localBindings.end()) { - *iter = overridden->second; + *iter = *overridden->second; localBindings.erase(overridden); } } } // Add remaining (non-overriding) local bindings in name order to the result for (auto pair : localBindings) { - result.push_back(pair.second); + result.push_back(*pair.second); } return result; } @@ -972,13 +972,13 @@ std::vector CollectBindings(const Scope &dtScope) { std::vector RuntimeTableBuilder::DescribeBindings(const Scope &dtScope, Scope &scope) { std::vector result; - for (const Symbol *symbol : CollectBindings(dtScope)) { + for (const SymbolRef &ref : CollectBindings(dtScope)) { evaluate::StructureConstructorValues values; AddValue(values, bindingSchema_, "proc"s, SomeExpr{evaluate::ProcedureDesignator{ - symbol->get().symbol()}}); + ref.get().get().symbol()}}); AddValue(values, bindingSchema_, "name"s, - SaveNameAsPointerTarget(scope, symbol->name().ToString())); + SaveNameAsPointerTarget(scope, ref.get().name().ToString())); result.emplace_back(DEREF(bindingSchema_.AsDerived()), std::move(values)); } return result; -- 2.7.4