Index: lib/Transforms/Instrumentation/AddressSanitizer.cpp =================================================================== --- lib/Transforms/Instrumentation/AddressSanitizer.cpp +++ lib/Transforms/Instrumentation/AddressSanitizer.cpp @@ -1072,6 +1072,10 @@ DEBUG(dbgs() << "Ignoring objc_methname cstring global: " << *G << "\n"); return false; } + if (Section.startswith("__TEXT,__objc_classname,cstring_literals")) { + DEBUG(dbgs() << "Ignoring objc_classname cstring global: " << *G << "\n"); + return false; + } // Callbacks put into the CRT initializer/terminator sections Index: projects/compiler-rt/test/asan/TestCases/Darwin/objc-odr.mm =================================================================== --- projects/compiler-rt/test/asan/TestCases/Darwin/objc-odr.mm +++ projects/compiler-rt/test/asan/TestCases/Darwin/objc-odr.mm @@ -0,0 +1,23 @@ +// Regression test for +// https://code.google.com/p/address-sanitizer/issues/detail?id=360. + +// RUN: %clang_asan %s -o %t -framework Foundation +// RUN: %run %t 2>&1 | FileCheck %s + +#import + +void f() { + int y = 7; + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ + dispatch_sync(dispatch_get_main_queue(), ^{ + printf("num = %d\n", y); + }); + }); +} + +int main() { + NSLog(@"Hello world"); +} + +// CHECK-NOT: AddressSanitizer: odr-violation +// CHECK: Hello world