[PATCH] D109386: Change to use ValueHandle for associated data of GlobalCtors
Lei Wang via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 8 16:31:03 PDT 2021
wlei added a comment.
In D109386#2990504 <https://reviews.llvm.org/D109386#2990504>, @rnk wrote:
> This seems incorrect: a weak VH won't have the same semantics, it will just drop the comdat associativity when the underlying global changes type.
@rnk Thanks. Here I tried to use `WeakTrackingVH` working together with `replaceAllUsesWith` which is already there (in CodeGenModule.cpp:3904), my debugging dump showed like:
GlobalCtors = [..,OldPtr];
OldPtr->replaceAllUsesWith(NewPtr);
GlobalCtors = [..,NewPtr];
I think this is what we desire. Do you think this can cause other issues or anything I missed?
> BTW, can this be tested, or is this only possible when clang is being used as a library, perhaps as in swift?
Not swift, it seems this use-after-free needs a large program to repro, I tried to simplify it but failed to expose it by small program.
================
Comment at: clang/lib/CodeGen/CodeGenModule.cpp:3904
llvm::ConstantExpr::getBitCast(GV, Entry->getType());
Entry->replaceAllUsesWith(NewPtrForOldDecl);
}
----------------
Here is the `replaceAllUsesWith` .
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D109386/new/
https://reviews.llvm.org/D109386
More information about the cfe-commits
mailing list