On Mon, Oct 15, 2012 at 4:21 PM, Nico Weber <[email protected]> wrote: > On Mon, Oct 15, 2012 at 3:45 PM, Daniel Dunbar <[email protected]> > wrote: >> There is a fix, in 165986. Just separated it into a different commit. > > Ah, I didn't see that. Thanks! > > (ps: This seems to work for me, but I need to build a few times for it > to work. I get intermittent failures while building compiler-rt the > first few tries. Repro: `make clean && make -j16` in the llvm root > directory.)
That's bad. Can you give me more information on what the intermittent failures look like? I'll try to repro locally as well. - Daniel > >> >> - Daniel >> >> >> On Oct 15, 2012, at 15:42, Nico Weber <[email protected]> wrote: >> >>> Why reland this without a build fix? >>> >>> On Mon, Oct 15, 2012 at 3:23 PM, Daniel Dunbar <[email protected]> wrote: >>>> Author: ddunbar >>>> Date: Mon Oct 15 17:23:53 2012 >>>> New Revision: 165988 >>>> >>>> URL: http://llvm.org/viewvc/llvm-project?rev=165988&view=rev >>>> Log: >>>> Un-revert r164907 and r164902 (+ follow-ups), 10.6 build fix to follow. >>>> >>>> Added: >>>> cfe/trunk/test/CodeGenObjC/optimized-setter-ios-device.m >>>> - copied, changed from r165977, >>>> cfe/trunk/test/CodeGenObjC/optimized-setter.m >>>> cfe/trunk/test/CodeGenObjC/unoptimized-setter.m >>>> - copied, changed from r165977, >>>> cfe/trunk/test/CodeGenObjC/optimized-setter.m >>>> Modified: >>>> cfe/trunk/include/clang/Basic/ObjCRuntime.h >>>> cfe/trunk/lib/CodeGen/CGObjC.cpp >>>> cfe/trunk/lib/Driver/ToolChains.cpp >>>> cfe/trunk/lib/Driver/Tools.cpp >>>> cfe/trunk/lib/Sema/SemaExpr.cpp >>>> cfe/trunk/runtime/compiler-rt/Makefile >>>> cfe/trunk/test/CodeGenObjC/optimized-setter.m >>>> cfe/trunk/test/Driver/darwin-ld.c >>>> cfe/trunk/test/Driver/pic.c >>>> >>>> Modified: cfe/trunk/include/clang/Basic/ObjCRuntime.h >>>> URL: >>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/ObjCRuntime.h?rev=165988&r1=165987&r2=165988&view=diff >>>> ============================================================================== >>>> --- cfe/trunk/include/clang/Basic/ObjCRuntime.h (original) >>>> +++ cfe/trunk/include/clang/Basic/ObjCRuntime.h Mon Oct 15 17:23:53 2012 >>>> @@ -157,6 +157,19 @@ >>>> llvm_unreachable("bad kind"); >>>> } >>>> >>>> + /// \brief Does this runtime supports optimized setter entrypoints? >>>> + bool hasOptimizedSetter() const { >>>> + switch (getKind()) { >>>> + case MacOSX: >>>> + return getVersion() >= VersionTuple(10, 8); >>>> + case iOS: >>>> + return (getVersion() >= VersionTuple(6)); >>>> + >>>> + default: >>>> + return false; >>>> + } >>>> + } >>>> + >>>> /// Does this runtime allow the use of __weak? >>>> bool allowsWeak() const { >>>> return hasNativeWeak(); >>>> @@ -177,7 +190,7 @@ >>>> switch (getKind()) { >>>> case FragileMacOSX: return false; >>>> case MacOSX: return getVersion() >= VersionTuple(10, 8); >>>> - case iOS: return false; >>>> + case iOS: return getVersion() >= VersionTuple(6); >>>> >>>> // This is really a lie, because some implementations and versions >>>> // of the runtime do not support ARC. Probably -fgnu-runtime >>>> >>>> Modified: cfe/trunk/lib/CodeGen/CGObjC.cpp >>>> URL: >>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjC.cpp?rev=165988&r1=165987&r2=165988&view=diff >>>> ============================================================================== >>>> --- cfe/trunk/lib/CodeGen/CGObjC.cpp (original) >>>> +++ cfe/trunk/lib/CodeGen/CGObjC.cpp Mon Oct 15 17:23:53 2012 >>>> @@ -1041,12 +1041,7 @@ >>>> static bool UseOptimizedSetter(CodeGenModule &CGM) { >>>> if (CGM.getLangOpts().getGC() != LangOptions::NonGC) >>>> return false; >>>> - const TargetInfo &Target = CGM.getContext().getTargetInfo(); >>>> - >>>> - if (Target.getPlatformName() != "macosx") >>>> - return false; >>>> - >>>> - return Target.getPlatformMinVersion() >= VersionTuple(10, 8); >>>> + return CGM.getLangOpts().ObjCRuntime.hasOptimizedSetter(); >>>> } >>>> >>>> void >>>> @@ -1106,7 +1101,7 @@ >>>> llvm::Value *setOptimizedPropertyFn = 0; >>>> llvm::Value *setPropertyFn = 0; >>>> if (UseOptimizedSetter(CGM)) { >>>> - // 10.8 code and GC is off >>>> + // 10.8 and iOS 6.0 code and GC is off >>>> setOptimizedPropertyFn = >>>> CGM.getObjCRuntime() >>>> .GetOptimizedPropertySetFunction(strategy.isAtomic(), >>>> >>>> Modified: cfe/trunk/lib/Driver/ToolChains.cpp >>>> URL: >>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=165988&r1=165987&r2=165988&view=diff >>>> ============================================================================== >>>> --- cfe/trunk/lib/Driver/ToolChains.cpp (original) >>>> +++ cfe/trunk/lib/Driver/ToolChains.cpp Mon Oct 15 17:23:53 2012 >>>> @@ -332,7 +332,9 @@ >>>> >>>> // Darwin doesn't support real static executables, don't link any runtime >>>> // libraries with -static. >>>> - if (Args.hasArg(options::OPT_static)) >>>> + if (Args.hasArg(options::OPT_static) || >>>> + Args.hasArg(options::OPT_fapple_kext) || >>>> + Args.hasArg(options::OPT_mkernel)) >>>> return; >>>> >>>> // Reject -static-libgcc for now, we can deal with this when and if >>>> someone >>>> @@ -676,7 +678,14 @@ >>>> llvm::sys::Path P(getDriver().ResourceDir); >>>> P.appendComponent("lib"); >>>> P.appendComponent("darwin"); >>>> - P.appendComponent("libclang_rt.cc_kext.a"); >>>> + >>>> + // Use the newer cc_kext for iOS ARM after 6.0. >>>> + if (!isTargetIPhoneOS() || isTargetIOSSimulator() || >>>> + !isIPhoneOSVersionLT(6, 0)) { >>>> + P.appendComponent("libclang_rt.cc_kext.a"); >>>> + } else { >>>> + P.appendComponent("libclang_rt.cc_kext_ios5.a"); >>>> + } >>>> >>>> // For now, allow missing resource libraries to support developers who >>>> may >>>> // not have compiler-rt checked out or integrated into their build. >>>> @@ -902,6 +911,25 @@ >>>> if (BoundArch) >>>> AddDeploymentTarget(*DAL); >>>> >>>> + // For iOS 6, undo the translation to add -static for >>>> -mkernel/-fapple-kext. >>>> + // FIXME: It would be far better to avoid inserting those -static >>>> arguments, >>>> + // but we can't check the deployment target in the translation code >>>> until >>>> + // it is set here. >>>> + if (isTargetIPhoneOS() && !isIPhoneOSVersionLT(6, 0)) { >>>> + for (ArgList::iterator it = DAL->begin(), ie = DAL->end(); it != ie; >>>> ) { >>>> + Arg *A = *it; >>>> + ++it; >>>> + if (A->getOption().getID() != options::OPT_mkernel && >>>> + A->getOption().getID() != options::OPT_fapple_kext) >>>> + continue; >>>> + assert(it != ie && "unexpected argument translation"); >>>> + A = *it; >>>> + assert(A->getOption().getID() == options::OPT_static && >>>> + "missing expected -static argument"); >>>> + it = DAL->getArgs().erase(it); >>>> + } >>>> + } >>>> + >>>> // Validate the C++ standard library choice. >>>> CXXStdlibType Type = GetCXXStdlibType(*DAL); >>>> if (Type == ToolChain::CST_Libcxx) { >>>> >>>> Modified: cfe/trunk/lib/Driver/Tools.cpp >>>> URL: >>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=165988&r1=165987&r2=165988&view=diff >>>> ============================================================================== >>>> --- cfe/trunk/lib/Driver/Tools.cpp (original) >>>> +++ cfe/trunk/lib/Driver/Tools.cpp Mon Oct 15 17:23:53 2012 >>>> @@ -674,7 +674,9 @@ >>>> ArgStringList &CmdArgs, >>>> bool KernelOrKext) const { >>>> const Driver &D = getToolChain().getDriver(); >>>> - llvm::Triple Triple = getToolChain().getTriple(); >>>> + // Get the effective triple, which takes into account the deployment >>>> target. >>>> + std::string TripleStr = >>>> getToolChain().ComputeEffectiveClangTriple(Args); >>>> + llvm::Triple Triple(TripleStr); >>>> >>>> // Select the ABI to use. >>>> // >>>> @@ -759,8 +761,10 @@ >>>> >>>> // Kernel code has more strict alignment requirements. >>>> if (KernelOrKext) { >>>> - CmdArgs.push_back("-backend-option"); >>>> - CmdArgs.push_back("-arm-long-calls"); >>>> + if (Triple.getOS() != llvm::Triple::IOS || Triple.isOSVersionLT(6)) { >>>> + CmdArgs.push_back("-backend-option"); >>>> + CmdArgs.push_back("-arm-long-calls"); >>>> + } >>>> >>>> CmdArgs.push_back("-backend-option"); >>>> CmdArgs.push_back("-arm-strict-align"); >>>> @@ -1697,7 +1701,11 @@ >>>> } >>>> // Note that these flags are trump-cards. Regardless of the order w.r.t. >>>> the >>>> // PIC or PIE options above, if these show up, PIC is disabled. >>>> - if (Args.hasArg(options::OPT_mkernel)) >>>> + llvm::Triple Triple(TripleStr); >>>> + if ((Args.hasArg(options::OPT_mkernel) || >>>> + Args.hasArg(options::OPT_fapple_kext)) && >>>> + (Triple.getOS() != llvm::Triple::IOS || >>>> + Triple.isOSVersionLT(6))) >>>> PICDisabled = true; >>>> if (Args.hasArg(options::OPT_static)) >>>> PICDisabled = true; >>>> @@ -3690,7 +3698,10 @@ >>>> CheckCodeGenerationOptions(D, Args); >>>> >>>> // Derived from cc1 spec. >>>> - if (!Args.hasArg(options::OPT_mkernel) && >>>> !Args.hasArg(options::OPT_static) && >>>> + if ((!Args.hasArg(options::OPT_mkernel) || >>>> + (getDarwinToolChain().isTargetIPhoneOS() && >>>> + !getDarwinToolChain().isIPhoneOSVersionLT(6, 0))) && >>>> + !Args.hasArg(options::OPT_static) && >>>> !Args.hasArg(options::OPT_mdynamic_no_pic)) >>>> CmdArgs.push_back("-fPIC"); >>>> >>>> @@ -4144,9 +4155,11 @@ >>>> CmdArgs.push_back("-force_cpusubtype_ALL"); >>>> >>>> if (getToolChain().getTriple().getArch() != llvm::Triple::x86_64 && >>>> - (Args.hasArg(options::OPT_mkernel) || >>>> - Args.hasArg(options::OPT_static) || >>>> - Args.hasArg(options::OPT_fapple_kext))) >>>> + (((Args.hasArg(options::OPT_mkernel) || >>>> + Args.hasArg(options::OPT_fapple_kext)) && >>>> + (!getDarwinToolChain().isTargetIPhoneOS() || >>>> + getDarwinToolChain().isIPhoneOSVersionLT(6, 0))) || >>>> + Args.hasArg(options::OPT_static))) >>>> CmdArgs.push_back("-static"); >>>> >>>> Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA, >>>> @@ -4507,7 +4520,7 @@ >>>> } else if (getDarwinToolChain().isTargetIPhoneOS()) { >>>> if (getDarwinToolChain().isIPhoneOSVersionLT(3, 1)) >>>> CmdArgs.push_back("-lcrt1.o"); >>>> - else >>>> + else if (getDarwinToolChain().isIPhoneOSVersionLT(6, 0)) >>>> CmdArgs.push_back("-lcrt1.3.1.o"); >>>> } else { >>>> if (getDarwinToolChain().isMacosxVersionLT(10, 5)) >>>> >>>> Modified: cfe/trunk/lib/Sema/SemaExpr.cpp >>>> URL: >>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=165988&r1=165987&r2=165988&view=diff >>>> ============================================================================== >>>> --- cfe/trunk/lib/Sema/SemaExpr.cpp (original) >>>> +++ cfe/trunk/lib/Sema/SemaExpr.cpp Mon Oct 15 17:23:53 2012 >>>> @@ -9770,11 +9770,8 @@ >>>> >>>> switch (ConvTy) { >>>> case Compatible: >>>> - DiagnoseAssignmentEnum(DstType, SrcType, SrcExpr); >>>> - >>>> - // XXX here with forced compatible cast >>>> - >>>> - return false; >>>> + DiagnoseAssignmentEnum(DstType, SrcType, SrcExpr); >>>> + return false; >>>> >>>> case PointerToInt: >>>> DiagKind = diag::ext_typecheck_convert_pointer_int; >>>> @@ -9857,7 +9854,6 @@ >>>> DiagKind = diag::err_arc_weak_unavailable_assign; >>>> break; >>>> case Incompatible: >>>> - // XXX here >>>> DiagKind = diag::err_typecheck_convert_incompatible; >>>> ConvHints.tryToFixConversion(SrcExpr, SrcType, DstType, *this); >>>> MayHaveConvFixit = true; >>>> >>>> Modified: cfe/trunk/runtime/compiler-rt/Makefile >>>> URL: >>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/runtime/compiler-rt/Makefile?rev=165988&r1=165987&r2=165988&view=diff >>>> ============================================================================== >>>> --- cfe/trunk/runtime/compiler-rt/Makefile (original) >>>> +++ cfe/trunk/runtime/compiler-rt/Makefile Mon Oct 15 17:23:53 2012 >>>> @@ -74,9 +74,9 @@ >>>> ifeq ($(OS),Darwin) >>>> RuntimeDirs += darwin >>>> RuntimeLibrary.darwin.Configs := \ >>>> - eprintf.a 10.4.a osx.a cc_kext.a \ >>>> + eprintf.a 10.4.a osx.a ios.a cc_kext.a cc_kext_ios5.a \ >>>> asan_osx.a asan_osx_dynamic.dylib \ >>>> - profile_osx.a >>>> + profile_osx.a profile_ios.a >>>> endif >>>> >>>> # On Linux, include a library which has all the runtime functions. >>>> >>>> Copied: cfe/trunk/test/CodeGenObjC/optimized-setter-ios-device.m (from >>>> r165977, cfe/trunk/test/CodeGenObjC/optimized-setter.m) >>>> URL: >>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/optimized-setter-ios-device.m?p2=cfe/trunk/test/CodeGenObjC/optimized-setter-ios-device.m&p1=cfe/trunk/test/CodeGenObjC/optimized-setter.m&r1=165977&r2=165988&rev=165988&view=diff >>>> ============================================================================== >>>> --- cfe/trunk/test/CodeGenObjC/optimized-setter.m (original) >>>> +++ cfe/trunk/test/CodeGenObjC/optimized-setter-ios-device.m Mon Oct 15 >>>> 17:23:53 2012 >>>> @@ -1,5 +1,5 @@ >>>> -// RUN: %clang_cc1 %s -emit-llvm -triple x86_64-apple-macosx10.8.0 -o - | >>>> FileCheck %s >>>> -// rdar://10179974 >>>> +// RUN: %clang_cc1 %s -emit-llvm -fobjc-runtime=ios-6.0.0 -triple >>>> thumbv7-apple-ios6.0.0 -o - | FileCheck %s >>>> +// rdar://11915017 >>>> >>>> @interface I >>>> // void objc_setProperty_nonatomic(id self, SEL _cmd, id newValue, >>>> ptrdiff_t offset); >>>> @@ -26,8 +26,8 @@ >>>> @synthesize atomicPropertyCopy; >>>> @end >>>> >>>> -// CHECK: call void @objc_setProperty_nonatomic >>>> -// CHECK: call void @objc_setProperty_nonatomic_copy >>>> -// CHECK: call void @objc_setProperty_atomic >>>> -// CHECK: call void @objc_setProperty_atomic_copy >>>> +// CHECK: call arm_aapcscc void @objc_setProperty_nonatomic >>>> +// CHECK: call arm_aapcscc void @objc_setProperty_nonatomic_copy >>>> +// CHECK: call arm_aapcscc void @objc_setProperty_atomic >>>> +// CHECK: call arm_aapcscc void @objc_setProperty_atomic_copy >>>> >>>> >>>> Modified: cfe/trunk/test/CodeGenObjC/optimized-setter.m >>>> URL: >>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/optimized-setter.m?rev=165988&r1=165987&r2=165988&view=diff >>>> ============================================================================== >>>> --- cfe/trunk/test/CodeGenObjC/optimized-setter.m (original) >>>> +++ cfe/trunk/test/CodeGenObjC/optimized-setter.m Mon Oct 15 17:23:53 2012 >>>> @@ -1,4 +1,5 @@ >>>> -// RUN: %clang_cc1 %s -emit-llvm -triple x86_64-apple-macosx10.8.0 -o - | >>>> FileCheck %s >>>> +// RUN: %clang_cc1 %s -emit-llvm -fobjc-runtime=macosx-10.8 -triple >>>> x86_64-apple-macosx10.8.0 -o - | FileCheck %s >>>> +// RUN: %clang_cc1 %s -emit-llvm -fobjc-runtime=ios-6.0.0 -triple >>>> x86_64-apple-ios6.0.0 -o - | FileCheck %s >>>> // rdar://10179974 >>>> >>>> @interface I >>>> >>>> Copied: cfe/trunk/test/CodeGenObjC/unoptimized-setter.m (from r165977, >>>> cfe/trunk/test/CodeGenObjC/optimized-setter.m) >>>> URL: >>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/unoptimized-setter.m?p2=cfe/trunk/test/CodeGenObjC/unoptimized-setter.m&p1=cfe/trunk/test/CodeGenObjC/optimized-setter.m&r1=165977&r2=165988&rev=165988&view=diff >>>> ============================================================================== >>>> --- cfe/trunk/test/CodeGenObjC/optimized-setter.m (original) >>>> +++ cfe/trunk/test/CodeGenObjC/unoptimized-setter.m Mon Oct 15 17:23:53 >>>> 2012 >>>> @@ -1,5 +1,5 @@ >>>> -// RUN: %clang_cc1 %s -emit-llvm -triple x86_64-apple-macosx10.8.0 -o - | >>>> FileCheck %s >>>> -// rdar://10179974 >>>> +// RUN: %clang_cc1 %s -emit-llvm -fobjc-runtime=macosx-10.6.0 -triple >>>> x86_64-apple-macosx10.6.0 -o - | FileCheck %s >>>> +// rdar://11858187 >>>> >>>> @interface I >>>> // void objc_setProperty_nonatomic(id self, SEL _cmd, id newValue, >>>> ptrdiff_t offset); >>>> @@ -26,8 +26,7 @@ >>>> @synthesize atomicPropertyCopy; >>>> @end >>>> >>>> -// CHECK: call void @objc_setProperty_nonatomic >>>> -// CHECK: call void @objc_setProperty_nonatomic_copy >>>> -// CHECK: call void @objc_setProperty_atomic >>>> -// CHECK: call void @objc_setProperty_atomic_copy >>>> - >>>> +// CHECK-NOT: call void @objc_setProperty_nonatomic >>>> +// CHECK-NOT: call void @objc_setProperty_nonatomic_copy >>>> +// CHECK-NOT: call void @objc_setProperty_atomic >>>> +// CHECK-NOT: call void @objc_setProperty_atomic_copy >>>> >>>> Modified: cfe/trunk/test/Driver/darwin-ld.c >>>> URL: >>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/darwin-ld.c?rev=165988&r1=165987&r2=165988&view=diff >>>> ============================================================================== >>>> --- cfe/trunk/test/Driver/darwin-ld.c (original) >>>> +++ cfe/trunk/test/Driver/darwin-ld.c Mon Oct 15 17:23:53 2012 >>>> @@ -122,6 +122,10 @@ >>>> // RUN: FileCheck -check-prefix=LINK_NO_CRT1 %s < %t.log >>>> // LINK_NO_CRT1-NOT: crt >>>> >>>> +// RUN: %clang -target armv7-apple-ios6.0 -miphoneos-version-min=6.0 -### >>>> %t.o 2> %t.log >>>> +// RUN: FileCheck -check-prefix=LINK_NO_IOS_CRT1 %s < %t.log >>>> +// LINK_NO_IOS_CRT1-NOT: crt >>>> + >>>> // RUN: %clang -target i386-apple-darwin12 -pg -### %t.o 2> %t.log >>>> // RUN: FileCheck -check-prefix=LINK_PG %s < %t.log >>>> // LINK_PG: -lgcrt1.o >>>> >>>> Modified: cfe/trunk/test/Driver/pic.c >>>> URL: >>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/pic.c?rev=165988&r1=165987&r2=165988&view=diff >>>> ============================================================================== >>>> --- cfe/trunk/test/Driver/pic.c (original) >>>> +++ cfe/trunk/test/Driver/pic.c Mon Oct 15 17:23:53 2012 >>>> @@ -93,3 +93,13 @@ >>>> // RUN: | FileCheck %s --check-prefix=CHECK-DYNAMIC-NO-PIC1 >>>> // RUN: %clang -c %s -target i386-apple-darwin -mdynamic-no-pic -fPIC -### >>>> 2>&1 \ >>>> // RUN: | FileCheck %s --check-prefix=CHECK-DYNAMIC-NO-PIC2 >>>> + >>>> +// Checks for ARM >>>> +// RUN: %clang -c %s -target armv7-apple-ios -fapple-kext >>>> -miphoneos-version-min=6.0.0 -### 2>&1 \ >>>> +// RUN: | FileCheck %s --check-prefix=CHECK-PIC2 >>>> +// RUN: %clang -c %s -target armv7-apple-ios -mkernel >>>> -miphoneos-version-min=6.0.0 -### 2>&1 \ >>>> +// RUN: | FileCheck %s --check-prefix=CHECK-PIC2 >>>> +// RUN: %clang -c %s -target armv7-apple-ios -fapple-kext >>>> -miphoneos-version-min=5.0.0 -### 2>&1 \ >>>> +// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC >>>> +// RUN: %clang -c %s -target armv7-apple-ios -fapple-kext >>>> -miphoneos-version-min=6.0.0 -static -### 2>&1 \ >>>> +// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC >>>> >>>> >>>> _______________________________________________ >>>> cfe-commits mailing list >>>> [email protected] >>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
