[PATCH] D14962: [ASAN] Add doFinalization to reset state

Keno Fischer via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 24 11:06:25 PST 2015

loladiro created this revision.
loladiro added a reviewer: kcc.
loladiro added a subscriber: llvm-commits.
loladiro set the repository for this revision to rL LLVM.

If the same pass manager is used for multiple modules ASAN complains about GlobalsMD being initialized twice. Fix this by resetting GlobalsMD in a new doFinalization method to allow this use case.




Index: lib/Transforms/Instrumentation/AddressSanitizer.cpp
--- lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -280,6 +280,11 @@
   GlobalsMetadata() : inited_(false) {}
+  void reset() {
+    inited_ = false;
+    Entries.clear();
+  }
   void init(Module &M) {
     inited_ = true;
@@ -450,6 +455,7 @@
   bool maybeInsertAsanInitAtFunctionEntry(Function &F);
   void markEscapedLocalAllocas(Function &F);
   bool doInitialization(Module &M) override;
+  bool doFinalization(Module &M) override;
   static char ID;  // Pass identification, replacement for typeid
   DominatorTree &getDominatorTree() const { return *DT; }
@@ -1506,6 +1512,11 @@
   return true;
+bool AddressSanitizer::doFinalization(Module &M) {
+  GlobalsMD.reset();
+  return false;
 bool AddressSanitizer::maybeInsertAsanInitAtFunctionEntry(Function &F) {
   // For each NSObject descendant having a +load method, this method is invoked
   // by the ObjC runtime before any of the static constructors is called.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D14962.41066.patch
Type: text/x-patch
Size: 1155 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151124/9f8517bf/attachment.bin>

More information about the llvm-commits mailing list