[ASan] Hoist blacklisting globals from init-order checking to Clang.

Clang knows about the sanitizer blacklist and it makes no sense to
add global to the list of llvm.asan.dynamically_initialized_globals if it
will be blacklisted in the instrumentation pass anyway. Instead, we should
do as much blacklisting as possible (if not all) in the frontend.

llvm-svn: 209789
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index c55e231..484373b 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -1878,12 +1878,11 @@
     EmitCXXGlobalVarDeclInitFunc(D, GV, NeedsGlobalCtor);
 
   // If we are compiling with ASan, add metadata indicating dynamically
-  // initialized globals.
-  if (SanOpts.Address && NeedsGlobalCtor) {
-    llvm::Module &M = getModule();
-
-    llvm::NamedMDNode *DynamicInitializers =
-        M.getOrInsertNamedMetadata("llvm.asan.dynamically_initialized_globals");
+  // initialized (and not blacklisted) globals.
+  if (SanOpts.Address && NeedsGlobalCtor &&
+      !SanitizerBlacklist->isIn(*GV, "init")) {
+    llvm::NamedMDNode *DynamicInitializers = TheModule.getOrInsertNamedMetadata(
+        "llvm.asan.dynamically_initialized_globals");
     llvm::Value *GlobalToAdd[] = { GV };
     llvm::MDNode *ThisGlobal = llvm::MDNode::get(VMContext, GlobalToAdd);
     DynamicInitializers->addOperand(ThisGlobal);