Index: llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp =================================================================== --- llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp +++ llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp @@ -2150,6 +2150,10 @@ NewGlobal->copyAttributesFrom(G); NewGlobal->setComdat(G->getComdat()); NewGlobal->setAlignment(MinRZ); + // Don't fold globals with redzones. ODR violation detector and redzone + // poisoning implicitly creates a dependence on the global's address, so it + // is no longer valid for it to be marked unnamed_addr. + NewGlobal->setUnnamedAddr(GlobalValue::UnnamedAddr::None); // Move null-terminated C strings to "__asan_cstring" section on Darwin. if (TargetTriple.isOSBinFormatMachO() && !G->hasSection() && Index: llvm/trunk/test/Instrumentation/AddressSanitizer/global_cstring_darwin.ll =================================================================== --- llvm/trunk/test/Instrumentation/AddressSanitizer/global_cstring_darwin.ll +++ llvm/trunk/test/Instrumentation/AddressSanitizer/global_cstring_darwin.ll @@ -8,14 +8,14 @@ @.str.1 = private unnamed_addr constant [13 x i8] c"Hello world.\00", align 1 @.str.2 = private unnamed_addr constant [4 x i8] c"%s\0A\00", align 1 -; CHECK: @.str.1 = internal unnamed_addr constant { [13 x i8], [51 x i8] } { [13 x i8] c"Hello world.\00", [51 x i8] zeroinitializer }, section "__TEXT,__asan_cstring,regular", align 32 -; CHECK: @.str.2 = internal unnamed_addr constant { [4 x i8], [60 x i8] } { [4 x i8] c"%s\0A\00", [60 x i8] zeroinitializer }, section "__TEXT,__asan_cstring,regular", align 32 +; CHECK: @.str.1 = internal constant { [13 x i8], [51 x i8] } { [13 x i8] c"Hello world.\00", [51 x i8] zeroinitializer }, section "__TEXT,__asan_cstring,regular", align 32 +; CHECK: @.str.2 = internal constant { [4 x i8], [60 x i8] } { [4 x i8] c"%s\0A\00", [60 x i8] zeroinitializer }, section "__TEXT,__asan_cstring,regular", align 32 ; Shouldn't be put into special section: @.str.3 = private unnamed_addr constant [4 x i8] c"\00\01\02\03", align 1 @.str.4 = private unnamed_addr global [7 x i8] c"Hello.\00", align 1 @.str.5 = private unnamed_addr constant [8 x i8] c"Hello.\00\00", align 1 -; CHECK: @.str.3 = internal unnamed_addr constant { [4 x i8], [60 x i8] } { [4 x i8] c"\00\01\02\03", [60 x i8] zeroinitializer }, align 32 -; CHECK: @.str.4 = private unnamed_addr global { [7 x i8], [57 x i8] } { [7 x i8] c"Hello.\00", [57 x i8] zeroinitializer }, align 32 -; CHECK: @.str.5 = internal unnamed_addr constant { [8 x i8], [56 x i8] } { [8 x i8] c"Hello.\00\00", [56 x i8] zeroinitializer }, align 32 +; CHECK: @.str.3 = internal constant { [4 x i8], [60 x i8] } { [4 x i8] c"\00\01\02\03", [60 x i8] zeroinitializer }, align 32 +; CHECK: @.str.4 = private global { [7 x i8], [57 x i8] } { [7 x i8] c"Hello.\00", [57 x i8] zeroinitializer }, align 32 +; CHECK: @.str.5 = internal constant { [8 x i8], [56 x i8] } { [8 x i8] c"Hello.\00\00", [56 x i8] zeroinitializer }, align 32 Index: llvm/trunk/test/Instrumentation/AddressSanitizer/global_metadata.ll =================================================================== --- llvm/trunk/test/Instrumentation/AddressSanitizer/global_metadata.ll +++ llvm/trunk/test/Instrumentation/AddressSanitizer/global_metadata.ll @@ -15,7 +15,7 @@ ; Check that globals were instrumented: ; CHECK: @global = global { i32, [60 x i8] } zeroinitializer, comdat, align 32 -; CHECK: @.str = internal unnamed_addr constant { [14 x i8], [50 x i8] } { [14 x i8] c"Hello, world!\00", [50 x i8] zeroinitializer }, comdat($".str${{[01-9a-f]+}}"), align 32 +; CHECK: @.str = internal constant { [14 x i8], [50 x i8] } { [14 x i8] c"Hello, world!\00", [50 x i8] zeroinitializer }, comdat($".str${{[01-9a-f]+}}"), align 32 ; Check emitted location descriptions: ; CHECK: [[VARNAME:@___asan_gen_.[0-9]+]] = private unnamed_addr constant [7 x i8] c"global\00", align 1 Index: llvm/trunk/test/Instrumentation/AddressSanitizer/global_metadata_array.ll =================================================================== --- llvm/trunk/test/Instrumentation/AddressSanitizer/global_metadata_array.ll +++ llvm/trunk/test/Instrumentation/AddressSanitizer/global_metadata_array.ll @@ -15,7 +15,7 @@ ; Check that globals were instrumented: ; CHECK: @global = global { i32, [60 x i8] } zeroinitializer, align 32 -; CHECK: @.str = internal unnamed_addr constant { [14 x i8], [50 x i8] } { [14 x i8] c"Hello, world!\00", [50 x i8] zeroinitializer }{{.*}}, align 32 +; CHECK: @.str = internal constant { [14 x i8], [50 x i8] } { [14 x i8] c"Hello, world!\00", [50 x i8] zeroinitializer }{{.*}}, align 32 ; Check emitted location descriptions: ; CHECK: [[VARNAME:@___asan_gen_.[0-9]+]] = private unnamed_addr constant [7 x i8] c"global\00", align 1 Index: llvm/trunk/test/Instrumentation/AddressSanitizer/global_metadata_windows.ll =================================================================== --- llvm/trunk/test/Instrumentation/AddressSanitizer/global_metadata_windows.ll +++ llvm/trunk/test/Instrumentation/AddressSanitizer/global_metadata_windows.ll @@ -14,8 +14,8 @@ ; CHECK: $dead_global = comdat noduplicates ; CHECK: $private_str = comdat noduplicates -; CHECK: @dead_global = local_unnamed_addr global { i32, [60 x i8] } { i32 42, [60 x i8] zeroinitializer }, comdat, align 32 -; CHECK: @private_str = internal unnamed_addr constant { [8 x i8], [56 x i8] } { [8 x i8] c"private\00", [56 x i8] zeroinitializer }, comdat, align 32 +; CHECK: @dead_global = global { i32, [60 x i8] } { i32 42, [60 x i8] zeroinitializer }, comdat, align 32 +; CHECK: @private_str = internal constant { [8 x i8], [56 x i8] } { [8 x i8] c"private\00", [56 x i8] zeroinitializer }, comdat, align 32 ; CHECK: @__asan_global_dead_global = private global { {{.*}} }, section ".ASAN$GL", comdat($dead_global), align 64 ; CHECK: @__asan_global_private_str = private global { {{.*}} }, section ".ASAN$GL", comdat($private_str), align 64 Index: llvm/trunk/test/Instrumentation/AddressSanitizer/win-string-literal.ll =================================================================== --- llvm/trunk/test/Instrumentation/AddressSanitizer/win-string-literal.ll +++ llvm/trunk/test/Instrumentation/AddressSanitizer/win-string-literal.ll @@ -7,7 +7,7 @@ ; CHECK: $"??_C@_04JIHMPGLA@asdf?$AA@" = comdat any ; CHECK: @"??_C@_04JIHMPGLA@asdf?$AA@" = -; CHECK-SAME: linkonce_odr dso_local unnamed_addr constant { [5 x i8], [59 x i8] } +; CHECK-SAME: linkonce_odr dso_local constant { [5 x i8], [59 x i8] } ; CHECK-SAME: { [5 x i8] c"asdf\00", [59 x i8] zeroinitializer }, comdat, align 32 ; CHECK: @"__asan_global_??_C@_04JIHMPGLA@asdf?$AA@" =