[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