[llvm] [GC] Use `MapVector` for `GCStrategyMap` (PR #132729)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 24 21:49:33 PDT 2025
================
@@ -151,15 +152,45 @@ class GCFunctionInfo {
size_t live_size(const iterator &p) const { return roots_size(); }
};
-struct GCStrategyMap {
- StringMap<std::unique_ptr<GCStrategy>> StrategyMap;
+class GCStrategyMap {
+ using MapT =
+ MapVector<StringRef, std::unique_ptr<GCStrategy>, StringMap<unsigned>>;
+ MapT Strategies;
+public:
GCStrategyMap() = default;
GCStrategyMap(GCStrategyMap &&) = default;
/// Handle invalidation explicitly.
bool invalidate(Module &M, const PreservedAnalyses &PA,
ModuleAnalysisManager::Invalidator &Inv);
+
+ using iterator = MapT::iterator;
+ using const_iterator = MapT::const_iterator;
+ using reverse_iterator = MapT::reverse_iterator;
+ using const_reverse_iterator = MapT::const_reverse_iterator;
+
+ iterator begin() { return Strategies.begin(); }
+ const_iterator begin() const { return Strategies.begin(); }
+ iterator end() { return Strategies.end(); }
+ const_iterator end() const { return Strategies.end(); }
+
+ reverse_iterator rbegin() { return Strategies.rbegin(); }
+ const_reverse_iterator rbegin() const { return Strategies.rbegin(); }
+ reverse_iterator rend() { return Strategies.rend(); }
+ const_reverse_iterator rend() const { return Strategies.rend(); }
+
+ bool empty() const { return Strategies.empty(); }
+
+ GCStrategy &operator[](StringRef GCName) { return *Strategies[GCName]; }
----------------
paperchalice wrote:
Const qualified version causes returning reference to local temporary object.
https://github.com/llvm/llvm-project/pull/132729
More information about the llvm-commits
mailing list