Index: lib/CodeGen/BackendUtil.cpp =================================================================== --- lib/CodeGen/BackendUtil.cpp +++ lib/CodeGen/BackendUtil.cpp @@ -568,7 +568,7 @@ // Add ObjC ARC final-cleanup optimizations. This is done as part of the // "codegen" passes so that it isn't run multiple times when there is // inlining happening. - if (LangOpts.ObjCAutoRefCount && + if (TheModule->getModuleFlag("Objective-C ARC") && CodeGenOpts.OptimizationLevel > 0) PM->add(createObjCARCContractPass()); Index: lib/CodeGen/CGObjCMac.cpp =================================================================== --- lib/CodeGen/CGObjCMac.cpp +++ lib/CodeGen/CGObjCMac.cpp @@ -4283,6 +4283,13 @@ } } + // Add ObjCAutoRefCount as a module flag + if (CGM.getLangOpts().ObjCAutoRefCount) { + // AutoRefCount will overwrites files which don't have ARC. + Mod.addModuleFlag(llvm::Module::Override, + "Objective-C ARC", (uint32_t)1); + } + // Indicate whether we're compiling this to run on a simulator. const llvm::Triple &Triple = CGM.getTarget().getTriple(); if (Triple.isiOS() &&