Skip to content

Commit b3e720b

Browse files
authored
[PassInstrumentation] Don't insert extra entries in getPassNameForClassName (#150029)
Don't modify ClassToPassName map unless ClassName is found. Instead, just return empty StringRef if there is no matching entry. This will prevent possible dangling references in ClassToPassName map in case of ClassName being freed. See https://github.com/llvm/llvm-project/pull/145059/files#r2219763671 for more context.
1 parent 115f768 commit b3e720b

File tree

2 files changed

+6
-2
lines changed

2 files changed

+6
-2
lines changed

llvm/include/llvm/IR/PassInstrumentation.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ class PassInstrumentationCallbacks {
164164

165165
/// Add a class name to pass name mapping for use by pass instrumentation.
166166
LLVM_ABI void addClassToPassName(StringRef ClassName, StringRef PassName);
167-
/// Get the pass name for a given pass class name.
167+
/// Get the pass name for a given pass class name. Empty if no match found.
168168
LLVM_ABI StringRef getPassNameForClassName(StringRef ClassName);
169169

170170
private:

llvm/lib/IR/PassInstrumentation.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ template struct LLVM_EXPORT_TEMPLATE Any::TypeId<const Loop *>;
2323

2424
void PassInstrumentationCallbacks::addClassToPassName(StringRef ClassName,
2525
StringRef PassName) {
26+
assert(!PassName.empty() && "PassName can't be empty!");
2627
ClassToPassName.try_emplace(ClassName, PassName.str());
2728
}
2829

@@ -33,7 +34,10 @@ PassInstrumentationCallbacks::getPassNameForClassName(StringRef ClassName) {
3334
Fn();
3435
ClassToPassNameCallbacks.clear();
3536
}
36-
return ClassToPassName[ClassName];
37+
auto PassNameIter = ClassToPassName.find(ClassName);
38+
if (PassNameIter != ClassToPassName.end())
39+
return PassNameIter->second;
40+
return {};
3741
}
3842

3943
AnalysisKey PassInstrumentationAnalysis::Key;

0 commit comments

Comments
 (0)