r302572 - Suppress all uses of LLVM_END_WITH_NULL. NFC.

Mikael Holmén via cfe-commits cfe-commits at lists.llvm.org
Wed May 10 00:37:58 PDT 2017


Hi,

This commit gives a warning with clang 3.6:

In file included from 
../tools/clang/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp:17:
../tools/clang/lib/StaticAnalyzer/Checkers/SelectorExtras.h:23:40: 
error: braces around scalar initializer [-Werror]
   SmallVector<IdentifierInfo *, 10> II{{&Ctx.Idents.get(IIs)...}};
                                        ^~~~~~~~~~~~~~~~~~~~~~~~~
../tools/clang/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp:236:11: 
note: in instantiation of function template specialization 
'clang::ento::getKeywordSelector<const char>' requested here
           getKeywordSelector(Ctx, "caseInsensitiveCompare"),
           ^
1 error generated.

With 3.9 and 4.0 I don't see the warning. Is this a bug in 3.6 or what?

Are we supposed to not use an old clang as 3.6 to compile?

Regards,
Mikael


On 05/09/2017 09:31 PM, Serge Guelton via cfe-commits wrote:
> Author: serge_sans_paille
> Date: Tue May  9 14:31:30 2017
> New Revision: 302572
>
> URL: http://llvm.org/viewvc/llvm-project?rev=302572&view=rev
> Log:
> Suppress all uses of LLVM_END_WITH_NULL. NFC.
>
> Use variadic templates instead of relying on <cstdarg> + sentinel.
>
> This enforces better type checking and makes code more readable.
>
> Differential revision: https://reviews.llvm.org/D32550
>
> Modified:
>     cfe/trunk/lib/CodeGen/CGBlocks.cpp
>     cfe/trunk/lib/CodeGen/CGBuiltin.cpp
>     cfe/trunk/lib/CodeGen/CGCUDANV.cpp
>     cfe/trunk/lib/CodeGen/CGCleanup.cpp
>     cfe/trunk/lib/CodeGen/CGException.cpp
>     cfe/trunk/lib/CodeGen/CGExpr.cpp
>     cfe/trunk/lib/CodeGen/CGExprConstant.cpp
>     cfe/trunk/lib/CodeGen/CGObjCGNU.cpp
>     cfe/trunk/lib/CodeGen/CGObjCMac.cpp
>     cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp
>     cfe/trunk/lib/CodeGen/CodeGenModule.cpp
>     cfe/trunk/lib/CodeGen/CodeGenTypes.cpp
>     cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp
>     cfe/trunk/lib/CodeGen/TargetInfo.cpp
>     cfe/trunk/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp
>     cfe/trunk/lib/StaticAnalyzer/Checkers/NoReturnFunctionChecker.cpp
>     cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp
>     cfe/trunk/lib/StaticAnalyzer/Checkers/SelectorExtras.h
>
> Modified: cfe/trunk/lib/CodeGen/CGBlocks.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBlocks.cpp?rev=302572&r1=302571&r2=302572&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGBlocks.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGBlocks.cpp Tue May  9 14:31:30 2017
> @@ -961,9 +961,8 @@ llvm::Type *CodeGenModule::getBlockDescr
>    //   const char *signature;   // the block signature
>    //   const char *layout;      // reserved
>    // };
> -  BlockDescriptorType =
> -    llvm::StructType::create("struct.__block_descriptor",
> -                             UnsignedLongTy, UnsignedLongTy, nullptr);
> +  BlockDescriptorType = llvm::StructType::create(
> +      "struct.__block_descriptor", UnsignedLongTy, UnsignedLongTy);
>
>    // Now form a pointer to that.
>    unsigned AddrSpace = 0;
> @@ -987,9 +986,8 @@ llvm::Type *CodeGenModule::getGenericBlo
>    //   struct __block_descriptor *__descriptor;
>    // };
>    GenericBlockLiteralType =
> -    llvm::StructType::create("struct.__block_literal_generic",
> -                             VoidPtrTy, IntTy, IntTy, VoidPtrTy,
> -                             BlockDescPtrTy, nullptr);
> +      llvm::StructType::create("struct.__block_literal_generic", VoidPtrTy,
> +                               IntTy, IntTy, VoidPtrTy, BlockDescPtrTy);
>
>    return GenericBlockLiteralType;
>  }
>
> Modified: cfe/trunk/lib/CodeGen/CGBuiltin.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGBuiltin.cpp?rev=302572&r1=302571&r2=302572&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGBuiltin.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGBuiltin.cpp Tue May  9 14:31:30 2017
> @@ -4571,7 +4571,7 @@ Value *CodeGenFunction::EmitARMBuiltinEx
>      Function *F = CGM.getIntrinsic(BuiltinID == ARM::BI__builtin_arm_stlex
>                                         ? Intrinsic::arm_stlexd
>                                         : Intrinsic::arm_strexd);
> -    llvm::Type *STy = llvm::StructType::get(Int32Ty, Int32Ty, nullptr);
> +    llvm::Type *STy = llvm::StructType::get(Int32Ty, Int32Ty);
>
>      Address Tmp = CreateMemTemp(E->getArg(0)->getType());
>      Value *Val = EmitScalarExpr(E->getArg(0));
> @@ -5401,7 +5401,7 @@ Value *CodeGenFunction::EmitAArch64Built
>      Function *F = CGM.getIntrinsic(BuiltinID == AArch64::BI__builtin_arm_stlex
>                                         ? Intrinsic::aarch64_stlxp
>                                         : Intrinsic::aarch64_stxp);
> -    llvm::Type *STy = llvm::StructType::get(Int64Ty, Int64Ty, nullptr);
> +    llvm::Type *STy = llvm::StructType::get(Int64Ty, Int64Ty);
>
>      Address Tmp = CreateMemTemp(E->getArg(0)->getType());
>      EmitAnyExprToMem(E->getArg(0), Tmp, Qualifiers(), /*init*/ true);
> @@ -7373,8 +7373,8 @@ Value *CodeGenFunction::EmitX86BuiltinEx
>      // unsigned int __cpu_type;
>      // unsigned int __cpu_subtype;
>      // unsigned int __cpu_features[1];
> -    llvm::Type *STy = llvm::StructType::get(
> -        Int32Ty, Int32Ty, Int32Ty, llvm::ArrayType::get(Int32Ty, 1), nullptr);
> +    llvm::Type *STy = llvm::StructType::get(Int32Ty, Int32Ty, Int32Ty,
> +                                            llvm::ArrayType::get(Int32Ty, 1));
>
>      // Grab the global __cpu_model.
>      llvm::Constant *CpuModel = CGM.CreateRuntimeVariable(STy, "__cpu_model");
>
> Modified: cfe/trunk/lib/CodeGen/CGCUDANV.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGCUDANV.cpp?rev=302572&r1=302571&r2=302572&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGCUDANV.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGCUDANV.cpp Tue May  9 14:31:30 2017
> @@ -265,7 +265,7 @@ llvm::Function *CGNVCUDARuntime::makeMod
>        "__cudaRegisterFatBinary");
>    // struct { int magic, int version, void * gpu_binary, void * dont_care };
>    llvm::StructType *FatbinWrapperTy =
> -      llvm::StructType::get(IntTy, IntTy, VoidPtrTy, VoidPtrTy, nullptr);
> +      llvm::StructType::get(IntTy, IntTy, VoidPtrTy, VoidPtrTy);
>
>    llvm::Function *ModuleCtorFunc = llvm::Function::Create(
>        llvm::FunctionType::get(VoidTy, VoidPtrTy, false),
>
> Modified: cfe/trunk/lib/CodeGen/CGCleanup.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGCleanup.cpp?rev=302572&r1=302571&r2=302572&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGCleanup.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGCleanup.cpp Tue May  9 14:31:30 2017
> @@ -51,8 +51,7 @@ DominatingValue<RValue>::saved_type::sav
>    if (rv.isComplex()) {
>      CodeGenFunction::ComplexPairTy V = rv.getComplexVal();
>      llvm::Type *ComplexTy =
> -      llvm::StructType::get(V.first->getType(), V.second->getType(),
> -                            (void*) nullptr);
> +        llvm::StructType::get(V.first->getType(), V.second->getType());
>      Address addr = CGF.CreateDefaultAlignTempAlloca(ComplexTy, "saved-complex");
>      CGF.Builder.CreateStore(V.first,
>                              CGF.Builder.CreateStructGEP(addr, 0, CharUnits()));
>
> Modified: cfe/trunk/lib/CodeGen/CGException.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGException.cpp?rev=302572&r1=302571&r2=302572&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGException.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGException.cpp Tue May  9 14:31:30 2017
> @@ -765,8 +765,8 @@ llvm::BasicBlock *CodeGenFunction::EmitL
>    llvm::BasicBlock *lpad = createBasicBlock("lpad");
>    EmitBlock(lpad);
>
> -  llvm::LandingPadInst *LPadInst = Builder.CreateLandingPad(
> -      llvm::StructType::get(Int8PtrTy, Int32Ty, nullptr), 0);
> +  llvm::LandingPadInst *LPadInst =
> +      Builder.CreateLandingPad(llvm::StructType::get(Int8PtrTy, Int32Ty), 0);
>
>    llvm::Value *LPadExn = Builder.CreateExtractValue(LPadInst, 0);
>    Builder.CreateStore(LPadExn, getExceptionSlot());
> @@ -1310,8 +1310,8 @@ llvm::BasicBlock *CodeGenFunction::getTe
>    if (!CurFn->hasPersonalityFn())
>      CurFn->setPersonalityFn(getOpaquePersonalityFn(CGM, Personality));
>
> -  llvm::LandingPadInst *LPadInst = Builder.CreateLandingPad(
> -      llvm::StructType::get(Int8PtrTy, Int32Ty, nullptr), 0);
> +  llvm::LandingPadInst *LPadInst =
> +      Builder.CreateLandingPad(llvm::StructType::get(Int8PtrTy, Int32Ty), 0);
>    LPadInst->addClause(getCatchAllValue(*this));
>
>    llvm::Value *Exn = nullptr;
> @@ -1387,8 +1387,7 @@ llvm::BasicBlock *CodeGenFunction::getEH
>    llvm::Value *Exn = getExceptionFromSlot();
>    llvm::Value *Sel = getSelectorFromSlot();
>
> -  llvm::Type *LPadType = llvm::StructType::get(Exn->getType(),
> -                                               Sel->getType(), nullptr);
> +  llvm::Type *LPadType = llvm::StructType::get(Exn->getType(), Sel->getType());
>    llvm::Value *LPadVal = llvm::UndefValue::get(LPadType);
>    LPadVal = Builder.CreateInsertValue(LPadVal, Exn, 0, "lpad.val");
>    LPadVal = Builder.CreateInsertValue(LPadVal, Sel, 1, "lpad.val");
> @@ -1747,7 +1746,7 @@ void CodeGenFunction::EmitSEHExceptionCo
>    // };
>    // int exceptioncode = exception_pointers->ExceptionRecord->ExceptionCode;
>    llvm::Type *RecordTy = CGM.Int32Ty->getPointerTo();
> -  llvm::Type *PtrsTy = llvm::StructType::get(RecordTy, CGM.VoidPtrTy, nullptr);
> +  llvm::Type *PtrsTy = llvm::StructType::get(RecordTy, CGM.VoidPtrTy);
>    llvm::Value *Ptrs = Builder.CreateBitCast(SEHInfo, PtrsTy->getPointerTo());
>    llvm::Value *Rec = Builder.CreateStructGEP(PtrsTy, Ptrs, 0);
>    Rec = Builder.CreateAlignedLoad(Rec, getPointerAlign());
>
> Modified: cfe/trunk/lib/CodeGen/CGExpr.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExpr.cpp?rev=302572&r1=302571&r2=302572&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGExpr.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGExpr.cpp Tue May  9 14:31:30 2017
> @@ -2859,9 +2859,9 @@ void CodeGenFunction::EmitCfiCheckFail()
>    EmitTrapCheck(DataIsNotNullPtr);
>
>    llvm::StructType *SourceLocationTy =
> -      llvm::StructType::get(VoidPtrTy, Int32Ty, Int32Ty, nullptr);
> +      llvm::StructType::get(VoidPtrTy, Int32Ty, Int32Ty);
>    llvm::StructType *CfiCheckFailDataTy =
> -      llvm::StructType::get(Int8Ty, SourceLocationTy, VoidPtrTy, nullptr);
> +      llvm::StructType::get(Int8Ty, SourceLocationTy, VoidPtrTy);
>
>    llvm::Value *V = Builder.CreateConstGEP2_32(
>        CfiCheckFailDataTy,
>
> Modified: cfe/trunk/lib/CodeGen/CGExprConstant.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprConstant.cpp?rev=302572&r1=302571&r2=302572&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGExprConstant.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGExprConstant.cpp Tue May  9 14:31:30 2017
> @@ -1361,9 +1361,8 @@ llvm::Constant *CodeGenModule::EmitConst
>                                          Value.getComplexIntImag());
>
>      // FIXME: the target may want to specify that this is packed.
> -    llvm::StructType *STy = llvm::StructType::get(Complex[0]->getType(),
> -                                                  Complex[1]->getType(),
> -                                                  nullptr);
> +    llvm::StructType *STy =
> +        llvm::StructType::get(Complex[0]->getType(), Complex[1]->getType());
>      return llvm::ConstantStruct::get(STy, Complex);
>    }
>    case APValue::Float: {
> @@ -1384,9 +1383,8 @@ llvm::Constant *CodeGenModule::EmitConst
>                                         Value.getComplexFloatImag());
>
>      // FIXME: the target may want to specify that this is packed.
> -    llvm::StructType *STy = llvm::StructType::get(Complex[0]->getType(),
> -                                                  Complex[1]->getType(),
> -                                                  nullptr);
> +    llvm::StructType *STy =
> +        llvm::StructType::get(Complex[0]->getType(), Complex[1]->getType());
>      return llvm::ConstantStruct::get(STy, Complex);
>    }
>    case APValue::Vector: {
>
> Modified: cfe/trunk/lib/CodeGen/CGObjCGNU.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjCGNU.cpp?rev=302572&r1=302571&r2=302572&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGObjCGNU.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGObjCGNU.cpp Tue May  9 14:31:30 2017
> @@ -34,7 +34,6 @@
>  #include "llvm/IR/LLVMContext.h"
>  #include "llvm/IR/Module.h"
>  #include "llvm/Support/Compiler.h"
> -#include <cstdarg>
>
>  using namespace clang;
>  using namespace CodeGen;
> @@ -58,17 +57,13 @@ public:
>
>    /// Initialises the lazy function with the name, return type, and the types
>    /// of the arguments.
> -  LLVM_END_WITH_NULL
> -  void init(CodeGenModule *Mod, const char *name, llvm::Type *RetTy, ...) {
> +  template <typename... Tys>
> +  void init(CodeGenModule *Mod, const char *name, llvm::Type *RetTy,
> +            Tys *... Types) {
>      CGM = Mod;
>      FunctionName = name;
>      Function = nullptr;
> -    std::vector<llvm::Type *> ArgTys;
> -    va_list Args;
> -    va_start(Args, RetTy);
> -    while (llvm::Type *ArgTy = va_arg(Args, llvm::Type *))
> -      ArgTys.push_back(ArgTy);
> -    va_end(Args);
> +    std::vector<llvm::Type *> ArgTys{{Types...}};
>      FTy = llvm::FunctionType::get(RetTy, ArgTys, false);
>    }
>
> @@ -603,11 +598,10 @@ protected:
>  public:
>    CGObjCGCC(CodeGenModule &Mod) : CGObjCGNU(Mod, 8, 2) {
>      // IMP objc_msg_lookup(id, SEL);
> -    MsgLookupFn.init(&CGM, "objc_msg_lookup", IMPTy, IdTy, SelectorTy,
> -                     nullptr);
> +    MsgLookupFn.init(&CGM, "objc_msg_lookup", IMPTy, IdTy, SelectorTy);
>      // IMP objc_msg_lookup_super(struct objc_super*, SEL);
>      MsgLookupSuperFn.init(&CGM, "objc_msg_lookup_super", IMPTy,
> -                          PtrToObjCSuperTy, SelectorTy, nullptr);
> +                          PtrToObjCSuperTy, SelectorTy);
>    }
>  };
>
> @@ -702,52 +696,51 @@ class CGObjCGNUstep : public CGObjCGNU {
>      CGObjCGNUstep(CodeGenModule &Mod) : CGObjCGNU(Mod, 9, 3) {
>        const ObjCRuntime &R = CGM.getLangOpts().ObjCRuntime;
>
> -      llvm::StructType *SlotStructTy = llvm::StructType::get(PtrTy,
> -          PtrTy, PtrTy, IntTy, IMPTy, nullptr);
> +      llvm::StructType *SlotStructTy =
> +          llvm::StructType::get(PtrTy, PtrTy, PtrTy, IntTy, IMPTy);
>        SlotTy = llvm::PointerType::getUnqual(SlotStructTy);
>        // Slot_t objc_msg_lookup_sender(id *receiver, SEL selector, id sender);
>        SlotLookupFn.init(&CGM, "objc_msg_lookup_sender", SlotTy, PtrToIdTy,
> -          SelectorTy, IdTy, nullptr);
> +                        SelectorTy, IdTy);
>        // Slot_t objc_msg_lookup_super(struct objc_super*, SEL);
>        SlotLookupSuperFn.init(&CGM, "objc_slot_lookup_super", SlotTy,
> -              PtrToObjCSuperTy, SelectorTy, nullptr);
> +                             PtrToObjCSuperTy, SelectorTy);
>        // If we're in ObjC++ mode, then we want to make
>        if (CGM.getLangOpts().CPlusPlus) {
>          llvm::Type *VoidTy = llvm::Type::getVoidTy(VMContext);
>          // void *__cxa_begin_catch(void *e)
> -        EnterCatchFn.init(&CGM, "__cxa_begin_catch", PtrTy, PtrTy, nullptr);
> +        EnterCatchFn.init(&CGM, "__cxa_begin_catch", PtrTy, PtrTy);
>          // void __cxa_end_catch(void)
> -        ExitCatchFn.init(&CGM, "__cxa_end_catch", VoidTy, nullptr);
> +        ExitCatchFn.init(&CGM, "__cxa_end_catch", VoidTy);
>          // void _Unwind_Resume_or_Rethrow(void*)
>          ExceptionReThrowFn.init(&CGM, "_Unwind_Resume_or_Rethrow", VoidTy,
> -            PtrTy, nullptr);
> +                                PtrTy);
>        } else if (R.getVersion() >= VersionTuple(1, 7)) {
>          llvm::Type *VoidTy = llvm::Type::getVoidTy(VMContext);
>          // id objc_begin_catch(void *e)
> -        EnterCatchFn.init(&CGM, "objc_begin_catch", IdTy, PtrTy, nullptr);
> +        EnterCatchFn.init(&CGM, "objc_begin_catch", IdTy, PtrTy);
>          // void objc_end_catch(void)
> -        ExitCatchFn.init(&CGM, "objc_end_catch", VoidTy, nullptr);
> +        ExitCatchFn.init(&CGM, "objc_end_catch", VoidTy);
>          // void _Unwind_Resume_or_Rethrow(void*)
> -        ExceptionReThrowFn.init(&CGM, "objc_exception_rethrow", VoidTy,
> -            PtrTy, nullptr);
> +        ExceptionReThrowFn.init(&CGM, "objc_exception_rethrow", VoidTy, PtrTy);
>        }
>        llvm::Type *VoidTy = llvm::Type::getVoidTy(VMContext);
>        SetPropertyAtomic.init(&CGM, "objc_setProperty_atomic", VoidTy, IdTy,
> -          SelectorTy, IdTy, PtrDiffTy, nullptr);
> +                             SelectorTy, IdTy, PtrDiffTy);
>        SetPropertyAtomicCopy.init(&CGM, "objc_setProperty_atomic_copy", VoidTy,
> -          IdTy, SelectorTy, IdTy, PtrDiffTy, nullptr);
> +                                 IdTy, SelectorTy, IdTy, PtrDiffTy);
>        SetPropertyNonAtomic.init(&CGM, "objc_setProperty_nonatomic", VoidTy,
> -          IdTy, SelectorTy, IdTy, PtrDiffTy, nullptr);
> +                                IdTy, SelectorTy, IdTy, PtrDiffTy);
>        SetPropertyNonAtomicCopy.init(&CGM, "objc_setProperty_nonatomic_copy",
> -          VoidTy, IdTy, SelectorTy, IdTy, PtrDiffTy, nullptr);
> +                                    VoidTy, IdTy, SelectorTy, IdTy, PtrDiffTy);
>        // void objc_setCppObjectAtomic(void *dest, const void *src, void
>        // *helper);
>        CxxAtomicObjectSetFn.init(&CGM, "objc_setCppObjectAtomic", VoidTy, PtrTy,
> -          PtrTy, PtrTy, nullptr);
> +                                PtrTy, PtrTy);
>        // void objc_getCppObjectAtomic(void *dest, const void *src, void
>        // *helper);
>        CxxAtomicObjectGetFn.init(&CGM, "objc_getCppObjectAtomic", VoidTy, PtrTy,
> -          PtrTy, PtrTy, nullptr);
> +                                PtrTy, PtrTy);
>      }
>
>      llvm::Constant *GetCppAtomicObjectGetFunction() override {
> @@ -849,14 +842,14 @@ protected:
>  public:
>    CGObjCObjFW(CodeGenModule &Mod): CGObjCGNU(Mod, 9, 3) {
>      // IMP objc_msg_lookup(id, SEL);
> -    MsgLookupFn.init(&CGM, "objc_msg_lookup", IMPTy, IdTy, SelectorTy, nullptr);
> +    MsgLookupFn.init(&CGM, "objc_msg_lookup", IMPTy, IdTy, SelectorTy);
>      MsgLookupFnSRet.init(&CGM, "objc_msg_lookup_stret", IMPTy, IdTy,
> -                         SelectorTy, nullptr);
> +                         SelectorTy);
>      // IMP objc_msg_lookup_super(struct objc_super*, SEL);
>      MsgLookupSuperFn.init(&CGM, "objc_msg_lookup_super", IMPTy,
> -                          PtrToObjCSuperTy, SelectorTy, nullptr);
> +                          PtrToObjCSuperTy, SelectorTy);
>      MsgLookupSuperFnSRet.init(&CGM, "objc_msg_lookup_super_stret", IMPTy,
> -                              PtrToObjCSuperTy, SelectorTy, nullptr);
> +                              PtrToObjCSuperTy, SelectorTy);
>    }
>  };
>  } // end anonymous namespace
> @@ -945,35 +938,34 @@ CGObjCGNU::CGObjCGNU(CodeGenModule &cgm,
>    }
>    PtrToIdTy = llvm::PointerType::getUnqual(IdTy);
>
> -  ObjCSuperTy = llvm::StructType::get(IdTy, IdTy, nullptr);
> +  ObjCSuperTy = llvm::StructType::get(IdTy, IdTy);
>    PtrToObjCSuperTy = llvm::PointerType::getUnqual(ObjCSuperTy);
>
>    llvm::Type *VoidTy = llvm::Type::getVoidTy(VMContext);
>
>    // void objc_exception_throw(id);
> -  ExceptionThrowFn.init(&CGM, "objc_exception_throw", VoidTy, IdTy, nullptr);
> -  ExceptionReThrowFn.init(&CGM, "objc_exception_throw", VoidTy, IdTy, nullptr);
> +  ExceptionThrowFn.init(&CGM, "objc_exception_throw", VoidTy, IdTy);
> +  ExceptionReThrowFn.init(&CGM, "objc_exception_throw", VoidTy, IdTy);
>    // int objc_sync_enter(id);
> -  SyncEnterFn.init(&CGM, "objc_sync_enter", IntTy, IdTy, nullptr);
> +  SyncEnterFn.init(&CGM, "objc_sync_enter", IntTy, IdTy);
>    // int objc_sync_exit(id);
> -  SyncExitFn.init(&CGM, "objc_sync_exit", IntTy, IdTy, nullptr);
> +  SyncExitFn.init(&CGM, "objc_sync_exit", IntTy, IdTy);
>
>    // void objc_enumerationMutation (id)
> -  EnumerationMutationFn.init(&CGM, "objc_enumerationMutation", VoidTy,
> -      IdTy, nullptr);
> +  EnumerationMutationFn.init(&CGM, "objc_enumerationMutation", VoidTy, IdTy);
>
>    // id objc_getProperty(id, SEL, ptrdiff_t, BOOL)
>    GetPropertyFn.init(&CGM, "objc_getProperty", IdTy, IdTy, SelectorTy,
> -      PtrDiffTy, BoolTy, nullptr);
> +                     PtrDiffTy, BoolTy);
>    // void objc_setProperty(id, SEL, ptrdiff_t, id, BOOL, BOOL)
>    SetPropertyFn.init(&CGM, "objc_setProperty", VoidTy, IdTy, SelectorTy,
> -      PtrDiffTy, IdTy, BoolTy, BoolTy, nullptr);
> +                     PtrDiffTy, IdTy, BoolTy, BoolTy);
>    // void objc_setPropertyStruct(void*, void*, ptrdiff_t, BOOL, BOOL)
> -  GetStructPropertyFn.init(&CGM, "objc_getPropertyStruct", VoidTy, PtrTy, PtrTy,
> -      PtrDiffTy, BoolTy, BoolTy, nullptr);
> +  GetStructPropertyFn.init(&CGM, "objc_getPropertyStruct", VoidTy, PtrTy, PtrTy,
> +                           PtrDiffTy, BoolTy, BoolTy);
>    // void objc_setPropertyStruct(void*, void*, ptrdiff_t, BOOL, BOOL)
> -  SetStructPropertyFn.init(&CGM, "objc_setPropertyStruct", VoidTy, PtrTy, PtrTy,
> -      PtrDiffTy, BoolTy, BoolTy, nullptr);
> +  SetStructPropertyFn.init(&CGM, "objc_setPropertyStruct", VoidTy, PtrTy, PtrTy,
> +                           PtrDiffTy, BoolTy, BoolTy);
>
>    // IMP type
>    llvm::Type *IMPArgs[] = { IdTy, SelectorTy };
> @@ -997,21 +989,19 @@ CGObjCGNU::CGObjCGNU(CodeGenModule &cgm,
>      // Get functions needed in GC mode
>
>      // id objc_assign_ivar(id, id, ptrdiff_t);
> -    IvarAssignFn.init(&CGM, "objc_assign_ivar", IdTy, IdTy, IdTy, PtrDiffTy,
> -        nullptr);
> +    IvarAssignFn.init(&CGM, "objc_assign_ivar", IdTy, IdTy, IdTy, PtrDiffTy);
>      // id objc_assign_strongCast (id, id*)
>      StrongCastAssignFn.init(&CGM, "objc_assign_strongCast", IdTy, IdTy,
> -        PtrToIdTy, nullptr);
> +                            PtrToIdTy);
>      // id objc_assign_global(id, id*);
> -    GlobalAssignFn.init(&CGM, "objc_assign_global", IdTy, IdTy, PtrToIdTy,
> -        nullptr);
> +    GlobalAssignFn.init(&CGM, "objc_assign_global", IdTy, IdTy, PtrToIdTy);
>      // id objc_assign_weak(id, id*);
> -    WeakAssignFn.init(&CGM, "objc_assign_weak", IdTy, IdTy, PtrToIdTy, nullptr);
> +    WeakAssignFn.init(&CGM, "objc_assign_weak", IdTy, IdTy, PtrToIdTy);
>      // id objc_read_weak(id*);
> -    WeakReadFn.init(&CGM, "objc_read_weak", IdTy, PtrToIdTy, nullptr);
> +    WeakReadFn.init(&CGM, "objc_read_weak", IdTy, PtrToIdTy);
>      // void *objc_memmove_collectable(void*, void *, size_t);
>      MemMoveFn.init(&CGM, "objc_memmove_collectable", PtrTy, PtrTy, PtrTy,
> -        SizeTy, nullptr);
> +                   SizeTy);
>    }
>  }
>
> @@ -1317,7 +1307,7 @@ CGObjCGNU::GenerateMessageSendSuper(Code
>      }
>    }
>    // Cast the pointer to a simplified version of the class structure
> -  llvm::Type *CastTy = llvm::StructType::get(IdTy, IdTy, nullptr);
> +  llvm::Type *CastTy = llvm::StructType::get(IdTy, IdTy);
>    ReceiverClass = Builder.CreateBitCast(ReceiverClass,
>                                          llvm::PointerType::getUnqual(CastTy));
>    // Get the superclass pointer
> @@ -1326,8 +1316,8 @@ CGObjCGNU::GenerateMessageSendSuper(Code
>    ReceiverClass =
>      Builder.CreateAlignedLoad(ReceiverClass, CGF.getPointerAlign());
>    // Construct the structure used to look up the IMP
> -  llvm::StructType *ObjCSuperTy = llvm::StructType::get(
> -      Receiver->getType(), IdTy, nullptr);
> +  llvm::StructType *ObjCSuperTy =
> +      llvm::StructType::get(Receiver->getType(), IdTy);
>
>    // FIXME: Is this really supposed to be a dynamic alloca?
>    Address ObjCSuper = Address(Builder.CreateAlloca(ObjCSuperTy),
> @@ -1565,11 +1555,8 @@ GenerateIvarList(ArrayRef<llvm::Constant
>    IvarList.addInt(IntTy, (int)IvarNames.size());
>
>    // Get the ivar structure type.
> -  llvm::StructType *ObjCIvarTy = llvm::StructType::get(
> -    PtrToInt8Ty,
> -    PtrToInt8Ty,
> -    IntTy,
> -    nullptr);
> +  llvm::StructType *ObjCIvarTy =
> +      llvm::StructType::get(PtrToInt8Ty, PtrToInt8Ty, IntTy);
>
>    // Array of ivar structures.
>    auto Ivars = IvarList.beginArray(ObjCIvarTy);
> @@ -1611,7 +1598,7 @@ llvm::Constant *CGObjCGNU::GenerateClass
>    // anyway; the classes will still work with the GNU runtime, they will just
>    // be ignored.
>    llvm::StructType *ClassTy = llvm::StructType::get(
> -      PtrToInt8Ty,        // isa
> +      PtrToInt8Ty,        // isa
>        PtrToInt8Ty,        // super_class
>        PtrToInt8Ty,        // name
>        LongTy,             // version
> @@ -1620,18 +1607,18 @@ llvm::Constant *CGObjCGNU::GenerateClass
>        IVars->getType(),   // ivars
>        Methods->getType(), // methods
>        // These are all filled in by the runtime, so we pretend
> -      PtrTy,              // dtable
> -      PtrTy,              // subclass_list
> -      PtrTy,              // sibling_class
> -      PtrTy,              // protocols
> -      PtrTy,              // gc_object_type
> +      PtrTy, // dtable
> +      PtrTy, // subclass_list
> +      PtrTy, // sibling_class
> +      PtrTy, // protocols
> +      PtrTy, // gc_object_type
>        // New ABI:
>        LongTy,                 // abi_version
>        IvarOffsets->getType(), // ivar_offsets
>        Properties->getType(),  // properties
>        IntPtrTy,               // strong_pointers
> -      IntPtrTy,               // weak_pointers
> -      nullptr);
> +      IntPtrTy                // weak_pointers
> +      );
>
>    ConstantInitBuilder Builder(CGM);
>    auto Elements = Builder.beginStruct(ClassTy);
>
> Modified: cfe/trunk/lib/CodeGen/CGObjCMac.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjCMac.cpp?rev=302572&r1=302571&r2=302572&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGObjCMac.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGObjCMac.cpp Tue May  9 14:31:30 2017
> @@ -105,8 +105,8 @@ private:
>    llvm::Constant *getMessageSendFp2retFn() const {
>      llvm::Type *params[] = { ObjectPtrTy, SelectorPtrTy };
>      llvm::Type *longDoubleType = llvm::Type::getX86_FP80Ty(VMContext);
> -    llvm::Type *resultType =
> -      llvm::StructType::get(longDoubleType, longDoubleType, nullptr);
> +    llvm::Type *resultType =
> +        llvm::StructType::get(longDoubleType, longDoubleType);
>
>      return CGM.CreateRuntimeFunction(llvm::FunctionType::get(resultType,
>                                                               params, true),
> @@ -5506,17 +5506,15 @@ ObjCCommonTypesHelper::ObjCCommonTypesHe
>    //   char *name;
>    //   char *attributes;
>    // }
> -  PropertyTy = llvm::StructType::create("struct._prop_t",
> -                                        Int8PtrTy, Int8PtrTy, nullptr);
> +  PropertyTy = llvm::StructType::create("struct._prop_t", Int8PtrTy, Int8PtrTy);
>
>    // struct _prop_list_t {
>    //   uint32_t entsize;      // sizeof(struct _prop_t)
>    //   uint32_t count_of_properties;
>    //   struct _prop_t prop_list[count_of_properties];
>    // }
> -  PropertyListTy =
> -    llvm::StructType::create("struct._prop_list_t", IntTy, IntTy,
> -                             llvm::ArrayType::get(PropertyTy, 0), nullptr);
> +  PropertyListTy = llvm::StructType::create(
> +      "struct._prop_list_t", IntTy, IntTy, llvm::ArrayType::get(PropertyTy, 0));
>    // struct _prop_list_t *
>    PropertyListPtrTy = llvm::PointerType::getUnqual(PropertyListTy);
>
> @@ -5525,9 +5523,8 @@ ObjCCommonTypesHelper::ObjCCommonTypesHe
>    //   char *method_type;
>    //   char *_imp;
>    // }
> -  MethodTy = llvm::StructType::create("struct._objc_method",
> -                                      SelectorPtrTy, Int8PtrTy, Int8PtrTy,
> -                                      nullptr);
> +  MethodTy = llvm::StructType::create("struct._objc_method", SelectorPtrTy,
> +                                      Int8PtrTy, Int8PtrTy);
>
>    // struct _objc_cache *
>    CacheTy = llvm::StructType::create(VMContext, "struct._objc_cache");
> @@ -5540,17 +5537,16 @@ ObjCTypesHelper::ObjCTypesHelper(CodeGen
>    //   SEL name;
>    //   char *types;
>    // }
> -  MethodDescriptionTy =
> -    llvm::StructType::create("struct._objc_method_description",
> -                             SelectorPtrTy, Int8PtrTy, nullptr);
> +  MethodDescriptionTy = llvm::StructType::create(
> +      "struct._objc_method_description", SelectorPtrTy, Int8PtrTy);
>
>    // struct _objc_method_description_list {
>    //   int count;
>    //   struct _objc_method_description[1];
>    // }
> -  MethodDescriptionListTy = llvm::StructType::create(
> -      "struct._objc_method_description_list", IntTy,
> -      llvm::ArrayType::get(MethodDescriptionTy, 0), nullptr);
> +  MethodDescriptionListTy =
> +      llvm::StructType::create("struct._objc_method_description_list", IntTy,
> +                               llvm::ArrayType::get(MethodDescriptionTy, 0));
>
>    // struct _objc_method_description_list *
>    MethodDescriptionListPtrTy =
> @@ -5566,11 +5562,10 @@ ObjCTypesHelper::ObjCTypesHelper(CodeGen
>    //   const char ** extendedMethodTypes;
>    //   struct _objc_property_list *class_properties;
>    // }
> -  ProtocolExtensionTy =
> -    llvm::StructType::create("struct._objc_protocol_extension",
> -                             IntTy, MethodDescriptionListPtrTy,
> -                             MethodDescriptionListPtrTy, PropertyListPtrTy,
> -                             Int8PtrPtrTy, PropertyListPtrTy, nullptr);
> +  ProtocolExtensionTy = llvm::StructType::create(
> +      "struct._objc_protocol_extension", IntTy, MethodDescriptionListPtrTy,
> +      MethodDescriptionListPtrTy, PropertyListPtrTy, Int8PtrPtrTy,
> +      PropertyListPtrTy);
>
>    // struct _objc_protocol_extension *
>    ProtocolExtensionPtrTy = llvm::PointerType::getUnqual(ProtocolExtensionTy);
> @@ -5582,10 +5577,8 @@ ObjCTypesHelper::ObjCTypesHelper(CodeGen
>
>    ProtocolListTy =
>      llvm::StructType::create(VMContext, "struct._objc_protocol_list");
> -  ProtocolListTy->setBody(llvm::PointerType::getUnqual(ProtocolListTy),
> -                          LongTy,
> -                          llvm::ArrayType::get(ProtocolTy, 0),
> -                          nullptr);
> +  ProtocolListTy->setBody(llvm::PointerType::getUnqual(ProtocolListTy), LongTy,
> +                          llvm::ArrayType::get(ProtocolTy, 0));
>
>    // struct _objc_protocol {
>    //   struct _objc_protocol_extension *isa;
> @@ -5596,9 +5589,7 @@ ObjCTypesHelper::ObjCTypesHelper(CodeGen
>    // }
>    ProtocolTy->setBody(ProtocolExtensionPtrTy, Int8PtrTy,
>                        llvm::PointerType::getUnqual(ProtocolListTy),
> -                      MethodDescriptionListPtrTy,
> -                      MethodDescriptionListPtrTy,
> -                      nullptr);
> +                      MethodDescriptionListPtrTy, MethodDescriptionListPtrTy);
>
>    // struct _objc_protocol_list *
>    ProtocolListPtrTy = llvm::PointerType::getUnqual(ProtocolListTy);
> @@ -5612,8 +5603,8 @@ ObjCTypesHelper::ObjCTypesHelper(CodeGen
>    //   char *ivar_type;
>    //   int  ivar_offset;
>    // }
> -  IvarTy = llvm::StructType::create("struct._objc_ivar",
> -                                    Int8PtrTy, Int8PtrTy, IntTy, nullptr);
> +  IvarTy = llvm::StructType::create("struct._objc_ivar", Int8PtrTy, Int8PtrTy,
> +                                    IntTy);
>
>    // struct _objc_ivar_list *
>    IvarListTy =
> @@ -5626,9 +5617,8 @@ ObjCTypesHelper::ObjCTypesHelper(CodeGen
>    MethodListPtrTy = llvm::PointerType::getUnqual(MethodListTy);
>
>    // struct _objc_class_extension *
> -  ClassExtensionTy =
> -    llvm::StructType::create("struct._objc_class_extension",
> -                             IntTy, Int8PtrTy, PropertyListPtrTy, nullptr);
> +  ClassExtensionTy = llvm::StructType::create(
> +      "struct._objc_class_extension", IntTy, Int8PtrTy, PropertyListPtrTy);
>    ClassExtensionPtrTy = llvm::PointerType::getUnqual(ClassExtensionTy);
>
>    ClassTy = llvm::StructType::create(VMContext, "struct._objc_class");
> @@ -5648,18 +5638,9 @@ ObjCTypesHelper::ObjCTypesHelper(CodeGen
>    //   struct _objc_class_ext *ext;
>    // };
>    ClassTy->setBody(llvm::PointerType::getUnqual(ClassTy),
> -                   llvm::PointerType::getUnqual(ClassTy),
> -                   Int8PtrTy,
> -                   LongTy,
> -                   LongTy,
> -                   LongTy,
> -                   IvarListPtrTy,
> -                   MethodListPtrTy,
> -                   CachePtrTy,
> -                   ProtocolListPtrTy,
> -                   Int8PtrTy,
> -                   ClassExtensionPtrTy,
> -                   nullptr);
> +                   llvm::PointerType::getUnqual(ClassTy), Int8PtrTy, LongTy,
> +                   LongTy, LongTy, IvarListPtrTy, MethodListPtrTy, CachePtrTy,
> +                   ProtocolListPtrTy, Int8PtrTy, ClassExtensionPtrTy);
>
>    ClassPtrTy = llvm::PointerType::getUnqual(ClassTy);
>
> @@ -5673,12 +5654,10 @@ ObjCTypesHelper::ObjCTypesHelper(CodeGen
>    //   struct _objc_property_list *instance_properties;// category's @property
>    //   struct _objc_property_list *class_properties;
>    // }
> -  CategoryTy =
> -    llvm::StructType::create("struct._objc_category",
> -                             Int8PtrTy, Int8PtrTy, MethodListPtrTy,
> -                             MethodListPtrTy, ProtocolListPtrTy,
> -                             IntTy, PropertyListPtrTy, PropertyListPtrTy,
> -                             nullptr);
> +  CategoryTy = llvm::StructType::create(
> +      "struct._objc_category", Int8PtrTy, Int8PtrTy, MethodListPtrTy,
> +      MethodListPtrTy, ProtocolListPtrTy, IntTy, PropertyListPtrTy,
> +      PropertyListPtrTy);
>
>    // Global metadata structures
>
> @@ -5689,10 +5668,9 @@ ObjCTypesHelper::ObjCTypesHelper(CodeGen
>    //   short cat_def_cnt;
>    //   char *defs[cls_def_cnt + cat_def_cnt];
>    // }
> -  SymtabTy =
> -    llvm::StructType::create("struct._objc_symtab",
> -                             LongTy, SelectorPtrTy, ShortTy, ShortTy,
> -                             llvm::ArrayType::get(Int8PtrTy, 0), nullptr);
> +  SymtabTy = llvm::StructType::create("struct._objc_symtab", LongTy,
> +                                      SelectorPtrTy, ShortTy, ShortTy,
> +                                      llvm::ArrayType::get(Int8PtrTy, 0));
>    SymtabPtrTy = llvm::PointerType::getUnqual(SymtabTy);
>
>    // struct _objc_module {
> @@ -5701,10 +5679,8 @@ ObjCTypesHelper::ObjCTypesHelper(CodeGen
>    //   char *name;
>    //   struct _objc_symtab* symtab;
>    //  }
> -  ModuleTy =
> -    llvm::StructType::create("struct._objc_module",
> -                             LongTy, LongTy, Int8PtrTy, SymtabPtrTy, nullptr);
> -
> +  ModuleTy = llvm::StructType::create("struct._objc_module", LongTy, LongTy,
> +                                      Int8PtrTy, SymtabPtrTy);
>
>    // FIXME: This is the size of the setjmp buffer and should be target
>    // specific. 18 is what's used on 32-bit X86.
> @@ -5713,10 +5689,9 @@ ObjCTypesHelper::ObjCTypesHelper(CodeGen
>    // Exceptions
>    llvm::Type *StackPtrTy = llvm::ArrayType::get(CGM.Int8PtrTy, 4);
>
> -  ExceptionDataTy =
> -    llvm::StructType::create("struct._objc_exception_data",
> -                             llvm::ArrayType::get(CGM.Int32Ty,SetJmpBufferSize),
> -                             StackPtrTy, nullptr);
> +  ExceptionDataTy = llvm::StructType::create(
> +      "struct._objc_exception_data",
> +      llvm::ArrayType::get(CGM.Int32Ty, SetJmpBufferSize), StackPtrTy);
>  }
>
>  ObjCNonFragileABITypesHelper::ObjCNonFragileABITypesHelper(CodeGen::CodeGenModule &cgm)
> @@ -5727,8 +5702,8 @@ ObjCNonFragileABITypesHelper::ObjCNonFra
>    //   struct _objc_method method_list[method_count];
>    // }
>    MethodListnfABITy =
> -    llvm::StructType::create("struct.__method_list_t", IntTy, IntTy,
> -                             llvm::ArrayType::get(MethodTy, 0), nullptr);
> +      llvm::StructType::create("struct.__method_list_t", IntTy, IntTy,
> +                               llvm::ArrayType::get(MethodTy, 0));
>    // struct method_list_t *
>    MethodListnfABIPtrTy = llvm::PointerType::getUnqual(MethodListnfABITy);
>
> @@ -5752,14 +5727,12 @@ ObjCNonFragileABITypesHelper::ObjCNonFra
>    ProtocolListnfABITy =
>      llvm::StructType::create(VMContext, "struct._objc_protocol_list");
>
> -  ProtocolnfABITy =
> -    llvm::StructType::create("struct._protocol_t", ObjectPtrTy, Int8PtrTy,
> -                             llvm::PointerType::getUnqual(ProtocolListnfABITy),
> -                             MethodListnfABIPtrTy, MethodListnfABIPtrTy,
> -                             MethodListnfABIPtrTy, MethodListnfABIPtrTy,
> -                             PropertyListPtrTy, IntTy, IntTy, Int8PtrPtrTy,
> -                             Int8PtrTy, PropertyListPtrTy,
> -                             nullptr);
> +  ProtocolnfABITy = llvm::StructType::create(
> +      "struct._protocol_t", ObjectPtrTy, Int8PtrTy,
> +      llvm::PointerType::getUnqual(ProtocolListnfABITy), MethodListnfABIPtrTy,
> +      MethodListnfABIPtrTy, MethodListnfABIPtrTy, MethodListnfABIPtrTy,
> +      PropertyListPtrTy, IntTy, IntTy, Int8PtrPtrTy, Int8PtrTy,
> +      PropertyListPtrTy);
>
>    // struct _protocol_t*
>    ProtocolnfABIPtrTy = llvm::PointerType::getUnqual(ProtocolnfABITy);
> @@ -5769,8 +5742,7 @@ ObjCNonFragileABITypesHelper::ObjCNonFra
>    //   struct _protocol_t *[protocol_count];
>    // }
>    ProtocolListnfABITy->setBody(LongTy,
> -                               llvm::ArrayType::get(ProtocolnfABIPtrTy, 0),
> -                               nullptr);
> +                               llvm::ArrayType::get(ProtocolnfABIPtrTy, 0));
>
>    // struct _objc_protocol_list*
>    ProtocolListnfABIPtrTy = llvm::PointerType::getUnqual(ProtocolListnfABITy);
> @@ -5784,7 +5756,7 @@ ObjCNonFragileABITypesHelper::ObjCNonFra
>    // }
>    IvarnfABITy = llvm::StructType::create(
>        "struct._ivar_t", llvm::PointerType::getUnqual(IvarOffsetVarTy),
> -      Int8PtrTy, Int8PtrTy, IntTy, IntTy, nullptr);
> +      Int8PtrTy, Int8PtrTy, IntTy, IntTy);
>
>    // struct _ivar_list_t {
>    //   uint32 entsize;  // sizeof(struct _ivar_t)
> @@ -5792,8 +5764,8 @@ ObjCNonFragileABITypesHelper::ObjCNonFra
>    //   struct _iver_t list[count];
>    // }
>    IvarListnfABITy =
> -    llvm::StructType::create("struct._ivar_list_t", IntTy, IntTy,
> -                             llvm::ArrayType::get(IvarnfABITy, 0), nullptr);
> +      llvm::StructType::create("struct._ivar_list_t", IntTy, IntTy,
> +                               llvm::ArrayType::get(IvarnfABITy, 0));
>
>    IvarListnfABIPtrTy = llvm::PointerType::getUnqual(IvarListnfABITy);
>
> @@ -5812,13 +5784,10 @@ ObjCNonFragileABITypesHelper::ObjCNonFra
>    // }
>
>    // FIXME. Add 'reserved' field in 64bit abi mode!
> -  ClassRonfABITy = llvm::StructType::create("struct._class_ro_t",
> -                                            IntTy, IntTy, IntTy, Int8PtrTy,
> -                                            Int8PtrTy, MethodListnfABIPtrTy,
> -                                            ProtocolListnfABIPtrTy,
> -                                            IvarListnfABIPtrTy,
> -                                            Int8PtrTy, PropertyListPtrTy,
> -                                            nullptr);
> +  ClassRonfABITy = llvm::StructType::create(
> +      "struct._class_ro_t", IntTy, IntTy, IntTy, Int8PtrTy, Int8PtrTy,
> +      MethodListnfABIPtrTy, ProtocolListnfABIPtrTy, IvarListnfABIPtrTy,
> +      Int8PtrTy, PropertyListPtrTy);
>
>    // ImpnfABITy - LLVM for id (*)(id, SEL, ...)
>    llvm::Type *params[] = { ObjectPtrTy, SelectorPtrTy };
> @@ -5835,11 +5804,9 @@ ObjCNonFragileABITypesHelper::ObjCNonFra
>
>    ClassnfABITy = llvm::StructType::create(VMContext, "struct._class_t");
>    ClassnfABITy->setBody(llvm::PointerType::getUnqual(ClassnfABITy),
> -                        llvm::PointerType::getUnqual(ClassnfABITy),
> -                        CachePtrTy,
> +                        llvm::PointerType::getUnqual(ClassnfABITy), CachePtrTy,
>                          llvm::PointerType::getUnqual(ImpnfABITy),
> -                        llvm::PointerType::getUnqual(ClassRonfABITy),
> -                        nullptr);
> +                        llvm::PointerType::getUnqual(ClassRonfABITy));
>
>    // LLVM for struct _class_t *
>    ClassnfABIPtrTy = llvm::PointerType::getUnqual(ClassnfABITy);
> @@ -5854,15 +5821,10 @@ ObjCNonFragileABITypesHelper::ObjCNonFra
>    //   const struct _prop_list_t * const class_properties;
>    //   const uint32_t size;
>    // }
> -  CategorynfABITy = llvm::StructType::create("struct._category_t",
> -                                             Int8PtrTy, ClassnfABIPtrTy,
> -                                             MethodListnfABIPtrTy,
> -                                             MethodListnfABIPtrTy,
> -                                             ProtocolListnfABIPtrTy,
> -                                             PropertyListPtrTy,
> -                                             PropertyListPtrTy,
> -                                             IntTy,
> -                                             nullptr);
> +  CategorynfABITy = llvm::StructType::create(
> +      "struct._category_t", Int8PtrTy, ClassnfABIPtrTy, MethodListnfABIPtrTy,
> +      MethodListnfABIPtrTy, ProtocolListnfABIPtrTy, PropertyListPtrTy,
> +      PropertyListPtrTy, IntTy);
>
>    // New types for nonfragile abi messaging.
>    CodeGen::CodeGenTypes &Types = CGM.getTypes();
> @@ -5899,9 +5861,8 @@ ObjCNonFragileABITypesHelper::ObjCNonFra
>    //   SUPER_IMP messenger;
>    //   SEL name;
>    // };
> -  SuperMessageRefTy =
> -    llvm::StructType::create("struct._super_message_ref_t",
> -                             ImpnfABITy, SelectorPtrTy, nullptr);
> +  SuperMessageRefTy = llvm::StructType::create("struct._super_message_ref_t",
> +                                               ImpnfABITy, SelectorPtrTy);
>
>    // SuperMessageRefPtrTy - LLVM for struct _super_message_ref_t*
>    SuperMessageRefPtrTy = llvm::PointerType::getUnqual(SuperMessageRefTy);
> @@ -5912,10 +5873,9 @@ ObjCNonFragileABITypesHelper::ObjCNonFra
>    //   const char*  name;    // c++ typeinfo string
>    //   Class        cls;
>    // };
> -  EHTypeTy =
> -    llvm::StructType::create("struct._objc_typeinfo",
> -                             llvm::PointerType::getUnqual(Int8PtrTy),
> -                             Int8PtrTy, ClassnfABIPtrTy, nullptr);
> +  EHTypeTy = llvm::StructType::create("struct._objc_typeinfo",
> +                                      llvm::PointerType::getUnqual(Int8PtrTy),
> +                                      Int8PtrTy, ClassnfABIPtrTy);
>    EHTypePtrTy = llvm::PointerType::getUnqual(EHTypeTy);
>  }
>
>
> Modified: cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp?rev=302572&r1=302571&r2=302572&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp Tue May  9 14:31:30 2017
> @@ -728,7 +728,7 @@ CGOpenMPRuntime::CGOpenMPRuntime(CodeGen
>    IdentTy = llvm::StructType::create(
>        "ident_t", CGM.Int32Ty /* reserved_1 */, CGM.Int32Ty /* flags */,
>        CGM.Int32Ty /* reserved_2 */, CGM.Int32Ty /* reserved_3 */,
> -      CGM.Int8PtrTy /* psource */, nullptr);
> +      CGM.Int8PtrTy /* psource */);
>    KmpCriticalNameTy = llvm::ArrayType::get(CGM.Int32Ty, /*NumElements*/ 8);
>
>    loadOffloadInfoMetadata();
>
> Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=302572&r1=302571&r2=302572&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Tue May  9 14:31:30 2017
> @@ -751,7 +751,7 @@ void CodeGenModule::EmitCtorList(CtorLis
>
>    // Get the type of a ctor entry, { i32, void ()*, i8* }.
>    llvm::StructType *CtorStructTy = llvm::StructType::get(
> -      Int32Ty, llvm::PointerType::getUnqual(CtorFTy), VoidPtrTy, nullptr);
> +      Int32Ty, llvm::PointerType::getUnqual(CtorFTy), VoidPtrTy);
>
>    // Construct the constructor and destructor arrays.
>    ConstantInitBuilder builder(*this);
>
> Modified: cfe/trunk/lib/CodeGen/CodeGenTypes.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenTypes.cpp?rev=302572&r1=302571&r2=302572&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/CodeGenTypes.cpp (original)
> +++ cfe/trunk/lib/CodeGen/CodeGenTypes.cpp Tue May  9 14:31:30 2017
> @@ -490,7 +490,7 @@ llvm::Type *CodeGenTypes::ConvertType(Qu
>      llvm_unreachable("Unexpected undeduced type!");
>    case Type::Complex: {
>      llvm::Type *EltTy = ConvertType(cast<ComplexType>(Ty)->getElementType());
> -    ResultType = llvm::StructType::get(EltTy, EltTy, nullptr);
> +    ResultType = llvm::StructType::get(EltTy, EltTy);
>      break;
>    }
>    case Type::LValueReference:
>
> Modified: cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp?rev=302572&r1=302571&r2=302572&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp (original)
> +++ cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp Tue May  9 14:31:30 2017
> @@ -499,7 +499,7 @@ llvm::Type *
>  ItaniumCXXABI::ConvertMemberPointerType(const MemberPointerType *MPT) {
>    if (MPT->isMemberDataPointer())
>      return CGM.PtrDiffTy;
> -  return llvm::StructType::get(CGM.PtrDiffTy, CGM.PtrDiffTy, nullptr);
> +  return llvm::StructType::get(CGM.PtrDiffTy, CGM.PtrDiffTy);
>  }
>
>  /// In the Itanium and ARM ABIs, method pointers have the form:
>
> Modified: cfe/trunk/lib/CodeGen/TargetInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/TargetInfo.cpp?rev=302572&r1=302571&r2=302572&view=diff
> ==============================================================================
> --- cfe/trunk/lib/CodeGen/TargetInfo.cpp (original)
> +++ cfe/trunk/lib/CodeGen/TargetInfo.cpp Tue May  9 14:31:30 2017
> @@ -3159,8 +3159,7 @@ GetX86_64ByValArgumentPair(llvm::Type *L
>      }
>    }
>
> -  llvm::StructType *Result = llvm::StructType::get(Lo, Hi, nullptr);
> -
> +  llvm::StructType *Result = llvm::StructType::get(Lo, Hi);
>
>    // Verify that the second element is at an 8-byte offset.
>    assert(TD.getStructLayout(Result)->getElementOffset(1) == 8 &&
> @@ -3235,8 +3234,7 @@ classifyReturnType(QualType RetTy) const
>    case ComplexX87:
>      assert(Hi == ComplexX87 && "Unexpected ComplexX87 classification.");
>      ResType = llvm::StructType::get(llvm::Type::getX86_FP80Ty(getVMContext()),
> -                                    llvm::Type::getX86_FP80Ty(getVMContext()),
> -                                    nullptr);
> +                                    llvm::Type::getX86_FP80Ty(getVMContext()));
>      break;
>    }
>
> @@ -3732,7 +3730,7 @@ Address X86_64ABIInfo::EmitVAArg(CodeGen
>        CGF.Builder.CreateConstInBoundsByteGEP(RegAddrLo,
>                                               CharUnits::fromQuantity(16));
>      llvm::Type *DoubleTy = CGF.DoubleTy;
> -    llvm::StructType *ST = llvm::StructType::get(DoubleTy, DoubleTy, nullptr);
> +    llvm::StructType *ST = llvm::StructType::get(DoubleTy, DoubleTy);
>      llvm::Value *V;
>      Address Tmp = CGF.CreateMemTemp(Ty);
>      Tmp = CGF.Builder.CreateElementBitCast(Tmp, ST);
> @@ -4637,7 +4635,7 @@ PPC64_SVR4_ABIInfo::classifyReturnType(Q
>        llvm::Type *CoerceTy;
>        if (Bits > GPRBits) {
>          CoerceTy = llvm::IntegerType::get(getVMContext(), GPRBits);
> -        CoerceTy = llvm::StructType::get(CoerceTy, CoerceTy, nullptr);
> +        CoerceTy = llvm::StructType::get(CoerceTy, CoerceTy);
>        } else
>          CoerceTy =
>              llvm::IntegerType::get(getVMContext(), llvm::alignTo(Bits, 8));
>
> Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp?rev=302572&r1=302571&r2=302572&view=diff
> ==============================================================================
> --- cfe/trunk/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp (original)
> +++ cfe/trunk/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp Tue May  9 14:31:30 2017
> @@ -233,19 +233,16 @@ void NilArgChecker::checkPreObjCMessage(
>      if (StringSelectors.empty()) {
>        ASTContext &Ctx = C.getASTContext();
>        Selector Sels[] = {
> -        getKeywordSelector(Ctx, "caseInsensitiveCompare", nullptr),
> -        getKeywordSelector(Ctx, "compare", nullptr),
> -        getKeywordSelector(Ctx, "compare", "options", nullptr),
> -        getKeywordSelector(Ctx, "compare", "options", "range", nullptr),
> -        getKeywordSelector(Ctx, "compare", "options", "range", "locale",
> -                           nullptr),
> -        getKeywordSelector(Ctx, "componentsSeparatedByCharactersInSet",
> -                           nullptr),
> -        getKeywordSelector(Ctx, "initWithFormat",
> -                           nullptr),
> -        getKeywordSelector(Ctx, "localizedCaseInsensitiveCompare", nullptr),
> -        getKeywordSelector(Ctx, "localizedCompare", nullptr),
> -        getKeywordSelector(Ctx, "localizedStandardCompare", nullptr),
> +          getKeywordSelector(Ctx, "caseInsensitiveCompare"),
> +          getKeywordSelector(Ctx, "compare"),
> +          getKeywordSelector(Ctx, "compare", "options"),
> +          getKeywordSelector(Ctx, "compare", "options", "range"),
> +          getKeywordSelector(Ctx, "compare", "options", "range", "locale"),
> +          getKeywordSelector(Ctx, "componentsSeparatedByCharactersInSet"),
> +          getKeywordSelector(Ctx, "initWithFormat"),
> +          getKeywordSelector(Ctx, "localizedCaseInsensitiveCompare"),
> +          getKeywordSelector(Ctx, "localizedCompare"),
> +          getKeywordSelector(Ctx, "localizedStandardCompare"),
>        };
>        for (Selector KnownSel : Sels)
>          StringSelectors[KnownSel] = 0;
> @@ -262,16 +259,15 @@ void NilArgChecker::checkPreObjCMessage(
>
>      if (ArrayWithObjectSel.isNull()) {
>        ASTContext &Ctx = C.getASTContext();
> -      ArrayWithObjectSel = getKeywordSelector(Ctx, "arrayWithObject", nullptr);
> -      AddObjectSel = getKeywordSelector(Ctx, "addObject", nullptr);
> +      ArrayWithObjectSel = getKeywordSelector(Ctx, "arrayWithObject");
> +      AddObjectSel = getKeywordSelector(Ctx, "addObject");
>        InsertObjectAtIndexSel =
> -        getKeywordSelector(Ctx, "insertObject", "atIndex", nullptr);
> +          getKeywordSelector(Ctx, "insertObject", "atIndex");
>        ReplaceObjectAtIndexWithObjectSel =
> -        getKeywordSelector(Ctx, "replaceObjectAtIndex", "withObject", nullptr);
> +          getKeywordSelector(Ctx, "replaceObjectAtIndex", "withObject");
>        SetObjectAtIndexedSubscriptSel =
> -        getKeywordSelector(Ctx, "setObject", "atIndexedSubscript", nullptr);
> -      ArrayByAddingObjectSel =
> -        getKeywordSelector(Ctx, "arrayByAddingObject", nullptr);
> +          getKeywordSelector(Ctx, "setObject", "atIndexedSubscript");
> +      ArrayByAddingObjectSel = getKeywordSelector(Ctx, "arrayByAddingObject");
>      }
>
>      if (S == ArrayWithObjectSel || S == AddObjectSel ||
> @@ -292,13 +288,11 @@ void NilArgChecker::checkPreObjCMessage(
>      if (DictionaryWithObjectForKeySel.isNull()) {
>        ASTContext &Ctx = C.getASTContext();
>        DictionaryWithObjectForKeySel =
> -        getKeywordSelector(Ctx, "dictionaryWithObject", "forKey", nullptr);
> -      SetObjectForKeySel =
> -        getKeywordSelector(Ctx, "setObject", "forKey", nullptr);
> +          getKeywordSelector(Ctx, "dictionaryWithObject", "forKey");
> +      SetObjectForKeySel = getKeywordSelector(Ctx, "setObject", "forKey");
>        SetObjectForKeyedSubscriptSel =
> -        getKeywordSelector(Ctx, "setObject", "forKeyedSubscript", nullptr);
> -      RemoveObjectForKeySel =
> -        getKeywordSelector(Ctx, "removeObjectForKey", nullptr);
> +          getKeywordSelector(Ctx, "setObject", "forKeyedSubscript");
> +      RemoveObjectForKeySel = getKeywordSelector(Ctx, "removeObjectForKey");
>      }
>
>      if (S == DictionaryWithObjectForKeySel || S == SetObjectForKeySel) {
>
> Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/NoReturnFunctionChecker.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/NoReturnFunctionChecker.cpp?rev=302572&r1=302571&r2=302572&view=diff
> ==============================================================================
> --- cfe/trunk/lib/StaticAnalyzer/Checkers/NoReturnFunctionChecker.cpp (original)
> +++ cfe/trunk/lib/StaticAnalyzer/Checkers/NoReturnFunctionChecker.cpp Tue May  9 14:31:30 2017
> @@ -123,14 +123,14 @@ void NoReturnFunctionChecker::checkPostO
>    case 4:
>      lazyInitKeywordSelector(HandleFailureInFunctionSel, C.getASTContext(),
>                              "handleFailureInFunction", "file", "lineNumber",
> -                            "description", nullptr);
> +                            "description");
>      if (Sel != HandleFailureInFunctionSel)
>        return;
>      break;
>    case 5:
>      lazyInitKeywordSelector(HandleFailureInMethodSel, C.getASTContext(),
>                              "handleFailureInMethod", "object", "file",
> -                            "lineNumber", "description", nullptr);
> +                            "lineNumber", "description");
>      if (Sel != HandleFailureInMethodSel)
>        return;
>      break;
>
> Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp?rev=302572&r1=302571&r2=302572&view=diff
> ==============================================================================
> --- cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp (original)
> +++ cfe/trunk/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp Tue May  9 14:31:30 2017
> @@ -703,31 +703,30 @@ private:
>      ObjCMethodSummaries[ObjCSummaryKey(ClsII, S)]  = Summ;
>    }
>
> +  template <typename... Keywords>
>    void addMethodSummary(IdentifierInfo *ClsII, ObjCMethodSummariesTy &Summaries,
> -                        const RetainSummary *Summ, va_list argp) {
> -    Selector S = getKeywordSelector(Ctx, argp);
> +                        const RetainSummary *Summ, Keywords *... Kws) {
> +    Selector S = getKeywordSelector(Ctx, Kws...);
>      Summaries[ObjCSummaryKey(ClsII, S)] = Summ;
>    }
>
> -  void addInstMethSummary(const char* Cls, const RetainSummary * Summ, ...) {
> -    va_list argp;
> -    va_start(argp, Summ);
> -    addMethodSummary(&Ctx.Idents.get(Cls), ObjCMethodSummaries, Summ, argp);
> -    va_end(argp);
> -  }
> -
> -  void addClsMethSummary(const char* Cls, const RetainSummary * Summ, ...) {
> -    va_list argp;
> -    va_start(argp, Summ);
> -    addMethodSummary(&Ctx.Idents.get(Cls),ObjCClassMethodSummaries, Summ, argp);
> -    va_end(argp);
> -  }
> -
> -  void addClsMethSummary(IdentifierInfo *II, const RetainSummary * Summ, ...) {
> -    va_list argp;
> -    va_start(argp, Summ);
> -    addMethodSummary(II, ObjCClassMethodSummaries, Summ, argp);
> -    va_end(argp);
> +  template <typename... Keywords>
> +  void addInstMethSummary(const char *Cls, const RetainSummary *Summ,
> +                          Keywords *... Kws) {
> +    addMethodSummary(&Ctx.Idents.get(Cls), ObjCMethodSummaries, Summ, Kws...);
> +  }
> +
> +  template <typename... Keywords>
> +  void addClsMethSummary(const char *Cls, const RetainSummary *Summ,
> +                         Keywords *... Kws) {
> +    addMethodSummary(&Ctx.Idents.get(Cls), ObjCClassMethodSummaries, Summ,
> +                     Kws...);
> +  }
> +
> +  template <typename... Keywords>
> +  void addClsMethSummary(IdentifierInfo *II, const RetainSummary *Summ,
> +                         Keywords *... Kws) {
> +    addMethodSummary(II, ObjCClassMethodSummaries, Summ, Kws...);
>    }
>
>  public:
> @@ -1640,20 +1639,16 @@ void RetainSummaryManager::InitializeMet
>    addClassMethSummary("NSAutoreleasePool", "new", NoTrackYet);
>
>    // Create summaries QCRenderer/QCView -createSnapShotImageOfType:
> -  addInstMethSummary("QCRenderer", AllocSumm,
> -                     "createSnapshotImageOfType", nullptr);
> -  addInstMethSummary("QCView", AllocSumm,
> -                     "createSnapshotImageOfType", nullptr);
> +  addInstMethSummary("QCRenderer", AllocSumm, "createSnapshotImageOfType");
> +  addInstMethSummary("QCView", AllocSumm, "createSnapshotImageOfType");
>
>    // Create summaries for CIContext, 'createCGImage' and
>    // 'createCGLayerWithSize'.  These objects are CF objects, and are not
>    // automatically garbage collected.
> -  addInstMethSummary("CIContext", CFAllocSumm,
> -                     "createCGImage", "fromRect", nullptr);
> +  addInstMethSummary("CIContext", CFAllocSumm, "createCGImage", "fromRect");
>    addInstMethSummary("CIContext", CFAllocSumm, "createCGImage", "fromRect",
> -                     "format", "colorSpace", nullptr);
> -  addInstMethSummary("CIContext", CFAllocSumm, "createCGLayerWithSize", "info",
> -                     nullptr);
> +                     "format", "colorSpace");
> +  addInstMethSummary("CIContext", CFAllocSumm, "createCGLayerWithSize", "info");
>  }
>
>  //===----------------------------------------------------------------------===//
>
> Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/SelectorExtras.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/SelectorExtras.h?rev=302572&r1=302571&r2=302572&view=diff
> ==============================================================================
> --- cfe/trunk/lib/StaticAnalyzer/Checkers/SelectorExtras.h (original)
> +++ cfe/trunk/lib/StaticAnalyzer/Checkers/SelectorExtras.h Tue May  9 14:31:30 2017
> @@ -11,48 +11,26 @@
>  #define LLVM_CLANG_LIB_STATICANALYZER_CHECKERS_SELECTOREXTRAS_H
>
>  #include "clang/AST/ASTContext.h"
> -#include <cstdarg>
>
>  namespace clang {
>  namespace ento {
>
> -static inline Selector getKeywordSelectorImpl(ASTContext &Ctx,
> -                                              const char *First,
> -                                              va_list argp) {
> -  SmallVector<IdentifierInfo*, 10> II;
> -  II.push_back(&Ctx.Idents.get(First));
> -
> -  while (const char *s = va_arg(argp, const char *))
> -    II.push_back(&Ctx.Idents.get(s));
> +template <typename... IdentifierInfos>
> +static inline Selector getKeywordSelector(ASTContext &Ctx,
> +                                          IdentifierInfos *... IIs) {
> +  static_assert(sizeof...(IdentifierInfos),
> +                "keyword selectors must have at least one argument");
> +  SmallVector<IdentifierInfo *, 10> II{{&Ctx.Idents.get(IIs)...}};
>
>    return Ctx.Selectors.getSelector(II.size(), &II[0]);
>  }
>
> -static inline Selector getKeywordSelector(ASTContext &Ctx, va_list argp) {
> -  const char *First = va_arg(argp, const char *);
> -  assert(First && "keyword selectors must have at least one argument");
> -  return getKeywordSelectorImpl(Ctx, First, argp);
> -}
> -
> -LLVM_END_WITH_NULL
> -static inline Selector getKeywordSelector(ASTContext &Ctx,
> -                                          const char *First, ...) {
> -  va_list argp;
> -  va_start(argp, First);
> -  Selector result = getKeywordSelectorImpl(Ctx, First, argp);
> -  va_end(argp);
> -  return result;
> -}
> -
> -LLVM_END_WITH_NULL
> +template <typename... IdentifierInfos>
>  static inline void lazyInitKeywordSelector(Selector &Sel, ASTContext &Ctx,
> -                                           const char *First, ...) {
> +                                           IdentifierInfos *... IIs) {
>    if (!Sel.isNull())
>      return;
> -  va_list argp;
> -  va_start(argp, First);
> -  Sel = getKeywordSelectorImpl(Ctx, First, argp);
> -  va_end(argp);
> +  Sel = getKeywordSelector(Ctx, IIs...);
>  }
>
>  static inline void lazyInitNullarySelector(Selector &Sel, ASTContext &Ctx,
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>


More information about the cfe-commits mailing list