Index: cfe/trunk/lib/CodeGen/CGBlocks.cpp =================================================================== --- cfe/trunk/lib/CodeGen/CGBlocks.cpp +++ cfe/trunk/lib/CodeGen/CGBlocks.cpp @@ -1434,10 +1434,12 @@ if (CGM.getContext().getLangOpts().OpenCL) AddrSpace = CGM.getContext().getTargetAddressSpace(LangAS::opencl_global); - llvm::Constant *literal = fields.finishAndCreateGlobal( + llvm::GlobalVariable *literal = fields.finishAndCreateGlobal( "__block_literal_global", blockInfo.BlockAlign, /*constant*/ !IsWindows, llvm::GlobalVariable::InternalLinkage, AddrSpace); + literal->addAttribute("objc_arc_inert"); + // Windows does not allow globals to be initialised to point to globals in // different DLLs. Any such variables must run code to initialise them. if (IsWindows) { Index: cfe/trunk/lib/CodeGen/CodeGenModule.cpp =================================================================== --- cfe/trunk/lib/CodeGen/CodeGenModule.cpp +++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp @@ -4652,6 +4652,7 @@ GV = Fields.finishAndCreateGlobal("_unnamed_cfstring_", Alignment, /*isConstant=*/false, llvm::GlobalVariable::PrivateLinkage); + GV->addAttribute("objc_arc_inert"); switch (Triple.getObjectFormat()) { case llvm::Triple::UnknownObjectFormat: llvm_unreachable("unknown file format"); Index: cfe/trunk/test/CodeGenCXX/static-local-in-local-class.cpp =================================================================== --- cfe/trunk/test/CodeGenCXX/static-local-in-local-class.cpp +++ cfe/trunk/test/CodeGenCXX/static-local-in-local-class.cpp @@ -127,7 +127,7 @@ // CHECK: load i32, i32* % // CHECK: ret i32 % -// CHECK-LABEL: define internal i32* @_ZZZL20block_deduced_returnvEUb_EN1SclEv(%struct.S.6* %this) #0 align 2 { +// CHECK-LABEL: define internal i32* @_ZZZL20block_deduced_returnvEUb_EN1SclEv(%struct.S.6* %this) #1 align 2 { // CHECK: ret i32* @_ZZZL20block_deduced_returnvEUb_E1n inline auto static_local_label(void *p) { Index: cfe/trunk/test/CodeGenObjC/attr-objc-arc-inert.m =================================================================== --- cfe/trunk/test/CodeGenObjC/attr-objc-arc-inert.m +++ cfe/trunk/test/CodeGenObjC/attr-objc-arc-inert.m @@ -0,0 +1,16 @@ +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fblocks -emit-llvm -o - %s | FileCheck %s + +// CHECK: @{{.*}} = private global %{{.*}} { i32* getelementptr inbounds ([0 x i32], [0 x i32]* @__CFConstantStringClassReference, i32 0, i32 0), i32 1992, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @{{.*}}, i32 0, i32 0), i64 3 }, section "__DATA,__cfstring", align 8 #[[ATTRNUM0:[0-9]+]] +// CHECK: @{{.*}} = internal constant { i8**, i32, i32, i8*, %{{.*}}* } { i8** @_NSConcreteGlobalBlock, i32 1342177280, i32 0, i8* bitcast (i32 (i8*)* @{{.*}} to i8*), %{{.*}}* bitcast ({ i64, i64, i8*, i8* }* @{{.*}} to %{{.*}}*) }, align 8 #[[ATTRNUM0]] + +@class NSString; + +NSString *testStringLiteral(void) { + return @"abc"; +} + +int testGlobalBlock(int a) { + return ^{ return 123; }(); +} + +// CHECK: attributes #[[ATTRNUM0]] = { "objc_arc_inert" }