diff options
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/AST/Type.cpp | 46 | ||||
-rw-r--r-- | clang/lib/AST/TypeLoc.cpp | 14 | ||||
-rw-r--r-- | clang/lib/Parse/ParseDecl.cpp | 10 | ||||
-rw-r--r-- | clang/lib/Parse/ParseDeclCXX.cpp | 26 | ||||
-rw-r--r-- | clang/lib/Parse/ParseExpr.cpp | 9 | ||||
-rw-r--r-- | clang/lib/Parse/ParseExprCXX.cpp | 2 | ||||
-rw-r--r-- | clang/lib/Parse/ParseObjc.cpp | 5 | ||||
-rw-r--r-- | clang/lib/Parse/Parser.cpp | 2 | ||||
-rw-r--r-- | clang/lib/Sema/DeclSpec.cpp | 72 | ||||
-rw-r--r-- | clang/lib/Sema/SemaCodeComplete.cpp | 2 | ||||
-rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 12 | ||||
-rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 11 | ||||
-rw-r--r-- | clang/lib/Sema/SemaTemplate.cpp | 10 | ||||
-rw-r--r-- | clang/lib/Sema/SemaTemplateVariadic.cpp | 69 | ||||
-rw-r--r-- | clang/lib/Sema/SemaType.cpp | 23 | ||||
-rw-r--r-- | clang/lib/Serialization/ASTWriter.cpp | 6 |
16 files changed, 171 insertions, 148 deletions
diff --git a/clang/lib/AST/Type.cpp b/clang/lib/AST/Type.cpp index 38f2a16fa16..dc370e3d59e 100644 --- a/clang/lib/AST/Type.cpp +++ b/clang/lib/AST/Type.cpp @@ -2436,29 +2436,41 @@ bool Type::isSpecifierType() const { } ElaboratedTypeKeyword -TypeWithKeyword::getKeywordForTypeSpec(unsigned TypeSpec) { +TypeWithKeyword::getKeywordForTypeSpec(TypeSpecifierType TypeSpec) { switch (TypeSpec) { - default: return ETK_None; - case TST_typename: return ETK_Typename; - case TST_class: return ETK_Class; - case TST_struct: return ETK_Struct; - case TST_interface: return ETK_Interface; - case TST_union: return ETK_Union; - case TST_enum: return ETK_Enum; + default: + return ETK_None; + case TypeSpecifierType::TST_typename: + return ETK_Typename; + case TypeSpecifierType::TST_class: + return ETK_Class; + case TypeSpecifierType::TST_struct: + return ETK_Struct; + case TypeSpecifierType::TST_interface: + return ETK_Interface; + case TypeSpecifierType::TST_union: + return ETK_Union; + case TypeSpecifierType::TST_enum: + return ETK_Enum; } } TagTypeKind -TypeWithKeyword::getTagTypeKindForTypeSpec(unsigned TypeSpec) { - switch(TypeSpec) { - case TST_class: return TTK_Class; - case TST_struct: return TTK_Struct; - case TST_interface: return TTK_Interface; - case TST_union: return TTK_Union; - case TST_enum: return TTK_Enum; +TypeWithKeyword::getTagTypeKindForTypeSpec(TypeSpecifierType TypeSpec) { + switch (TypeSpec) { + default: + llvm_unreachable("Type specifier is not a tag type kind."); + case TypeSpecifierType::TST_class: + return TTK_Class; + case TypeSpecifierType::TST_struct: + return TTK_Struct; + case TypeSpecifierType::TST_interface: + return TTK_Interface; + case TypeSpecifierType::TST_union: + return TTK_Union; + case TypeSpecifierType::TST_enum: + return TTK_Enum; } - - llvm_unreachable("Type specifier is not a tag type kind."); } ElaboratedTypeKeyword diff --git a/clang/lib/AST/TypeLoc.cpp b/clang/lib/AST/TypeLoc.cpp index 0ac50b31ace..84f607b824f 100644 --- a/clang/lib/AST/TypeLoc.cpp +++ b/clang/lib/AST/TypeLoc.cpp @@ -311,19 +311,19 @@ TypeSpecifierType BuiltinTypeLoc::getWrittenTypeSpec() const { return static_cast<TypeSpecifierType>(getWrittenBuiltinSpecs().Type); switch (getTypePtr()->getKind()) { case BuiltinType::Void: - return TST_void; + return TypeSpecifierType::TST_void; case BuiltinType::Bool: - return TST_bool; + return TypeSpecifierType::TST_bool; case BuiltinType::Char_U: case BuiltinType::Char_S: - return TST_char; + return TypeSpecifierType::TST_char; case BuiltinType::Char16: - return TST_char16; + return TypeSpecifierType::TST_char16; case BuiltinType::Char32: - return TST_char32; + return TypeSpecifierType::TST_char32; case BuiltinType::WChar_S: case BuiltinType::WChar_U: - return TST_wchar; + return TypeSpecifierType::TST_wchar; case BuiltinType::UChar: case BuiltinType::UShort: case BuiltinType::UInt: @@ -365,7 +365,7 @@ TypeSpecifierType BuiltinTypeLoc::getWrittenTypeSpec() const { case BuiltinType::OCLReserveID: case BuiltinType::BuiltinFn: case BuiltinType::OMPArraySection: - return TST_unspecified; + return TypeSpecifierType::TST_unspecified; } llvm_unreachable("Invalid BuiltinType Kind!"); diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp index 127e18439b8..37cb8e29ea5 100644 --- a/clang/lib/Parse/ParseDecl.cpp +++ b/clang/lib/Parse/ParseDecl.cpp @@ -3139,7 +3139,7 @@ void Parser::ParseDeclarationSpecifiers(DeclSpec &DS, // static const bool __is_signed; // // then treat __is_signed as an identifier rather than as a keyword. - if (DS.getTypeSpecType() == TST_bool && + if (DS.getTypeSpecType() == TypeSpecifierType::TST_bool && DS.getTypeQualifiers() == DeclSpec::TQ_const && DS.getStorageClassSpec() == DeclSpec::SCS_static) TryKeywordIdentFallback(true); @@ -3614,7 +3614,7 @@ void Parser::ParseDeclarationSpecifiers(DeclSpec &DS, break; #include "clang/Basic/OpenCLImageTypes.def" case tok::kw___unknown_anytype: - isInvalid = DS.SetTypeSpecType(TST_unknown_anytype, Loc, + isInvalid = DS.SetTypeSpecType(TypeSpecifierType::TST_unknown_anytype, Loc, PrevSpec, DiagID, Policy); break; @@ -3888,7 +3888,7 @@ void Parser::ParseStructDeclaration( /// [OBC] '@' 'defs' '(' class-name ')' /// void Parser::ParseStructUnionBody(SourceLocation RecordLoc, - unsigned TagType, Decl *TagDecl) { + TypeSpecifierType TagType, Decl *TagDecl) { PrettyDeclStackTraceEntry CrashInfo(Actions, TagDecl, RecordLoc, "parsing struct/union body"); assert(!getLangOpts().CPlusPlus && "C++ declarations not supported"); @@ -5527,7 +5527,7 @@ void Parser::ParseDirectDeclarator(Declarator &D) { NextToken().is(tok::r_paren) && !D.hasGroupingParens() && !Actions.containsUnexpandedParameterPacks(D) && - D.getDeclSpec().getTypeSpecType() != TST_auto)) { + D.getDeclSpec().getTypeSpecType() != TypeSpecifierType::TST_auto)) { SourceLocation EllipsisLoc = ConsumeToken(); if (isPtrOperatorToken(Tok.getKind(), getLangOpts(), D.getContext())) { // The ellipsis was put in the wrong place. Recover, and explain to @@ -6107,7 +6107,7 @@ void Parser::ParseFunctionDeclarator(Declarator &D, LocalEndLoc = EndLoc; if (getLangOpts().CPlusPlus11 && Tok.is(tok::arrow)) { Diag(Tok, diag::warn_cxx98_compat_trailing_return_type); - if (D.getDeclSpec().getTypeSpecType() == TST_auto) + if (D.getDeclSpec().getTypeSpecType() == TypeSpecifierType::TST_auto) StartLoc = D.getDeclSpec().getTypeSpecTypeLoc(); LocalEndLoc = Tok.getLocation(); SourceRange Range; diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp index 68b73ca1d25..8953eef1d7e 100644 --- a/clang/lib/Parse/ParseDeclCXX.cpp +++ b/clang/lib/Parse/ParseDeclCXX.cpp @@ -1011,10 +1011,12 @@ void Parser::AnnotateExistingDecltypeSpecifier(const DeclSpec& DS, PP.EnterToken(Tok); Tok.setKind(tok::annot_decltype); - setExprAnnotation(Tok, - DS.getTypeSpecType() == TST_decltype ? DS.getRepAsExpr() : - DS.getTypeSpecType() == TST_decltype_auto ? ExprResult() : - ExprError()); + setExprAnnotation(Tok, DS.getTypeSpecType() == TypeSpecifierType::TST_decltype + ? DS.getRepAsExpr() + : DS.getTypeSpecType() == + TypeSpecifierType::TST_decltype_auto + ? ExprResult() + : ExprError()); Tok.setAnnotationEndLoc(EndLoc); Tok.setLocation(StartLoc); PP.AnnotateCachedTokens(Tok); @@ -1194,8 +1196,8 @@ TypeResult Parser::ParseBaseTypeSpecifier(SourceLocation &BaseLoc, const char *PrevSpec = nullptr; unsigned DiagID; - DS.SetTypeSpecType(TST_typename, IdLoc, PrevSpec, DiagID, Type, - Actions.getASTContext().getPrintingPolicy()); + DS.SetTypeSpecType(TypeSpecifierType::TST_typename, IdLoc, PrevSpec, DiagID, + Type, Actions.getASTContext().getPrintingPolicy()); Declarator DeclaratorInfo(DS, DeclaratorContext::TypeNameContext); return Actions.ActOnTypeName(getCurScope(), DeclaratorInfo); @@ -2952,7 +2954,8 @@ ExprResult Parser::ParseCXXMemberInitializer(Decl *D, bool IsFunction, void Parser::SkipCXXMemberSpecification(SourceLocation RecordLoc, SourceLocation AttrFixitLoc, - unsigned TagType, Decl *TagDecl) { + TypeSpecifierType TagType, + Decl *TagDecl) { // Skip the optional 'final' keyword. if (getLangOpts().CPlusPlus && Tok.is(tok::identifier)) { assert(isCXX11FinalKeyword() && "not a class definition"); @@ -3104,11 +3107,12 @@ Parser::DeclGroupPtrTy Parser::ParseCXXClassMemberDeclarationWithPragmas( void Parser::ParseCXXMemberSpecification(SourceLocation RecordLoc, SourceLocation AttrFixitLoc, ParsedAttributesWithRange &Attrs, - unsigned TagType, Decl *TagDecl) { + TypeSpecifierType TagType, + Decl *TagDecl) { assert((TagType == DeclSpec::TST_struct || - TagType == DeclSpec::TST_interface || - TagType == DeclSpec::TST_union || - TagType == DeclSpec::TST_class) && "Invalid TagType!"); + TagType == DeclSpec::TST_interface || + TagType == DeclSpec::TST_union || TagType == DeclSpec::TST_class) && + "Invalid TagType!"); PrettyDeclStackTraceEntry CrashInfo(Actions, TagDecl, RecordLoc, "parsing struct/union/class body"); diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp index 1b8865edb79..057b4e6cd5b 100644 --- a/clang/lib/Parse/ParseExpr.cpp +++ b/clang/lib/Parse/ParseExpr.cpp @@ -997,9 +997,10 @@ ExprResult Parser::ParseCastExpression(bool isUnaryExpression, DS.SetRangeEnd(ILoc); const char *PrevSpec = nullptr; unsigned DiagID; - DS.SetTypeSpecType(TST_typename, ILoc, PrevSpec, DiagID, Typ, + DS.SetTypeSpecType(TypeSpecifierType::TST_typename, ILoc, PrevSpec, + DiagID, Typ, Actions.getASTContext().getPrintingPolicy()); - + Declarator DeclaratorInfo(DS, DeclaratorContext::TypeNameContext); TypeResult Ty = Actions.ActOnTypeName(getCurScope(), DeclaratorInfo); @@ -1205,8 +1206,8 @@ ExprResult Parser::ParseCastExpression(bool isUnaryExpression, const char *PrevSpec = nullptr; unsigned DiagID; - DS.SetTypeSpecType(TST_typename, Tok.getAnnotationEndLoc(), - PrevSpec, DiagID, Type, + DS.SetTypeSpecType(TypeSpecifierType::TST_typename, + Tok.getAnnotationEndLoc(), PrevSpec, DiagID, Type, Actions.getASTContext().getPrintingPolicy()); Declarator DeclaratorInfo(DS, DeclaratorContext::TypeNameContext); diff --git a/clang/lib/Parse/ParseExprCXX.cpp b/clang/lib/Parse/ParseExprCXX.cpp index 554ab24b02e..3e2f4fd5891 100644 --- a/clang/lib/Parse/ParseExprCXX.cpp +++ b/clang/lib/Parse/ParseExprCXX.cpp @@ -1551,7 +1551,7 @@ Parser::ParseCXXPseudoDestructor(Expr *Base, SourceLocation OpLoc, if (Tok.is(tok::kw_decltype) && !FirstTypeName.isValid() && SS.isEmpty()) { DeclSpec DS(AttrFactory); ParseDecltypeSpecifier(DS); - if (DS.getTypeSpecType() == TST_error) + if (DS.getTypeSpecType() == TypeSpecifierType::TST_error) return ExprError(); return Actions.ActOnPseudoDestructorExpr(getCurScope(), Base, OpLoc, OpKind, TildeLoc, DS); diff --git a/clang/lib/Parse/ParseObjc.cpp b/clang/lib/Parse/ParseObjc.cpp index 688376ca28e..4a29ee1b9a4 100644 --- a/clang/lib/Parse/ParseObjc.cpp +++ b/clang/lib/Parse/ParseObjc.cpp @@ -1699,8 +1699,9 @@ void Parser::parseObjCTypeArgsOrProtocolQualifiers( DeclSpec DS(AttrFactory); const char *prevSpec = nullptr; unsigned diagID; - DS.SetTypeSpecType(TST_typename, identifierLocs[i], prevSpec, diagID, - typeArg, Actions.getASTContext().getPrintingPolicy()); + DS.SetTypeSpecType(TypeSpecifierType::TST_typename, identifierLocs[i], + prevSpec, diagID, typeArg, + Actions.getASTContext().getPrintingPolicy()); // Form a declarator to turn this into a type. Declarator D(DS, DeclaratorContext::TypeNameContext); diff --git a/clang/lib/Parse/Parser.cpp b/clang/lib/Parse/Parser.cpp index a6f966eda1b..9e33b3470dd 100644 --- a/clang/lib/Parse/Parser.cpp +++ b/clang/lib/Parse/Parser.cpp @@ -174,7 +174,7 @@ bool Parser::ExpectAndConsumeSemi(unsigned DiagID) { return ExpectAndConsume(tok::semi, DiagID); } -void Parser::ConsumeExtraSemi(ExtraSemiKind Kind, unsigned TST) { +void Parser::ConsumeExtraSemi(ExtraSemiKind Kind, TypeSpecifierType TST) { if (!Tok.is(tok::semi)) return; bool HadMultipleSemis = false; diff --git a/clang/lib/Sema/DeclSpec.cpp b/clang/lib/Sema/DeclSpec.cpp index 2fad5a18ba6..69266933d6d 100644 --- a/clang/lib/Sema/DeclSpec.cpp +++ b/clang/lib/Sema/DeclSpec.cpp @@ -324,51 +324,52 @@ bool Declarator::isDeclarationOfFunction() const { } switch (DS.getTypeSpecType()) { - case TST_atomic: - case TST_auto: - case TST_auto_type: - case TST_bool: - case TST_char: - case TST_char16: - case TST_char32: - case TST_class: - case TST_decimal128: - case TST_decimal32: - case TST_decimal64: - case TST_double: - case TST_Float16: - case TST_float128: - case TST_enum: - case TST_error: - case TST_float: - case TST_half: - case TST_int: - case TST_int128: - case TST_struct: - case TST_interface: - case TST_union: - case TST_unknown_anytype: - case TST_unspecified: - case TST_void: - case TST_wchar: -#define GENERIC_IMAGE_TYPE(ImgType, Id) case TST_##ImgType##_t: + case TypeSpecifierType::TST_atomic: + case TypeSpecifierType::TST_auto: + case TypeSpecifierType::TST_auto_type: + case TypeSpecifierType::TST_bool: + case TypeSpecifierType::TST_char: + case TypeSpecifierType::TST_char16: + case TypeSpecifierType::TST_char32: + case TypeSpecifierType::TST_class: + case TypeSpecifierType::TST_decimal128: + case TypeSpecifierType::TST_decimal32: + case TypeSpecifierType::TST_decimal64: + case TypeSpecifierType::TST_double: + case TypeSpecifierType::TST_Float16: + case TypeSpecifierType::TST_float128: + case TypeSpecifierType::TST_enum: + case TypeSpecifierType::TST_error: + case TypeSpecifierType::TST_float: + case TypeSpecifierType::TST_half: + case TypeSpecifierType::TST_int: + case TypeSpecifierType::TST_int128: + case TypeSpecifierType::TST_struct: + case TypeSpecifierType::TST_interface: + case TypeSpecifierType::TST_union: + case TypeSpecifierType::TST_unknown_anytype: + case TypeSpecifierType::TST_unspecified: + case TypeSpecifierType::TST_void: + case TypeSpecifierType::TST_wchar: +#define GENERIC_IMAGE_TYPE(ImgType, Id) \ + case TypeSpecifierType::TST_##ImgType##_t: #include "clang/Basic/OpenCLImageTypes.def" return false; - case TST_decltype_auto: + case TypeSpecifierType::TST_decltype_auto: // This must have an initializer, so can't be a function declaration, // even if the initializer has function type. return false; - case TST_decltype: - case TST_typeofExpr: + case TypeSpecifierType::TST_decltype: + case TypeSpecifierType::TST_typeofExpr: if (Expr *E = DS.getRepAsExpr()) return E->getType()->isFunctionType(); return false; - case TST_underlyingType: - case TST_typename: - case TST_typeofType: { + case TypeSpecifierType::TST_underlyingType: + case TypeSpecifierType::TST_typename: + case TypeSpecifierType::TST_typeofType: { QualType QT = DS.getRepAsType().get(); if (QT.isNull()) return false; @@ -498,7 +499,8 @@ const char *DeclSpec::getSpecifierName(DeclSpec::TST T, case DeclSpec::TST_unspecified: return "unspecified"; case DeclSpec::TST_void: return "void"; case DeclSpec::TST_char: return "char"; - case DeclSpec::TST_wchar: return Policy.MSWChar ? "__wchar_t" : "wchar_t"; + case DeclSpec::TST_wchar: + return Policy.MSWChar ? "__wchar_t" : "wchar_t"; case DeclSpec::TST_char16: return "char16_t"; case DeclSpec::TST_char32: return "char32_t"; case DeclSpec::TST_int: return "int"; diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp index 2acc896d53d..2433cf2d970 100644 --- a/clang/lib/Sema/SemaCodeComplete.cpp +++ b/clang/lib/Sema/SemaCodeComplete.cpp @@ -4088,7 +4088,7 @@ void Sema::CodeCompleteObjCClassPropertyRefExpr(Scope *S, Results.data(), Results.size()); } -void Sema::CodeCompleteTag(Scope *S, unsigned TagSpec) { +void Sema::CodeCompleteTag(Scope *S, TypeSpecifierType TagSpec) { if (!CodeCompleter) return; diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 743f4bb5e82..b5c990939c5 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -12786,11 +12786,11 @@ TypedefDecl *Sema::ParseTypedefDecl(Scope *S, Declarator &D, QualType T, // class type (or enum type) for linkage purposes only. // We need to check whether the type was declared in the declaration. switch (D.getDeclSpec().getTypeSpecType()) { - case TST_enum: - case TST_struct: - case TST_interface: - case TST_union: - case TST_class: { + case TypeSpecifierType::TST_enum: + case TypeSpecifierType::TST_struct: + case TypeSpecifierType::TST_interface: + case TypeSpecifierType::TST_union: + case TypeSpecifierType::TST_class: { TagDecl *tagFromDeclSpec = cast<TagDecl>(D.getDeclSpec().getRepAsDecl()); setTagNameForLinkagePurposes(tagFromDeclSpec, NewTD); break; @@ -13074,7 +13074,7 @@ static bool isAcceptableTagRedeclContext(Sema &S, DeclContext *OldDC, /// /// \param SkipBody If non-null, will be set to indicate if the caller should /// skip the definition of this tag and treat it as if it were a declaration. -Decl *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, +Decl *Sema::ActOnTag(Scope *S, TypeSpecifierType TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, AttributeList *Attr, AccessSpecifier AS, diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index ceded02e394..ca108491943 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -3775,9 +3775,9 @@ Sema::BuildMemInitializer(Decl *ConstructorD, if (TemplateTypeTy) { BaseType = GetTypeFromParser(TemplateTypeTy, &TInfo); - } else if (DS.getTypeSpecType() == TST_decltype) { + } else if (DS.getTypeSpecType() == TypeSpecifierType::TST_decltype) { BaseType = BuildDecltypeType(DS.getRepAsExpr(), DS.getTypeSpecTypeLoc()); - } else if (DS.getTypeSpecType() == TST_decltype_auto) { + } else if (DS.getTypeSpecType() == TypeSpecifierType::TST_decltype_auto) { Diag(DS.getTypeSpecTypeLoc(), diag::err_decltype_auto_invalid); return true; } else { @@ -13480,11 +13480,10 @@ FriendDecl *Sema::CheckFriendTypeDecl(SourceLocation LocStart, /// Handle a friend tag declaration where the scope specifier was /// templated. Decl *Sema::ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc, - unsigned TagSpec, SourceLocation TagLoc, - CXXScopeSpec &SS, + TypeSpecifierType TagSpec, + SourceLocation TagLoc, CXXScopeSpec &SS, IdentifierInfo *Name, - SourceLocation NameLoc, - AttributeList *Attr, + SourceLocation NameLoc, AttributeList *Attr, MultiTemplateParamsArg TempParamLists) { TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec); diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp index 7c6af5793fc..9cc19672eff 100644 --- a/clang/lib/Sema/SemaTemplate.cpp +++ b/clang/lib/Sema/SemaTemplate.cpp @@ -1152,7 +1152,7 @@ static void SetNestedNameSpecifier(TagDecl *T, const CXXScopeSpec &SS) { } DeclResult -Sema::CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK, +Sema::CheckClassTemplate(Scope *S, TypeSpecifierType TagSpec, TagUseKind TUK, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc, AttributeList *Attr, @@ -7336,7 +7336,7 @@ bool Sema::CheckTemplatePartialSpecializationArgs( } DeclResult -Sema::ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, +Sema::ActOnClassTemplateSpecialization(Scope *S, TypeSpecifierType TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation ModulePrivateLoc, @@ -8506,7 +8506,7 @@ DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, - unsigned TagSpec, + TypeSpecifierType TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS, TemplateTy TemplateD, @@ -8794,7 +8794,7 @@ DeclResult Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc, - unsigned TagSpec, + TypeSpecifierType TagSpec, SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name, @@ -9310,7 +9310,7 @@ DeclResult Sema::ActOnExplicitInstantiation(Scope *S, } TypeResult -Sema::ActOnDependentTag(Scope *S, unsigned TagSpec, TagUseKind TUK, +Sema::ActOnDependentTag(Scope *S, TypeSpecifierType TagSpec, TagUseKind TUK, const CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation TagLoc, SourceLocation NameLoc) { // This has to hold, because SS is expected to be defined. diff --git a/clang/lib/Sema/SemaTemplateVariadic.cpp b/clang/lib/Sema/SemaTemplateVariadic.cpp index d81837dad50..7acdad5572f 100644 --- a/clang/lib/Sema/SemaTemplateVariadic.cpp +++ b/clang/lib/Sema/SemaTemplateVariadic.cpp @@ -791,52 +791,53 @@ Optional<unsigned> Sema::getNumArgumentsInExpansion(QualType T, bool Sema::containsUnexpandedParameterPacks(Declarator &D) { const DeclSpec &DS = D.getDeclSpec(); switch (DS.getTypeSpecType()) { - case TST_typename: - case TST_typeofType: - case TST_underlyingType: - case TST_atomic: { + case TypeSpecifierType::TST_typename: + case TypeSpecifierType::TST_typeofType: + case TypeSpecifierType::TST_underlyingType: + case TypeSpecifierType::TST_atomic: { QualType T = DS.getRepAsType().get(); if (!T.isNull() && T->containsUnexpandedParameterPack()) return true; break; } - case TST_typeofExpr: - case TST_decltype: + case TypeSpecifierType::TST_typeofExpr: + case TypeSpecifierType::TST_decltype: if (DS.getRepAsExpr() && DS.getRepAsExpr()->containsUnexpandedParameterPack()) return true; break; - case TST_unspecified: - case TST_void: - case TST_char: - case TST_wchar: - case TST_char16: - case TST_char32: - case TST_int: - case TST_int128: - case TST_half: - case TST_float: - case TST_double: - case TST_Float16: - case TST_float128: - case TST_bool: - case TST_decimal32: - case TST_decimal64: - case TST_decimal128: - case TST_enum: - case TST_union: - case TST_struct: - case TST_interface: - case TST_class: - case TST_auto: - case TST_auto_type: - case TST_decltype_auto: -#define GENERIC_IMAGE_TYPE(ImgType, Id) case TST_##ImgType##_t: + case TypeSpecifierType::TST_unspecified: + case TypeSpecifierType::TST_void: + case TypeSpecifierType::TST_char: + case TypeSpecifierType::TST_wchar: + case TypeSpecifierType::TST_char16: + case TypeSpecifierType::TST_char32: + case TypeSpecifierType::TST_int: + case TypeSpecifierType::TST_int128: + case TypeSpecifierType::TST_half: + case TypeSpecifierType::TST_float: + case TypeSpecifierType::TST_double: + case TypeSpecifierType::TST_Float16: + case TypeSpecifierType::TST_float128: + case TypeSpecifierType::TST_bool: + case TypeSpecifierType::TST_decimal32: + case TypeSpecifierType::TST_decimal64: + case TypeSpecifierType::TST_decimal128: + case TypeSpecifierType::TST_enum: + case TypeSpecifierType::TST_union: + case TypeSpecifierType::TST_struct: + case TypeSpecifierType::TST_interface: + case TypeSpecifierType::TST_class: + case TypeSpecifierType::TST_auto: + case TypeSpecifierType::TST_auto_type: + case TypeSpecifierType::TST_decltype_auto: +#define GENERIC_IMAGE_TYPE(ImgType, Id) \ + case TypeSpecifierType::TST_##ImgType##_t: #include "clang/Basic/OpenCLImageTypes.def" - case TST_unknown_anytype: - case TST_error: + case TypeSpecifierType::TST_unknown_anytype: + case TypeSpecifierType::TST_error: break; } diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp index 4dab52a9f5f..2cab63f1d3e 100644 --- a/clang/lib/Sema/SemaType.cpp +++ b/clang/lib/Sema/SemaType.cpp @@ -1433,8 +1433,10 @@ static QualType ConvertDeclSpecToType(TypeProcessingState &state) { // If the type is deprecated or unavailable, diagnose it. S.DiagnoseUseOfDecl(D, DS.getTypeSpecTypeNameLoc()); - assert(DS.getTypeSpecWidth() == 0 && DS.getTypeSpecComplex() == 0 && - DS.getTypeSpecSign() == 0 && "No qualifiers on tag names!"); + assert(DS.getTypeSpecWidth() == TypeSpecifierWidth::TSW_unspecified && + DS.getTypeSpecComplex() == 0 && + DS.getTypeSpecSign() == TypeSpecifierSign::TSS_unspecified && + "No qualifiers on tag names!"); // TypeQuals handled by caller. Result = Context.getTypeDeclType(D); @@ -1446,8 +1448,9 @@ static QualType ConvertDeclSpecToType(TypeProcessingState &state) { break; } case DeclSpec::TST_typename: { - assert(DS.getTypeSpecWidth() == 0 && DS.getTypeSpecComplex() == 0 && - DS.getTypeSpecSign() == 0 && + assert(DS.getTypeSpecWidth() == TypeSpecifierWidth::TSW_unspecified && + DS.getTypeSpecComplex() == 0 && + DS.getTypeSpecSign() == TypeSpecifierSign::TSS_unspecified && "Can't handle qualifiers on typedef names yet!"); Result = S.GetTypeFromParser(DS.getRepAsType()); if (Result.isNull()) { @@ -4983,7 +4986,7 @@ TypeSourceInfo *Sema::GetTypeForDeclarator(Declarator &D, Scope *S) { TypeProcessingState state(*this, D); TypeSourceInfo *ReturnTypeInfo = nullptr; - QualType T = GetDeclSpecTypeForDeclarator(state, ReturnTypeInfo); + QualType T = GetDeclSpecTypeForDeclarator(state, ReturnTypeInfo); if (D.isPrototypeContext() && getLangOpts().ObjCAutoRefCount) inferARCWriteback(state, T); @@ -5308,16 +5311,16 @@ namespace { // Set info for the written builtin specifiers. TL.getWrittenBuiltinSpecs() = DS.getWrittenBuiltinSpecs(); // Try to have a meaningful source location. - if (TL.getWrittenSignSpec() != TSS_unspecified) + if (TL.getWrittenSignSpec() != TypeSpecifierSign::TSS_unspecified) TL.expandBuiltinRange(DS.getTypeSpecSignLoc()); - if (TL.getWrittenWidthSpec() != TSW_unspecified) + if (TL.getWrittenWidthSpec() != TypeSpecifierWidth::TSW_unspecified) TL.expandBuiltinRange(DS.getTypeSpecWidthRange()); } } void VisitElaboratedTypeLoc(ElaboratedTypeLoc TL) { ElaboratedTypeKeyword Keyword = TypeWithKeyword::getKeywordForTypeSpec(DS.getTypeSpecType()); - if (DS.getTypeSpecType() == TST_typename) { + if (DS.getTypeSpecType() == TypeSpecifierType::TST_typename) { TypeSourceInfo *TInfo = nullptr; Sema::GetTypeFromParser(DS.getRepAsType(), &TInfo); if (TInfo) { @@ -5333,7 +5336,7 @@ namespace { Visit(TL.getNextTypeLoc().getUnqualifiedLoc()); } void VisitDependentNameTypeLoc(DependentNameTypeLoc TL) { - assert(DS.getTypeSpecType() == TST_typename); + assert(DS.getTypeSpecType() == TypeSpecifierType::TST_typename); TypeSourceInfo *TInfo = nullptr; Sema::GetTypeFromParser(DS.getRepAsType(), &TInfo); assert(TInfo); @@ -5341,7 +5344,7 @@ namespace { } void VisitDependentTemplateSpecializationTypeLoc( DependentTemplateSpecializationTypeLoc TL) { - assert(DS.getTypeSpecType() == TST_typename); + assert(DS.getTypeSpecType() == TypeSpecifierType::TST_typename); TypeSourceInfo *TInfo = nullptr; Sema::GetTypeFromParser(DS.getRepAsType(), &TInfo); assert(TInfo); diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp index 1e72ced2ee3..34f7aaeb115 100644 --- a/clang/lib/Serialization/ASTWriter.cpp +++ b/clang/lib/Serialization/ASTWriter.cpp @@ -590,9 +590,9 @@ void TypeLocWriter::VisitQualifiedTypeLoc(QualifiedTypeLoc TL) { void TypeLocWriter::VisitBuiltinTypeLoc(BuiltinTypeLoc TL) { Record.AddSourceLocation(TL.getBuiltinLoc()); if (TL.needsExtraLocalData()) { - Record.push_back(TL.getWrittenTypeSpec()); - Record.push_back(TL.getWrittenSignSpec()); - Record.push_back(TL.getWrittenWidthSpec()); + Record.push_back(static_cast<unsigned>(TL.getWrittenTypeSpec())); + Record.push_back(static_cast<unsigned>(TL.getWrittenSignSpec())); + Record.push_back(static_cast<unsigned>(TL.getWrittenWidthSpec())); Record.push_back(TL.hasModeAttr()); } } |