Skip to content

Commit

Permalink
[MCA] use std::function instead of function_ref when storing (#91039)
Browse files Browse the repository at this point in the history
This patch changes uses of llvm::function_ref for std::function when
storing the callback inside of a class. The LLVM Programmer's manual
mentions that llvm::function_ref is not safe to store as it contains
pointers to external memory that are not guaranteed to exist in the
future when it is stored.

This causes issues when setting callbacks inside of a class that manages
MCA state. Passing a lambda directly to the set callback functions will
end up causing UB/segfaults when the lambda is called as some external
memory is now invalid. This is easy to work around (create a separate
std::function, pass that into the function setting the callback), but
isn't ideal.
  • Loading branch information
boomanaiden154 authored May 20, 2024
1 parent dce197a commit 7ecdf62
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 3 deletions.
2 changes: 1 addition & 1 deletion llvm/include/llvm/MCA/IncrementalSourceMgr.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ class IncrementalSourceMgr : public SourceMgr {
bool EOS = false;

/// Called when an instruction is no longer needed.
using InstFreedCallback = llvm::function_ref<void(Instruction *)>;
using InstFreedCallback = std::function<void(Instruction *)>;
InstFreedCallback InstFreedCB;

public:
Expand Down
3 changes: 1 addition & 2 deletions llvm/include/llvm/MCA/InstrBuilder.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,7 @@ class InstrBuilder {
bool FirstCallInst;
bool FirstReturnInst;

using InstRecycleCallback =
llvm::function_ref<Instruction *(const InstrDesc &)>;
using InstRecycleCallback = std::function<Instruction *(const InstrDesc &)>;
InstRecycleCallback InstRecycleCB;

Expected<const InstrDesc &>
Expand Down

0 comments on commit 7ecdf62

Please sign in to comment.