]> granicus.if.org Git - clang/commitdiff
[asan] add missing asan instrumentation in generated global init functions
authorKostya Serebryany <kcc@google.com>
Tue, 26 Jun 2012 08:56:33 +0000 (08:56 +0000)
committerKostya Serebryany <kcc@google.com>
Tue, 26 Jun 2012 08:56:33 +0000 (08:56 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@159191 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGDeclCXX.cpp
test/CodeGen/address-safety-attr.cpp

index a27516bb5b752c246a14db4f62d9f27d84e0832e..893628e08a87008458870800ebe01dfa2f43771f 100644 (file)
@@ -228,6 +228,9 @@ CreateGlobalInitOrDestructFunction(CodeGenModule &CGM,
   if (!CGM.getLangOpts().Exceptions)
     Fn->setDoesNotThrow();
 
+  if (CGM.getLangOpts().AddressSanitizer)
+    Fn->addFnAttr(llvm::Attribute::AddressSafety);
+
   return Fn;
 }
 
index 9d0fb9596330a6202a56249f55ee9e43a6acd6cc..da68b1d703fae08032b04e27d8a401079373d78c 100644 (file)
@@ -33,3 +33,9 @@ int TemplateAddressSafetyOk() { return i; }
 
 int force_instance = TemplateAddressSafetyOk<42>()
                    + TemplateNoAddressSafety<42>();
+
+// Check that __cxx_global_var_init* get the address_safety attribute.
+int global1 = 0;
+int global2 = *(int*)((char*)&global1+1);
+// CHECK-NOT: @__cxx_global_var_init{{.*}}address_safety
+// ASAN: @__cxx_global_var_init{{.*}}address_safety