Author: hubert.reinterpretcast Date: Tue Jul 19 20:05:31 2016 New Revision: 276074
URL: http://llvm.org/viewvc/llvm-project?rev=276074&view=rev Log: Revert r276069: MSVC bots not happy Modified: cfe/trunk/include/clang/AST/DeclTemplate.h cfe/trunk/lib/AST/ASTContext.cpp cfe/trunk/lib/AST/ASTImporter.cpp cfe/trunk/lib/AST/DeclTemplate.cpp cfe/trunk/lib/Sema/SemaLambda.cpp cfe/trunk/lib/Sema/SemaTemplate.cpp cfe/trunk/lib/Sema/SemaTemplateDeduction.cpp cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp cfe/trunk/lib/Serialization/ASTReader.cpp cfe/trunk/lib/Serialization/ASTWriter.cpp Modified: cfe/trunk/include/clang/AST/DeclTemplate.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclTemplate.h?rev=276074&r1=276073&r2=276074&view=diff ============================================================================== --- cfe/trunk/include/clang/AST/DeclTemplate.h (original) +++ cfe/trunk/include/clang/AST/DeclTemplate.h Tue Jul 19 20:05:31 2016 @@ -46,8 +46,7 @@ typedef llvm::PointerUnion3<TemplateType /// \brief Stores a list of template parameters for a TemplateDecl and its /// derived classes. class TemplateParameterList final - : private llvm::TrailingObjects<TemplateParameterList, NamedDecl *, - Expr *> { + : private llvm::TrailingObjects<TemplateParameterList, NamedDecl *> { /// The location of the 'template' keyword. SourceLocation TemplateLoc; @@ -57,36 +56,26 @@ class TemplateParameterList final /// The number of template parameters in this template /// parameter list. - unsigned NumParams : 30; + unsigned NumParams : 31; /// Whether this template parameter list contains an unexpanded parameter /// pack. unsigned ContainsUnexpandedParameterPack : 1; - /// Whether this template parameter list has an associated requires-clause - unsigned HasRequiresClause : 1; - protected: size_t numTrailingObjects(OverloadToken<NamedDecl *>) const { return NumParams; } - size_t numTrailingObjects(OverloadToken<Expr *>) const { - return HasRequiresClause; - } - TemplateParameterList(SourceLocation TemplateLoc, SourceLocation LAngleLoc, - ArrayRef<NamedDecl *> Params, SourceLocation RAngleLoc, - Expr *RequiresClause); + ArrayRef<NamedDecl *> Params, SourceLocation RAngleLoc); public: - // FIXME: remove default argument for RequiresClause static TemplateParameterList *Create(const ASTContext &C, SourceLocation TemplateLoc, SourceLocation LAngleLoc, ArrayRef<NamedDecl *> Params, - SourceLocation RAngleLoc, - Expr *RequiresClause = nullptr); + SourceLocation RAngleLoc); /// \brief Iterates through the template parameters in this list. typedef NamedDecl** iterator; @@ -138,16 +127,6 @@ public: return ContainsUnexpandedParameterPack; } - /// \brief The constraint-expression of the associated requires-clause. - Expr *getRequiresClause() { - return HasRequiresClause ? *getTrailingObjects<Expr *>() : nullptr; - } - - /// \brief The constraint-expression of the associated requires-clause. - const Expr *getRequiresClause() const { - return HasRequiresClause ? *getTrailingObjects<Expr *>() : nullptr; - } - SourceLocation getTemplateLoc() const { return TemplateLoc; } SourceLocation getLAngleLoc() const { return LAngleLoc; } SourceLocation getRAngleLoc() const { return RAngleLoc; } @@ -157,33 +136,36 @@ public: } friend TrailingObjects; - - template <size_t N, bool HasRequiresClause> - friend class FixedSizeTemplateParameterListStorage; + template <size_t N> friend class FixedSizeTemplateParameterListStorage; }; -/// \brief Stores a list of template parameters and the associated -/// requires-clause (if any) for a TemplateDecl and its derived classes. -/// Suitable for creating on the stack. -template <size_t N, bool HasRequiresClause> -class FixedSizeTemplateParameterListStorage - : public TemplateParameterList::FixedSizeStorageOwner { - typename TemplateParameterList::FixedSizeStorage< - NamedDecl *, Expr *>::with_counts< - N, HasRequiresClause ? 1u : 0u - >::type storage; +/// \brief Stores a list of template parameters for a TemplateDecl and its +/// derived classes. Suitable for creating on the stack. +template <size_t N> class FixedSizeTemplateParameterListStorage { + // This is kinda ugly: TemplateParameterList usually gets allocated + // in a block of memory with NamedDecls appended to it. Here, to get + // it stack allocated, we include the params as a separate + // variable. After allocation, the TemplateParameterList object + // treats them as part of itself. + TemplateParameterList List; + NamedDecl *Params[N]; public: FixedSizeTemplateParameterListStorage(SourceLocation TemplateLoc, SourceLocation LAngleLoc, ArrayRef<NamedDecl *> Params, - SourceLocation RAngleLoc, - Expr *RequiresClause) - : FixedSizeStorageOwner( - (assert(N == Params.size()), - assert(HasRequiresClause == static_cast<bool>(RequiresClause)), - new (static_cast<void *>(&storage)) TemplateParameterList( - TemplateLoc, LAngleLoc, Params, RAngleLoc, RequiresClause))) {} + SourceLocation RAngleLoc) + : List(TemplateLoc, LAngleLoc, Params, RAngleLoc) { + // Because we're doing an evil layout hack above, have some + // asserts, just to double-check everything is laid out like + // expected. + assert(sizeof(*this) == + TemplateParameterList::totalSizeToAlloc<NamedDecl *>(N) && + "Object layout not as expected"); + assert(this->Params == List.getTrailingObjects<NamedDecl *>() && + "Object layout not as expected"); + } + TemplateParameterList *get() { return &List; } }; /// \brief A template argument list. @@ -371,11 +353,6 @@ public: return TemplateParams; } - /// Get the constraint-expression from the associated requires-clause (if any) - const Expr *getRequiresClause() const { - return TemplateParams ? TemplateParams->getRequiresClause() : nullptr; - } - /// Get the underlying, templated declaration. NamedDecl *getTemplatedDecl() const { return TemplatedDecl.getPointer(); } Modified: cfe/trunk/lib/AST/ASTContext.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=276074&r1=276073&r2=276074&view=diff ============================================================================== --- cfe/trunk/lib/AST/ASTContext.cpp (original) +++ cfe/trunk/lib/AST/ASTContext.cpp Tue Jul 19 20:05:31 2016 @@ -651,10 +651,6 @@ ASTContext::getCanonicalTemplateTemplate cast<TemplateTemplateParmDecl>(*P))); } - assert(!TTP->getRequiresClause() && - "Unexpected requires-clause on template template-parameter"); - LLVM_CONSTEXPR Expr *const CanonRequiresClause = nullptr; - TemplateTemplateParmDecl *CanonTTP = TemplateTemplateParmDecl::Create(*this, getTranslationUnitDecl(), SourceLocation(), TTP->getDepth(), @@ -664,8 +660,7 @@ ASTContext::getCanonicalTemplateTemplate TemplateParameterList::Create(*this, SourceLocation(), SourceLocation(), CanonParams, - SourceLocation(), - CanonRequiresClause)); + SourceLocation())); // Get the new insert position for the node we care about. Canonical = CanonTemplateTemplateParms.FindNodeOrInsertPos(ID, InsertPos); Modified: cfe/trunk/lib/AST/ASTImporter.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTImporter.cpp?rev=276074&r1=276073&r2=276074&view=diff ============================================================================== --- cfe/trunk/lib/AST/ASTImporter.cpp (original) +++ cfe/trunk/lib/AST/ASTImporter.cpp Tue Jul 19 20:05:31 2016 @@ -2262,21 +2262,11 @@ TemplateParameterList *ASTNodeImporter:: ToParams.push_back(cast<NamedDecl>(To)); } - Expr *ToRequiresClause; - if (Expr *const R = Params->getRequiresClause()) { - ToRequiresClause = Importer.Import(R); - if (!ToRequiresClause) - return nullptr; - } else { - ToRequiresClause = nullptr; - } - return TemplateParameterList::Create(Importer.getToContext(), Importer.Import(Params->getTemplateLoc()), Importer.Import(Params->getLAngleLoc()), ToParams, - Importer.Import(Params->getRAngleLoc()), - ToRequiresClause); + Importer.Import(Params->getRAngleLoc())); } TemplateArgument Modified: cfe/trunk/lib/AST/DeclTemplate.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclTemplate.cpp?rev=276074&r1=276073&r2=276074&view=diff ============================================================================== --- cfe/trunk/lib/AST/DeclTemplate.cpp (original) +++ cfe/trunk/lib/AST/DeclTemplate.cpp Tue Jul 19 20:05:31 2016 @@ -31,11 +31,9 @@ using namespace clang; TemplateParameterList::TemplateParameterList(SourceLocation TemplateLoc, SourceLocation LAngleLoc, ArrayRef<NamedDecl *> Params, - SourceLocation RAngleLoc, - Expr *RequiresClause) + SourceLocation RAngleLoc) : TemplateLoc(TemplateLoc), LAngleLoc(LAngleLoc), RAngleLoc(RAngleLoc), - NumParams(Params.size()), ContainsUnexpandedParameterPack(false), - HasRequiresClause(static_cast<bool>(RequiresClause)) { + NumParams(Params.size()), ContainsUnexpandedParameterPack(false) { assert(this->NumParams == NumParams && "Too many template parameters"); for (unsigned Idx = 0; Idx < NumParams; ++Idx) { NamedDecl *P = Params[Idx]; @@ -54,21 +52,15 @@ TemplateParameterList::TemplateParameter // template parameter list does too. } } - if (RequiresClause) { - *getTrailingObjects<Expr *>() = RequiresClause; - } } -TemplateParameterList * -TemplateParameterList::Create(const ASTContext &C, SourceLocation TemplateLoc, - SourceLocation LAngleLoc, - ArrayRef<NamedDecl *> Params, - SourceLocation RAngleLoc, Expr *RequiresClause) { - void *Mem = C.Allocate(totalSizeToAlloc<NamedDecl *, Expr *>( - Params.size(), RequiresClause ? 1u : 0u), +TemplateParameterList *TemplateParameterList::Create( + const ASTContext &C, SourceLocation TemplateLoc, SourceLocation LAngleLoc, + ArrayRef<NamedDecl *> Params, SourceLocation RAngleLoc) { + void *Mem = C.Allocate(totalSizeToAlloc<NamedDecl *>(Params.size()), llvm::alignOf<TemplateParameterList>()); return new (Mem) TemplateParameterList(TemplateLoc, LAngleLoc, Params, - RAngleLoc, RequiresClause); + RAngleLoc); } unsigned TemplateParameterList::getMinRequiredArguments() const { @@ -1177,7 +1169,7 @@ createMakeIntegerSeqParameterList(const // <typename T, T ...Ints> NamedDecl *P[2] = {T, N}; auto *TPL = TemplateParameterList::Create( - C, SourceLocation(), SourceLocation(), P, SourceLocation(), nullptr); + C, SourceLocation(), SourceLocation(), P, SourceLocation()); // template <typename T, ...Ints> class IntSeq auto *TemplateTemplateParm = TemplateTemplateParmDecl::Create( @@ -1202,7 +1194,7 @@ createMakeIntegerSeqParameterList(const // template <template <typename T, T ...Ints> class IntSeq, typename T, T N> return TemplateParameterList::Create(C, SourceLocation(), SourceLocation(), - Params, SourceLocation(), nullptr); + Params, SourceLocation()); } static TemplateParameterList * @@ -1223,7 +1215,7 @@ createTypePackElementParameterList(const NamedDecl *Params[] = {Index, Ts}; return TemplateParameterList::Create(C, SourceLocation(), SourceLocation(), llvm::makeArrayRef(Params), - SourceLocation(), nullptr); + SourceLocation()); } static TemplateParameterList *createBuiltinTemplateParameterList( Modified: cfe/trunk/lib/Sema/SemaLambda.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaLambda.cpp?rev=276074&r1=276073&r2=276074&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaLambda.cpp (original) +++ cfe/trunk/lib/Sema/SemaLambda.cpp Tue Jul 19 20:05:31 2016 @@ -235,7 +235,7 @@ getGenericLambdaTemplateParameterList(La /*Template kw loc*/ SourceLocation(), LAngleLoc, llvm::makeArrayRef((NamedDecl *const *)LSI->AutoTemplateParams.data(), LSI->AutoTemplateParams.size()), - RAngleLoc, nullptr); + RAngleLoc); } return LSI->GLTemplateParameterList; } Modified: cfe/trunk/lib/Sema/SemaTemplate.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplate.cpp?rev=276074&r1=276073&r2=276074&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaTemplate.cpp (original) +++ cfe/trunk/lib/Sema/SemaTemplate.cpp Tue Jul 19 20:05:31 2016 @@ -832,10 +832,11 @@ Sema::ActOnTemplateParameterList(unsigne if (ExportLoc.isValid()) Diag(ExportLoc, diag::warn_template_export_unsupported); + // FIXME: store RequiresClause return TemplateParameterList::Create( Context, TemplateLoc, LAngleLoc, llvm::makeArrayRef((NamedDecl *const *)Params.data(), Params.size()), - RAngleLoc, RequiresClause); + RAngleLoc); } static void SetNestedNameSpecifier(TagDecl *T, const CXXScopeSpec &SS) { @@ -1955,7 +1956,7 @@ TemplateParameterList *Sema::MatchTempla // Fabricate an empty template parameter list for the invented header. return TemplateParameterList::Create(Context, SourceLocation(), SourceLocation(), None, - SourceLocation(), nullptr); + SourceLocation()); } return nullptr; Modified: cfe/trunk/lib/Sema/SemaTemplateDeduction.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplateDeduction.cpp?rev=276074&r1=276073&r2=276074&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaTemplateDeduction.cpp (original) +++ cfe/trunk/lib/Sema/SemaTemplateDeduction.cpp Tue Jul 19 20:05:31 2016 @@ -4036,8 +4036,8 @@ Sema::DeduceAutoType(TypeLoc Type, Expr nullptr, false, false); QualType TemplArg = QualType(TemplParam->getTypeForDecl(), 0); NamedDecl *TemplParamPtr = TemplParam; - FixedSizeTemplateParameterListStorage<1, false> TemplateParamsSt( - Loc, Loc, TemplParamPtr, Loc, nullptr); + FixedSizeTemplateParameterListStorage<1> TemplateParamsSt( + Loc, Loc, TemplParamPtr, Loc); QualType FuncParam = SubstituteAutoTransform(*this, TemplArg).Apply(Type); assert(!FuncParam.isNull() && Modified: cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp?rev=276074&r1=276073&r2=276074&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp (original) +++ cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp Tue Jul 19 20:05:31 2016 @@ -2922,14 +2922,10 @@ TemplateDeclInstantiator::SubstTemplateP if (Invalid) return nullptr; - // Note: we substitute into associated constraints later - Expr *const UninstantiatedRequiresClause = L->getRequiresClause(); - TemplateParameterList *InstL = TemplateParameterList::Create(SemaRef.Context, L->getTemplateLoc(), L->getLAngleLoc(), Params, - L->getRAngleLoc(), - UninstantiatedRequiresClause); + L->getRAngleLoc()); return InstL; } Modified: cfe/trunk/lib/Serialization/ASTReader.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReader.cpp?rev=276074&r1=276073&r2=276074&view=diff ============================================================================== --- cfe/trunk/lib/Serialization/ASTReader.cpp (original) +++ cfe/trunk/lib/Serialization/ASTReader.cpp Tue Jul 19 20:05:31 2016 @@ -7892,10 +7892,9 @@ ASTReader::ReadTemplateParameterList(Mod while (NumParams--) Params.push_back(ReadDeclAs<NamedDecl>(F, Record, Idx)); - // TODO: Concepts TemplateParameterList* TemplateParams = TemplateParameterList::Create(Context, TemplateLoc, LAngleLoc, - Params, RAngleLoc, nullptr); + Params, RAngleLoc); return TemplateParams; } Modified: cfe/trunk/lib/Serialization/ASTWriter.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriter.cpp?rev=276074&r1=276073&r2=276074&view=diff ============================================================================== --- cfe/trunk/lib/Serialization/ASTWriter.cpp (original) +++ cfe/trunk/lib/Serialization/ASTWriter.cpp Tue Jul 19 20:05:31 2016 @@ -5360,7 +5360,6 @@ void ASTRecordWriter::AddTemplateParamet AddSourceLocation(TemplateParams->getTemplateLoc()); AddSourceLocation(TemplateParams->getLAngleLoc()); AddSourceLocation(TemplateParams->getRAngleLoc()); - // TODO: Concepts Record->push_back(TemplateParams->size()); for (const auto &P : *TemplateParams) AddDeclRef(P); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits