diff --git a/clang-tools-extra/clang-doc/BitcodeReader.cpp b/clang-tools-extra/clang-doc/BitcodeReader.cpp index 9ac60fa73a782..8c97186b299fc 100644 --- a/clang-tools-extra/clang-doc/BitcodeReader.cpp +++ b/clang-tools-extra/clang-doc/BitcodeReader.cpp @@ -67,13 +67,13 @@ llvm::Error decodeRecord(const Record &R, AccessSpecifier &Field, llvm::Error decodeRecord(const Record &R, TagTypeKind &Field, llvm::StringRef Blob) { - switch (R[0]) { - case TTK_Struct: - case TTK_Interface: - case TTK_Union: - case TTK_Class: - case TTK_Enum: - Field = (TagTypeKind)R[0]; + switch (static_cast(R[0])) { + case TagTypeKind::Struct: + case TagTypeKind::Interface: + case TagTypeKind::Union: + case TagTypeKind::Class: + case TagTypeKind::Enum: + Field = static_cast(R[0]); return llvm::Error::success(); default: return llvm::createStringError(llvm::inconvertibleErrorCode(), diff --git a/clang-tools-extra/clang-doc/BitcodeWriter.cpp b/clang-tools-extra/clang-doc/BitcodeWriter.cpp index 2ece99a3124ab..7e5a11783d303 100644 --- a/clang-tools-extra/clang-doc/BitcodeWriter.cpp +++ b/clang-tools-extra/clang-doc/BitcodeWriter.cpp @@ -551,7 +551,7 @@ void ClangDocBitcodeWriter::emitBlock(const RecordInfo &I) { emitRecord(*I.DefLoc, RECORD_DEFLOCATION); for (const auto &L : I.Loc) emitRecord(L, RECORD_LOCATION); - emitRecord(I.TagType, RECORD_TAG_TYPE); + emitRecord(llvm::to_underlying(I.TagType), RECORD_TAG_TYPE); emitRecord(I.IsTypeDef, RECORD_IS_TYPE_DEF); for (const auto &N : I.Members) emitBlock(N); @@ -578,7 +578,7 @@ void ClangDocBitcodeWriter::emitBlock(const BaseRecordInfo &I) { emitRecord(I.USR, BASE_RECORD_USR); emitRecord(I.Name, BASE_RECORD_NAME); emitRecord(I.Path, BASE_RECORD_PATH); - emitRecord(I.TagType, BASE_RECORD_TAG_TYPE); + emitRecord(llvm::to_underlying(I.TagType), BASE_RECORD_TAG_TYPE); emitRecord(I.IsVirtual, BASE_RECORD_IS_VIRTUAL); emitRecord(I.Access, BASE_RECORD_ACCESS); emitRecord(I.IsParent, BASE_RECORD_IS_PARENT); diff --git a/clang-tools-extra/clang-doc/Generators.cpp b/clang-tools-extra/clang-doc/Generators.cpp index da19c05ab67b9..a3986b66f3c74 100644 --- a/clang-tools-extra/clang-doc/Generators.cpp +++ b/clang-tools-extra/clang-doc/Generators.cpp @@ -28,15 +28,15 @@ findGeneratorByName(llvm::StringRef Format) { std::string getTagType(TagTypeKind AS) { switch (AS) { - case TagTypeKind::TTK_Class: + case TagTypeKind::Class: return "class"; - case TagTypeKind::TTK_Union: + case TagTypeKind::Union: return "union"; - case TagTypeKind::TTK_Interface: + case TagTypeKind::Interface: return "interface"; - case TagTypeKind::TTK_Struct: + case TagTypeKind::Struct: return "struct"; - case TagTypeKind::TTK_Enum: + case TagTypeKind::Enum: return "enum"; } llvm_unreachable("Unknown TagTypeKind"); diff --git a/clang-tools-extra/clang-doc/Representation.cpp b/clang-tools-extra/clang-doc/Representation.cpp index 3d078d575a127..7dcf646322e6f 100644 --- a/clang-tools-extra/clang-doc/Representation.cpp +++ b/clang-tools-extra/clang-doc/Representation.cpp @@ -239,7 +239,7 @@ RecordInfo::RecordInfo(SymbolID USR, StringRef Name, StringRef Path) void RecordInfo::merge(RecordInfo &&Other) { assert(mergeable(Other)); - if (!TagType) + if (!llvm::to_underlying(TagType)) TagType = Other.TagType; IsTypeDef = IsTypeDef || Other.IsTypeDef; if (Members.empty()) diff --git a/clang-tools-extra/clang-doc/Representation.h b/clang-tools-extra/clang-doc/Representation.h index aa5fa7f07083e..a6b144eb7fa2a 100644 --- a/clang-tools-extra/clang-doc/Representation.h +++ b/clang-tools-extra/clang-doc/Representation.h @@ -350,7 +350,7 @@ struct RecordInfo : public SymbolInfo { void merge(RecordInfo &&I); // Type of this record (struct, class, union, interface). - TagTypeKind TagType = TagTypeKind::TTK_Struct; + TagTypeKind TagType = TagTypeKind::Struct; // Full qualified name of this record, including namespaces and template // specializations. diff --git a/clang-tools-extra/clang-doc/YAMLGenerator.cpp b/clang-tools-extra/clang-doc/YAMLGenerator.cpp index 57cb294e0ab69..b612380a3cfa7 100644 --- a/clang-tools-extra/clang-doc/YAMLGenerator.cpp +++ b/clang-tools-extra/clang-doc/YAMLGenerator.cpp @@ -47,11 +47,11 @@ template <> struct ScalarEnumerationTraits { template <> struct ScalarEnumerationTraits { static void enumeration(IO &IO, clang::TagTypeKind &Value) { - IO.enumCase(Value, "Struct", clang::TagTypeKind::TTK_Struct); - IO.enumCase(Value, "Interface", clang::TagTypeKind::TTK_Interface); - IO.enumCase(Value, "Union", clang::TagTypeKind::TTK_Union); - IO.enumCase(Value, "Class", clang::TagTypeKind::TTK_Class); - IO.enumCase(Value, "Enum", clang::TagTypeKind::TTK_Enum); + IO.enumCase(Value, "Struct", clang::TagTypeKind::Struct); + IO.enumCase(Value, "Interface", clang::TagTypeKind::Interface); + IO.enumCase(Value, "Union", clang::TagTypeKind::Union); + IO.enumCase(Value, "Class", clang::TagTypeKind::Class); + IO.enumCase(Value, "Enum", clang::TagTypeKind::Enum); } }; diff --git a/clang-tools-extra/clangd/refactor/InsertionPoint.cpp b/clang-tools-extra/clangd/refactor/InsertionPoint.cpp index 4b04021a5bd46..e3b11ceb4f016 100644 --- a/clang-tools-extra/clangd/refactor/InsertionPoint.cpp +++ b/clang-tools-extra/clangd/refactor/InsertionPoint.cpp @@ -85,7 +85,8 @@ SourceLocation endLoc(const DeclContext &DC) { } AccessSpecifier getAccessAtEnd(const CXXRecordDecl &C) { - AccessSpecifier Spec = (C.getTagKind() == TTK_Class ? AS_private : AS_public); + AccessSpecifier Spec = + (C.getTagKind() == TagTypeKind::Class ? AS_private : AS_public); for (const auto *D : C.decls()) if (const auto *ASD = llvm::dyn_cast(D)) Spec = ASD->getAccess(); diff --git a/clang-tools-extra/unittests/clang-doc/BitcodeTest.cpp b/clang-tools-extra/unittests/clang-doc/BitcodeTest.cpp index 53e84b1814453..5b9745af7810a 100644 --- a/clang-tools-extra/unittests/clang-doc/BitcodeTest.cpp +++ b/clang-tools-extra/unittests/clang-doc/BitcodeTest.cpp @@ -81,7 +81,7 @@ TEST(BitcodeTest, emitRecordInfoBitcode) { I.Loc.emplace_back(12, llvm::SmallString<16>{"test.cpp"}); I.Members.emplace_back(TypeInfo("int"), "X", AccessSpecifier::AS_private); - I.TagType = TagTypeKind::TTK_Class; + I.TagType = TagTypeKind::Class; I.IsTypeDef = true; I.Bases.emplace_back(EmptySID, "F", "path/to/F", true, AccessSpecifier::AS_public, true); diff --git a/clang-tools-extra/unittests/clang-doc/HTMLGeneratorTest.cpp b/clang-tools-extra/unittests/clang-doc/HTMLGeneratorTest.cpp index 5141259161653..9aabb1ed30e42 100644 --- a/clang-tools-extra/unittests/clang-doc/HTMLGeneratorTest.cpp +++ b/clang-tools-extra/unittests/clang-doc/HTMLGeneratorTest.cpp @@ -154,7 +154,7 @@ TEST(HTMLGeneratorTest, emitRecordHTML) { SmallString<16> PathTo; llvm::sys::path::native("path/to", PathTo); I.Members.emplace_back(TypeInfo("int"), "X", AccessSpecifier::AS_private); - I.TagType = TagTypeKind::TTK_Class; + I.TagType = TagTypeKind::Class; I.Parents.emplace_back(EmptySID, "F", InfoType::IT_record, "F", PathTo); I.VirtualParents.emplace_back(EmptySID, "G", InfoType::IT_record); diff --git a/clang-tools-extra/unittests/clang-doc/MDGeneratorTest.cpp b/clang-tools-extra/unittests/clang-doc/MDGeneratorTest.cpp index 1bbd24eebb784..d3567efd82283 100644 --- a/clang-tools-extra/unittests/clang-doc/MDGeneratorTest.cpp +++ b/clang-tools-extra/unittests/clang-doc/MDGeneratorTest.cpp @@ -86,7 +86,7 @@ TEST(MDGeneratorTest, emitRecordMD) { I.Loc.emplace_back(12, llvm::SmallString<16>{"test.cpp"}); I.Members.emplace_back(TypeInfo("int"), "X", AccessSpecifier::AS_private); - I.TagType = TagTypeKind::TTK_Class; + I.TagType = TagTypeKind::Class; I.Parents.emplace_back(EmptySID, "F", InfoType::IT_record); I.VirtualParents.emplace_back(EmptySID, "G", InfoType::IT_record); diff --git a/clang-tools-extra/unittests/clang-doc/MergeTest.cpp b/clang-tools-extra/unittests/clang-doc/MergeTest.cpp index 51fddb97decf0..9aa76524194b3 100644 --- a/clang-tools-extra/unittests/clang-doc/MergeTest.cpp +++ b/clang-tools-extra/unittests/clang-doc/MergeTest.cpp @@ -84,7 +84,7 @@ TEST(MergeTest, mergeRecordInfos) { One.DefLoc = Location(10, llvm::SmallString<16>{"test.cpp"}); One.Members.emplace_back(TypeInfo("int"), "X", AccessSpecifier::AS_private); - One.TagType = TagTypeKind::TTK_Class; + One.TagType = TagTypeKind::Class; One.Parents.emplace_back(EmptySID, "F", InfoType::IT_record); One.VirtualParents.emplace_back(EmptySID, "G", InfoType::IT_record); @@ -105,7 +105,7 @@ TEST(MergeTest, mergeRecordInfos) { Two.Loc.emplace_back(12, llvm::SmallString<16>{"test.cpp"}); - Two.TagType = TagTypeKind::TTK_Class; + Two.TagType = TagTypeKind::Class; Two.Children.Records.emplace_back(NonEmptySID, "SharedChildStruct", InfoType::IT_record, "path"); @@ -128,7 +128,7 @@ TEST(MergeTest, mergeRecordInfos) { Expected->Members.emplace_back(TypeInfo("int"), "X", AccessSpecifier::AS_private); - Expected->TagType = TagTypeKind::TTK_Class; + Expected->TagType = TagTypeKind::Class; Expected->Parents.emplace_back(EmptySID, "F", InfoType::IT_record); Expected->VirtualParents.emplace_back(EmptySID, "G", InfoType::IT_record); Expected->Bases.emplace_back(EmptySID, "F", "path/to/F", true, diff --git a/clang-tools-extra/unittests/clang-doc/SerializeTest.cpp b/clang-tools-extra/unittests/clang-doc/SerializeTest.cpp index ca370de5a516e..5df42b9f5bca0 100644 --- a/clang-tools-extra/unittests/clang-doc/SerializeTest.cpp +++ b/clang-tools-extra/unittests/clang-doc/SerializeTest.cpp @@ -167,7 +167,7 @@ typedef struct {} G;)raw", RecordInfo ExpectedE(EmptySID, /*Name=*/"E", /*Path=*/"GlobalNamespace"); ExpectedE.Namespace.emplace_back(EmptySID, "GlobalNamespace", InfoType::IT_namespace); - ExpectedE.TagType = TagTypeKind::TTK_Class; + ExpectedE.TagType = TagTypeKind::Class; ExpectedE.DefLoc = Location(0, llvm::SmallString<16>{"test.cpp"}); ExpectedE.Members.emplace_back(TypeInfo("int"), "value", AccessSpecifier::AS_public); @@ -210,7 +210,7 @@ typedef struct {} G;)raw", RecordInfo ExpectedF(EmptySID, /*Name=*/"F", /*Path=*/"GlobalNamespace"); ExpectedF.Namespace.emplace_back(EmptySID, "GlobalNamespace", InfoType::IT_namespace); - ExpectedF.TagType = TagTypeKind::TTK_Struct; + ExpectedF.TagType = TagTypeKind::Struct; ExpectedF.DefLoc = Location(0, llvm::SmallString<16>{"test.cpp"}); CheckRecordInfo(&ExpectedF, F); @@ -253,7 +253,7 @@ typedef struct {} G;)raw", RecordInfo ExpectedG(EmptySID, /*Name=*/"G", /*Path=*/"GlobalNamespace"); ExpectedG.Namespace.emplace_back(EmptySID, "GlobalNamespace", InfoType::IT_namespace); - ExpectedG.TagType = TagTypeKind::TTK_Struct; + ExpectedG.TagType = TagTypeKind::Struct; ExpectedG.DefLoc = Location(0, llvm::SmallString<16>{"test.cpp"}); ExpectedG.IsTypeDef = true; CheckRecordInfo(&ExpectedG, G); @@ -295,7 +295,7 @@ TEST(SerializeTest, emitUndefinedRecordInfo) { RecordInfo ExpectedE(EmptySID, /*Name=*/"E", /*Path=*/"GlobalNamespace"); ExpectedE.Namespace.emplace_back(EmptySID, "GlobalNamespace", InfoType::IT_namespace); - ExpectedE.TagType = TagTypeKind::TTK_Class; + ExpectedE.TagType = TagTypeKind::Class; ExpectedE.Loc.emplace_back(0, llvm::SmallString<16>{"test.cpp"}); CheckRecordInfo(&ExpectedE, E); } @@ -308,7 +308,7 @@ TEST(SerializeTest, emitRecordMemberInfo) { RecordInfo ExpectedE(EmptySID, /*Name=*/"E", /*Path=*/"GlobalNamespace"); ExpectedE.Namespace.emplace_back(EmptySID, "GlobalNamespace", InfoType::IT_namespace); - ExpectedE.TagType = TagTypeKind::TTK_Struct; + ExpectedE.TagType = TagTypeKind::Struct; ExpectedE.DefLoc = Location(0, llvm::SmallString<16>{"test.cpp"}); ExpectedE.Members.emplace_back(TypeInfo("int"), "I", AccessSpecifier::AS_public); @@ -324,7 +324,7 @@ TEST(SerializeTest, emitInternalRecordInfo) { ExpectedE.Namespace.emplace_back(EmptySID, "GlobalNamespace", InfoType::IT_namespace); ExpectedE.DefLoc = Location(0, llvm::SmallString<16>{"test.cpp"}); - ExpectedE.TagType = TagTypeKind::TTK_Class; + ExpectedE.TagType = TagTypeKind::Class; CheckRecordInfo(&ExpectedE, E); RecordInfo *G = InfoAsRecord(Infos[2].get()); @@ -332,7 +332,7 @@ TEST(SerializeTest, emitInternalRecordInfo) { llvm::sys::path::native(ExpectedGPath); RecordInfo ExpectedG(EmptySID, /*Name=*/"G", /*Path=*/ExpectedGPath); ExpectedG.DefLoc = Location(0, llvm::SmallString<16>{"test.cpp"}); - ExpectedG.TagType = TagTypeKind::TTK_Class; + ExpectedG.TagType = TagTypeKind::Class; ExpectedG.Namespace.emplace_back(EmptySID, "E", InfoType::IT_record); ExpectedG.Namespace.emplace_back(EmptySID, "GlobalNamespace", InfoType::IT_namespace); @@ -391,7 +391,7 @@ class J : public I {} ;)raw", RecordInfo ExpectedF(EmptySID, /*Name=*/"F", /*Path=*/"GlobalNamespace"); ExpectedF.Namespace.emplace_back(EmptySID, "GlobalNamespace", InfoType::IT_namespace, ""); - ExpectedF.TagType = TagTypeKind::TTK_Class; + ExpectedF.TagType = TagTypeKind::Class; ExpectedF.DefLoc = Location(0, llvm::SmallString<16>{"test.cpp"}); CheckRecordInfo(&ExpectedF, F); @@ -399,7 +399,7 @@ class J : public I {} ;)raw", RecordInfo ExpectedG(EmptySID, /*Name=*/"G", /*Path=*/"GlobalNamespace"); ExpectedG.Namespace.emplace_back(EmptySID, "GlobalNamespace", InfoType::IT_namespace); - ExpectedG.TagType = TagTypeKind::TTK_Class; + ExpectedG.TagType = TagTypeKind::Class; ExpectedG.DefLoc = Location(0, llvm::SmallString<16>{"test.cpp"}); ExpectedG.Members.emplace_back(TypeInfo("int"), "I", AccessSpecifier::AS_protected); @@ -446,14 +446,14 @@ class J : public I {} ;)raw", ExpectedE.Bases.back().Members.emplace_back(TypeInfo("int"), "I", AccessSpecifier::AS_private); ExpectedE.DefLoc = Location(0, llvm::SmallString<16>{"test.cpp"}); - ExpectedE.TagType = TagTypeKind::TTK_Class; + ExpectedE.TagType = TagTypeKind::Class; CheckRecordInfo(&ExpectedE, E); RecordInfo *H = InfoAsRecord(Infos[8].get()); RecordInfo ExpectedH(EmptySID, /*Name=*/"H", /*Path=*/"GlobalNamespace"); ExpectedH.Namespace.emplace_back(EmptySID, "GlobalNamespace", InfoType::IT_namespace); - ExpectedH.TagType = TagTypeKind::TTK_Class; + ExpectedH.TagType = TagTypeKind::Class; ExpectedH.DefLoc = Location(0, llvm::SmallString<16>{"test.cpp"}); ExpectedH.Parents.emplace_back(EmptySID, /*Name=*/"E", InfoType::IT_record, /*QualName=*/"E", /*Path=*/"GlobalNamespace"); @@ -500,7 +500,7 @@ class J : public I {} ;)raw", RecordInfo ExpectedI(EmptySID, /*Name=*/"I", /*Path=*/"GlobalNamespace"); ExpectedI.Namespace.emplace_back(EmptySID, "GlobalNamespace", InfoType::IT_namespace); - ExpectedI.TagType = TagTypeKind::TTK_Class; + ExpectedI.TagType = TagTypeKind::Class; ExpectedI.DefLoc = Location(0, llvm::SmallString<16>{"test.cpp"}); CheckRecordInfo(&ExpectedI, I); @@ -514,7 +514,7 @@ class J : public I {} ;)raw", /*Path=*/"GlobalNamespace", false, AccessSpecifier::AS_public, true); ExpectedJ.DefLoc = Location(0, llvm::SmallString<16>{"test.cpp"}); - ExpectedJ.TagType = TagTypeKind::TTK_Class; + ExpectedJ.TagType = TagTypeKind::Class; CheckRecordInfo(&ExpectedJ, J); } diff --git a/clang-tools-extra/unittests/clang-doc/YAMLGeneratorTest.cpp b/clang-tools-extra/unittests/clang-doc/YAMLGeneratorTest.cpp index 535d49169b5df..9b1d87dfa0135 100644 --- a/clang-tools-extra/unittests/clang-doc/YAMLGeneratorTest.cpp +++ b/clang-tools-extra/unittests/clang-doc/YAMLGeneratorTest.cpp @@ -101,7 +101,7 @@ TEST(YAMLGeneratorTest, emitRecordYAML) { Brief->Children.back()->Text = "Value of the thing."; I.Members.back().Description.push_back(std::move(TopComment)); - I.TagType = TagTypeKind::TTK_Class; + I.TagType = TagTypeKind::Class; I.Bases.emplace_back(EmptySID, "F", "path/to/F", true, AccessSpecifier::AS_public, true); I.Bases.back().Children.Functions.emplace_back(); diff --git a/clang/include/clang/AST/ASTContext.h b/clang/include/clang/AST/ASTContext.h index e5f78dfdc22ab..6bb3082472239 100644 --- a/clang/include/clang/AST/ASTContext.h +++ b/clang/include/clang/AST/ASTContext.h @@ -1197,8 +1197,9 @@ class ASTContext : public RefCountedBase { /// Create a new implicit TU-level CXXRecordDecl or RecordDecl /// declaration. - RecordDecl *buildImplicitRecord(StringRef Name, - RecordDecl::TagKind TK = TTK_Struct) const; + RecordDecl *buildImplicitRecord( + StringRef Name, + RecordDecl::TagKind TK = RecordDecl::TagKind::Struct) const; /// Create a new implicit TU-level typedef declaration. TypedefDecl *buildImplicitTypedef(QualType T, StringRef Name) const; diff --git a/clang/include/clang/AST/Decl.h b/clang/include/clang/AST/Decl.h index d8ea8c1dfb4f2..d8495f2c34940 100644 --- a/clang/include/clang/AST/Decl.h +++ b/clang/include/clang/AST/Decl.h @@ -3703,13 +3703,15 @@ class TagDecl : public TypeDecl, return static_cast(TagDeclBits.TagDeclKind); } - void setTagKind(TagKind TK) { TagDeclBits.TagDeclKind = TK; } + void setTagKind(TagKind TK) { + TagDeclBits.TagDeclKind = llvm::to_underlying(TK); + } - bool isStruct() const { return getTagKind() == TTK_Struct; } - bool isInterface() const { return getTagKind() == TTK_Interface; } - bool isClass() const { return getTagKind() == TTK_Class; } - bool isUnion() const { return getTagKind() == TTK_Union; } - bool isEnum() const { return getTagKind() == TTK_Enum; } + bool isStruct() const { return getTagKind() == TagTypeKind::Struct; } + bool isInterface() const { return getTagKind() == TagTypeKind::Interface; } + bool isClass() const { return getTagKind() == TagTypeKind::Class; } + bool isUnion() const { return getTagKind() == TagTypeKind::Union; } + bool isEnum() const { return getTagKind() == TagTypeKind::Enum; } /// Is this tag type named, either directly or via being defined in /// a typedef of this type? diff --git a/clang/include/clang/AST/Type.h b/clang/include/clang/AST/Type.h index f64cd5e0ef649..42e9b8f94b4e7 100644 --- a/clang/include/clang/AST/Type.h +++ b/clang/include/clang/AST/Type.h @@ -5718,21 +5718,21 @@ enum class ElaboratedTypeKeyword { }; /// The kind of a tag type. -enum TagTypeKind { +enum class TagTypeKind { /// The "struct" keyword. - TTK_Struct, + Struct, /// The "__interface" keyword. - TTK_Interface, + Interface, /// The "union" keyword. - TTK_Union, + Union, /// The "class" keyword. - TTK_Class, + Class, /// The "enum" keyword. - TTK_Enum + Enum }; /// A helper class for Type nodes having an ElaboratedTypeKeyword. diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index 1cb81cffd37ea..da90136752210 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -6525,12 +6525,12 @@ bool ASTContext::isSameEntity(const NamedDecl *X, const NamedDecl *Y) const { if (const auto *TagX = dyn_cast(X)) { const auto *TagY = cast(Y); return (TagX->getTagKind() == TagY->getTagKind()) || - ((TagX->getTagKind() == TTK_Struct || - TagX->getTagKind() == TTK_Class || - TagX->getTagKind() == TTK_Interface) && - (TagY->getTagKind() == TTK_Struct || - TagY->getTagKind() == TTK_Class || - TagY->getTagKind() == TTK_Interface)); + ((TagX->getTagKind() == TagTypeKind::Struct || + TagX->getTagKind() == TagTypeKind::Class || + TagX->getTagKind() == TagTypeKind::Interface) && + (TagY->getTagKind() == TagTypeKind::Struct || + TagY->getTagKind() == TagTypeKind::Class || + TagY->getTagKind() == TagTypeKind::Interface)); } // Functions with the same type and linkage match. diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp index 42ba8582c46de..ed848e5742334 100644 --- a/clang/lib/AST/Decl.cpp +++ b/clang/lib/AST/Decl.cpp @@ -4639,8 +4639,8 @@ TagDecl::TagDecl(Kind DK, TagKind TK, const ASTContext &C, DeclContext *DC, SourceLocation StartL) : TypeDecl(DK, DC, L, Id, StartL), DeclContext(DK), redeclarable_base(C), TypedefNameDeclOrQualifier((TypedefNameDecl *)nullptr) { - assert((DK != Enum || TK == TTK_Enum) && - "EnumDecl not matched with TTK_Enum"); + assert((DK != Enum || TK == TagTypeKind::Enum) && + "EnumDecl not matched with TagTypeKind::Enum"); setPreviousDecl(PrevDecl); setTagKind(TK); setCompleteDefinition(false); @@ -4773,7 +4773,7 @@ void TagDecl::setTemplateParameterListsInfo( EnumDecl::EnumDecl(ASTContext &C, DeclContext *DC, SourceLocation StartLoc, SourceLocation IdLoc, IdentifierInfo *Id, EnumDecl *PrevDecl, bool Scoped, bool ScopedUsingClassTag, bool Fixed) - : TagDecl(Enum, TTK_Enum, C, DC, IdLoc, Id, PrevDecl, StartLoc) { + : TagDecl(Enum, TagTypeKind::Enum, C, DC, IdLoc, Id, PrevDecl, StartLoc) { assert(Scoped || !ScopedUsingClassTag); IntegerType = nullptr; setNumPositiveBits(0); @@ -4962,9 +4962,9 @@ RecordDecl *RecordDecl::Create(const ASTContext &C, TagKind TK, DeclContext *DC, } RecordDecl *RecordDecl::CreateDeserialized(const ASTContext &C, unsigned ID) { - RecordDecl *R = - new (C, ID) RecordDecl(Record, TTK_Struct, C, nullptr, SourceLocation(), - SourceLocation(), nullptr, nullptr); + RecordDecl *R = new (C, ID) + RecordDecl(Record, TagTypeKind::Struct, C, nullptr, SourceLocation(), + SourceLocation(), nullptr, nullptr); R->setMayHaveOutOfDateDef(C.getLangOpts().Modules); return R; } diff --git a/clang/lib/AST/DeclCXX.cpp b/clang/lib/AST/DeclCXX.cpp index 4002c63e9f94c..c944862fcefee 100644 --- a/clang/lib/AST/DeclCXX.cpp +++ b/clang/lib/AST/DeclCXX.cpp @@ -148,8 +148,8 @@ CXXRecordDecl::CreateLambda(const ASTContext &C, DeclContext *DC, TypeSourceInfo *Info, SourceLocation Loc, unsigned DependencyKind, bool IsGeneric, LambdaCaptureDefault CaptureDefault) { - auto *R = new (C, DC) CXXRecordDecl(CXXRecord, TTK_Class, C, DC, Loc, Loc, - nullptr, nullptr); + auto *R = new (C, DC) CXXRecordDecl(CXXRecord, TagTypeKind::Class, C, DC, Loc, + Loc, nullptr, nullptr); R->setBeingDefined(true); R->DefinitionData = new (C) struct LambdaDefinitionData( R, Info, DependencyKind, IsGeneric, CaptureDefault); @@ -162,9 +162,9 @@ CXXRecordDecl::CreateLambda(const ASTContext &C, DeclContext *DC, CXXRecordDecl * CXXRecordDecl::CreateDeserialized(const ASTContext &C, unsigned ID) { - auto *R = new (C, ID) CXXRecordDecl( - CXXRecord, TTK_Struct, C, nullptr, SourceLocation(), SourceLocation(), - nullptr, nullptr); + auto *R = new (C, ID) + CXXRecordDecl(CXXRecord, TagTypeKind::Struct, C, nullptr, + SourceLocation(), SourceLocation(), nullptr, nullptr); R->setMayHaveOutOfDateDef(false); return R; } @@ -692,11 +692,10 @@ bool CXXRecordDecl::lambdaIsDefaultConstructibleAndAssignable() const { } void CXXRecordDecl::addedMember(Decl *D) { - if (!D->isImplicit() && - !isa(D) && - !isa(D) && - (!isa(D) || cast(D)->getTagKind() == TTK_Class || - cast(D)->getTagKind() == TTK_Interface)) + if (!D->isImplicit() && !isa(D) && !isa(D) && + (!isa(D) || + cast(D)->getTagKind() == TagTypeKind::Class || + cast(D)->getTagKind() == TagTypeKind::Interface)) data().HasOnlyCMembers = false; // Ignore friends and invalid declarations. @@ -1510,7 +1509,8 @@ void CXXRecordDecl::setTrivialForCallFlags(CXXMethodDecl *D) { } bool CXXRecordDecl::isCLike() const { - if (getTagKind() == TTK_Class || getTagKind() == TTK_Interface || + if (getTagKind() == TagTypeKind::Class || + getTagKind() == TagTypeKind::Interface || !TemplateOrInstantiation.isNull()) return false; if (!hasDefinition()) diff --git a/clang/lib/AST/DeclTemplate.cpp b/clang/lib/AST/DeclTemplate.cpp index be385ca115254..7d7556e670f95 100644 --- a/clang/lib/AST/DeclTemplate.cpp +++ b/clang/lib/AST/DeclTemplate.cpp @@ -920,7 +920,7 @@ ClassTemplateSpecializationDecl(ASTContext &Context, Kind DK, TagKind TK, ClassTemplateSpecializationDecl::ClassTemplateSpecializationDecl(ASTContext &C, Kind DK) - : CXXRecordDecl(DK, TTK_Struct, C, nullptr, SourceLocation(), + : CXXRecordDecl(DK, TagTypeKind::Struct, C, nullptr, SourceLocation(), SourceLocation(), nullptr, nullptr), SpecializationKind(TSK_Undeclared) {} diff --git a/clang/lib/AST/MicrosoftMangle.cpp b/clang/lib/AST/MicrosoftMangle.cpp index b7cfcbc9dfa46..50ab6ea59be9d 100644 --- a/clang/lib/AST/MicrosoftMangle.cpp +++ b/clang/lib/AST/MicrosoftMangle.cpp @@ -1312,9 +1312,9 @@ void MicrosoftCXXNameMangler::mangleNestedName(GlobalDecl GD) { if (PointersAre64Bit) Out << 'E'; Out << 'A'; - mangleArtificialTagType(TTK_Struct, - Discriminate("__block_literal", Discriminator, - ParameterDiscriminator)); + mangleArtificialTagType(TagTypeKind::Struct, + Discriminate("__block_literal", Discriminator, + ParameterDiscriminator)); Out << "@Z"; // If the effective context was a Record, we have fully mangled the @@ -1974,9 +1974,9 @@ void MicrosoftCXXNameMangler::mangleObjCProtocol(const ObjCProtocolDecl *PD) { Stream << "?$"; Extra.mangleSourceName("Protocol"); - Extra.mangleArtificialTagType(TTK_Struct, PD->getName()); + Extra.mangleArtificialTagType(TagTypeKind::Struct, PD->getName()); - mangleArtificialTagType(TTK_Struct, TemplateMangling, {"__ObjC"}); + mangleArtificialTagType(TagTypeKind::Struct, TemplateMangling, {"__ObjC"}); } void MicrosoftCXXNameMangler::mangleObjCLifetime(const QualType Type, @@ -2005,7 +2005,7 @@ void MicrosoftCXXNameMangler::mangleObjCLifetime(const QualType Type, Extra.manglePointerExtQualifiers(Quals, Type); Extra.mangleType(Type, Range); - mangleArtificialTagType(TTK_Struct, TemplateMangling, {"__ObjC"}); + mangleArtificialTagType(TagTypeKind::Struct, TemplateMangling, {"__ObjC"}); } void MicrosoftCXXNameMangler::mangleObjCKindOfType(const ObjCObjectType *T, @@ -2022,7 +2022,7 @@ void MicrosoftCXXNameMangler::mangleObjCKindOfType(const ObjCObjectType *T, ->castAs(), Quals, Range); - mangleArtificialTagType(TTK_Struct, TemplateMangling, {"__ObjC"}); + mangleArtificialTagType(TagTypeKind::Struct, TemplateMangling, {"__ObjC"}); } void MicrosoftCXXNameMangler::mangleQualifiers(Qualifiers Quals, @@ -2223,7 +2223,8 @@ void MicrosoftCXXNameMangler::manglePassObjectSizeArg( if (Found == FunArgBackReferences.end()) { std::string Name = Dynamic ? "__pass_dynamic_object_size" : "__pass_object_size"; - mangleArtificialTagType(TTK_Enum, Name + llvm::utostr(Type), {"__clang"}); + mangleArtificialTagType(TagTypeKind::Enum, Name + llvm::utostr(Type), + {"__clang"}); if (FunArgBackReferences.size() < 10) { size_t Size = FunArgBackReferences.size(); @@ -2304,7 +2305,7 @@ void MicrosoftCXXNameMangler::mangleAddressSpaceType(QualType T, Extra.mangleType(T, Range, QMM_Escape); mangleQualifiers(Qualifiers(), false); - mangleArtificialTagType(TTK_Struct, ASMangling, {"__clang"}); + mangleArtificialTagType(TagTypeKind::Struct, ASMangling, {"__clang"}); } void MicrosoftCXXNameMangler::mangleType(QualType T, SourceRange Range, @@ -2486,13 +2487,13 @@ void MicrosoftCXXNameMangler::mangleType(const BuiltinType *T, Qualifiers, llvm_unreachable("placeholder types shouldn't get to name mangling"); case BuiltinType::ObjCId: - mangleArtificialTagType(TTK_Struct, "objc_object"); + mangleArtificialTagType(TagTypeKind::Struct, "objc_object"); break; case BuiltinType::ObjCClass: - mangleArtificialTagType(TTK_Struct, "objc_class"); + mangleArtificialTagType(TagTypeKind::Struct, "objc_class"); break; case BuiltinType::ObjCSel: - mangleArtificialTagType(TTK_Struct, "objc_selector"); + mangleArtificialTagType(TagTypeKind::Struct, "objc_selector"); break; #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \ @@ -2502,27 +2503,27 @@ void MicrosoftCXXNameMangler::mangleType(const BuiltinType *T, Qualifiers, #include "clang/Basic/OpenCLImageTypes.def" case BuiltinType::OCLSampler: Out << "PA"; - mangleArtificialTagType(TTK_Struct, "ocl_sampler"); + mangleArtificialTagType(TagTypeKind::Struct, "ocl_sampler"); break; case BuiltinType::OCLEvent: Out << "PA"; - mangleArtificialTagType(TTK_Struct, "ocl_event"); + mangleArtificialTagType(TagTypeKind::Struct, "ocl_event"); break; case BuiltinType::OCLClkEvent: Out << "PA"; - mangleArtificialTagType(TTK_Struct, "ocl_clkevent"); + mangleArtificialTagType(TagTypeKind::Struct, "ocl_clkevent"); break; case BuiltinType::OCLQueue: Out << "PA"; - mangleArtificialTagType(TTK_Struct, "ocl_queue"); + mangleArtificialTagType(TagTypeKind::Struct, "ocl_queue"); break; case BuiltinType::OCLReserveID: Out << "PA"; - mangleArtificialTagType(TTK_Struct, "ocl_reserveid"); + mangleArtificialTagType(TagTypeKind::Struct, "ocl_reserveid"); break; -#define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \ - case BuiltinType::Id: \ - mangleArtificialTagType(TTK_Struct, "ocl_" #ExtType); \ +#define EXT_OPAQUE_TYPE(ExtType, Id, Ext) \ + case BuiltinType::Id: \ + mangleArtificialTagType(TagTypeKind::Struct, "ocl_" #ExtType); \ break; #include "clang/Basic/OpenCLExtensionTypes.def" @@ -2531,12 +2532,12 @@ void MicrosoftCXXNameMangler::mangleType(const BuiltinType *T, Qualifiers, break; case BuiltinType::Float16: - mangleArtificialTagType(TTK_Struct, "_Float16", {"__clang"}); + mangleArtificialTagType(TagTypeKind::Struct, "_Float16", {"__clang"}); break; case BuiltinType::Half: if (!getASTContext().getLangOpts().HLSL) - mangleArtificialTagType(TTK_Struct, "_Half", {"__clang"}); + mangleArtificialTagType(TagTypeKind::Struct, "_Half", {"__clang"}); else if (getASTContext().getLangOpts().NativeHalfType) Out << "$f16@"; else @@ -2544,13 +2545,13 @@ void MicrosoftCXXNameMangler::mangleType(const BuiltinType *T, Qualifiers, break; case BuiltinType::BFloat16: - mangleArtificialTagType(TTK_Struct, "__bf16", {"__clang"}); + mangleArtificialTagType(TagTypeKind::Struct, "__bf16", {"__clang"}); break; #define WASM_REF_TYPE(InternalName, MangledName, Id, SingletonId, AS) \ case BuiltinType::Id: \ - mangleArtificialTagType(TTK_Struct, MangledName); \ - mangleArtificialTagType(TTK_Struct, MangledName, {"__clang"}); \ + mangleArtificialTagType(TagTypeKind::Struct, MangledName); \ + mangleArtificialTagType(TagTypeKind::Struct, MangledName, {"__clang"}); \ break; #include "clang/Basic/WebAssemblyReferenceTypes.def" @@ -2917,19 +2918,19 @@ void MicrosoftCXXNameMangler::mangleType(const UnresolvedUsingType *T, // ::= W4 void MicrosoftCXXNameMangler::mangleTagTypeKind(TagTypeKind TTK) { switch (TTK) { - case TTK_Union: - Out << 'T'; - break; - case TTK_Struct: - case TTK_Interface: - Out << 'U'; - break; - case TTK_Class: - Out << 'V'; - break; - case TTK_Enum: - Out << "W4"; - break; + case TagTypeKind::Union: + Out << 'T'; + break; + case TagTypeKind::Struct: + case TagTypeKind::Interface: + Out << 'U'; + break; + case TagTypeKind::Class: + Out << 'V'; + break; + case TagTypeKind::Enum: + Out << "W4"; + break; } } void MicrosoftCXXNameMangler::mangleType(const EnumType *T, Qualifiers, @@ -3139,11 +3140,11 @@ void MicrosoftCXXNameMangler::mangleType(const ComplexType *T, Qualifiers, Extra.mangleSourceName("_Complex"); Extra.mangleType(ElementType, Range, QMM_Escape); - mangleArtificialTagType(TTK_Struct, TemplateMangling, {"__clang"}); + mangleArtificialTagType(TagTypeKind::Struct, TemplateMangling, {"__clang"}); } // Returns true for types that mangleArtificialTagType() gets called for with -// TTK_Union, TTK_Struct, TTK_Class and where compatibility with MSVC's +// TagTypeKind Union, Struct, Class and where compatibility with MSVC's // mangling matters. // (It doesn't matter for Objective-C types and the like that cl.exe doesn't // support.) @@ -3176,14 +3177,17 @@ void MicrosoftCXXNameMangler::mangleType(const VectorType *T, Qualifiers Quals, if (!isa(T)) { if (getASTContext().getTargetInfo().getTriple().isX86() && ET) { if (Width == 64 && ET->getKind() == BuiltinType::LongLong) { - mangleArtificialTagType(TTK_Union, "__m64"); + mangleArtificialTagType(TagTypeKind::Union, "__m64"); } else if (Width >= 128) { if (ET->getKind() == BuiltinType::Float) - mangleArtificialTagType(TTK_Union, "__m" + llvm::utostr(Width)); + mangleArtificialTagType(TagTypeKind::Union, + "__m" + llvm::utostr(Width)); else if (ET->getKind() == BuiltinType::LongLong) - mangleArtificialTagType(TTK_Union, "__m" + llvm::utostr(Width) + 'i'); + mangleArtificialTagType(TagTypeKind::Union, + "__m" + llvm::utostr(Width) + 'i'); else if (ET->getKind() == BuiltinType::Double) - mangleArtificialTagType(TTK_Struct, "__m" + llvm::utostr(Width) + 'd'); + mangleArtificialTagType(TagTypeKind::Struct, + "__m" + llvm::utostr(Width) + 'd'); } } } @@ -3203,7 +3207,7 @@ void MicrosoftCXXNameMangler::mangleType(const VectorType *T, Qualifiers Quals, Range, QMM_Escape); Extra.mangleIntegerLiteral(llvm::APSInt::getUnsigned(T->getNumElements())); - mangleArtificialTagType(TTK_Union, TemplateMangling, {"__clang"}); + mangleArtificialTagType(TagTypeKind::Union, TemplateMangling, {"__clang"}); } } @@ -3259,7 +3263,7 @@ void MicrosoftCXXNameMangler::mangleType(const DependentAddressSpaceType *T, void MicrosoftCXXNameMangler::mangleType(const ObjCInterfaceType *T, Qualifiers, SourceRange) { // ObjC interfaces have structs underlying them. - mangleTagTypeKind(TTK_Struct); + mangleTagTypeKind(TagTypeKind::Struct); mangleName(T->getDecl()); } @@ -3279,7 +3283,7 @@ void MicrosoftCXXNameMangler::mangleType(const ObjCObjectType *T, TemplateArgBackReferences.swap(OuterTemplateArgsContext); NameBackReferences.swap(OuterTemplateContext); - mangleTagTypeKind(TTK_Struct); + mangleTagTypeKind(TagTypeKind::Struct); Out << "?$"; if (T->isObjCId()) @@ -3427,7 +3431,7 @@ void MicrosoftCXXNameMangler::mangleType(const AtomicType *T, Qualifiers, Extra.mangleSourceName("_Atomic"); Extra.mangleType(ValueType, Range, QMM_Escape); - mangleArtificialTagType(TTK_Struct, TemplateMangling, {"__clang"}); + mangleArtificialTagType(TagTypeKind::Struct, TemplateMangling, {"__clang"}); } void MicrosoftCXXNameMangler::mangleType(const PipeType *T, Qualifiers, @@ -3442,7 +3446,7 @@ void MicrosoftCXXNameMangler::mangleType(const PipeType *T, Qualifiers, Extra.mangleType(ElementType, Range, QMM_Escape); Extra.mangleIntegerLiteral(llvm::APSInt::get(T->isReadOnly())); - mangleArtificialTagType(TTK_Struct, TemplateMangling, {"__clang"}); + mangleArtificialTagType(TagTypeKind::Struct, TemplateMangling, {"__clang"}); } void MicrosoftMangleContextImpl::mangleCXXName(GlobalDecl GD, @@ -3482,7 +3486,7 @@ void MicrosoftCXXNameMangler::mangleType(const BitIntType *T, Qualifiers, Extra.mangleSourceName("_BitInt"); Extra.mangleIntegerLiteral(llvm::APSInt::getUnsigned(T->getNumBits())); - mangleArtificialTagType(TTK_Struct, TemplateMangling, {"__clang"}); + mangleArtificialTagType(TagTypeKind::Struct, TemplateMangling, {"__clang"}); } void MicrosoftCXXNameMangler::mangleType(const DependentBitIntType *T, diff --git a/clang/lib/AST/RecordLayoutBuilder.cpp b/clang/lib/AST/RecordLayoutBuilder.cpp index 5d4f930fca50e..a51c8b938f411 100644 --- a/clang/lib/AST/RecordLayoutBuilder.cpp +++ b/clang/lib/AST/RecordLayoutBuilder.cpp @@ -2267,9 +2267,12 @@ ItaniumRecordLayoutBuilder::updateExternalFieldOffset(const FieldDecl *Field, /// \returns diagnostic %select index. static unsigned getPaddingDiagFromTagKind(TagTypeKind Tag) { switch (Tag) { - case TTK_Struct: return 0; - case TTK_Interface: return 1; - case TTK_Class: return 2; + case TagTypeKind::Struct: + return 0; + case TagTypeKind::Interface: + return 1; + case TagTypeKind::Class: + return 2; default: llvm_unreachable("Invalid tag kind for field padding diagnostic!"); } } diff --git a/clang/lib/AST/Type.cpp b/clang/lib/AST/Type.cpp index d1cbfbd150ba5..4dd4e926c8104 100644 --- a/clang/lib/AST/Type.cpp +++ b/clang/lib/AST/Type.cpp @@ -3035,11 +3035,16 @@ TypeWithKeyword::getKeywordForTypeSpec(unsigned TypeSpec) { 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; + case TST_class: + return TagTypeKind::Class; + case TST_struct: + return TagTypeKind::Struct; + case TST_interface: + return TagTypeKind::Interface; + case TST_union: + return TagTypeKind::Union; + case TST_enum: + return TagTypeKind::Enum; } llvm_unreachable("Type specifier is not a tag type kind."); @@ -3048,15 +3053,15 @@ TypeWithKeyword::getTagTypeKindForTypeSpec(unsigned TypeSpec) { ElaboratedTypeKeyword TypeWithKeyword::getKeywordForTagTypeKind(TagTypeKind Kind) { switch (Kind) { - case TTK_Class: + case TagTypeKind::Class: return ElaboratedTypeKeyword::Class; - case TTK_Struct: + case TagTypeKind::Struct: return ElaboratedTypeKeyword::Struct; - case TTK_Interface: + case TagTypeKind::Interface: return ElaboratedTypeKeyword::Interface; - case TTK_Union: + case TagTypeKind::Union: return ElaboratedTypeKeyword::Union; - case TTK_Enum: + case TagTypeKind::Enum: return ElaboratedTypeKeyword::Enum; } llvm_unreachable("Unknown tag type kind."); @@ -3066,15 +3071,15 @@ TagTypeKind TypeWithKeyword::getTagTypeKindForKeyword(ElaboratedTypeKeyword Keyword) { switch (Keyword) { case ElaboratedTypeKeyword::Class: - return TTK_Class; + return TagTypeKind::Class; case ElaboratedTypeKeyword::Struct: - return TTK_Struct; + return TagTypeKind::Struct; case ElaboratedTypeKeyword::Interface: - return TTK_Interface; + return TagTypeKind::Interface; case ElaboratedTypeKeyword::Union: - return TTK_Union; + return TagTypeKind::Union; case ElaboratedTypeKeyword::Enum: - return TTK_Enum; + return TagTypeKind::Enum; case ElaboratedTypeKeyword::None: // Fall through. case ElaboratedTypeKeyword::Typename: llvm_unreachable("Elaborated type keyword is not a tag type kind."); diff --git a/clang/lib/CodeGen/CGObjCMac.cpp b/clang/lib/CodeGen/CGObjCMac.cpp index b7aa3a4cb6373..6dd7ca64e5221 100644 --- a/clang/lib/CodeGen/CGObjCMac.cpp +++ b/clang/lib/CodeGen/CGObjCMac.cpp @@ -5757,10 +5757,9 @@ ObjCCommonTypesHelper::ObjCCommonTypesHelper(CodeGen::CodeGenModule &cgm) // id self; // Class cls; // } - RecordDecl *RD = RecordDecl::Create(Ctx, TTK_Struct, - Ctx.getTranslationUnitDecl(), - SourceLocation(), SourceLocation(), - &Ctx.Idents.get("_objc_super")); + RecordDecl *RD = RecordDecl::Create( + Ctx, TagTypeKind::Struct, Ctx.getTranslationUnitDecl(), SourceLocation(), + SourceLocation(), &Ctx.Idents.get("_objc_super")); RD->addDecl(FieldDecl::Create(Ctx, RD, SourceLocation(), SourceLocation(), nullptr, Ctx.getObjCIdType(), nullptr, nullptr, false, ICIS_NoInit)); @@ -6110,10 +6109,9 @@ ObjCNonFragileABITypesHelper::ObjCNonFragileABITypesHelper(CodeGen::CodeGenModul // }; // First the clang type for struct _message_ref_t - RecordDecl *RD = RecordDecl::Create(Ctx, TTK_Struct, - Ctx.getTranslationUnitDecl(), - SourceLocation(), SourceLocation(), - &Ctx.Idents.get("_message_ref_t")); + RecordDecl *RD = RecordDecl::Create( + Ctx, TagTypeKind::Struct, Ctx.getTranslationUnitDecl(), SourceLocation(), + SourceLocation(), &Ctx.Idents.get("_message_ref_t")); RD->addDecl(FieldDecl::Create(Ctx, RD, SourceLocation(), SourceLocation(), nullptr, Ctx.VoidPtrTy, nullptr, nullptr, false, ICIS_NoInit)); diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp index 34c9c02884ec5..632a447241849 100644 --- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp +++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp @@ -3041,7 +3041,7 @@ createKmpTaskTRecordDecl(CodeGenModule &CGM, OpenMPDirectiveKind Kind, // kmp_int32 liter; // void * reductions; // }; - RecordDecl *UD = C.buildImplicitRecord("kmp_cmplrdata_t", TTK_Union); + RecordDecl *UD = C.buildImplicitRecord("kmp_cmplrdata_t", TagTypeKind::Union); UD->startDefinition(); addFieldToRecordDecl(C, UD, KmpInt32Ty); addFieldToRecordDecl(C, UD, KmpRoutineEntryPointerQTy); diff --git a/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp b/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp index 009b3f0a85a37..370613e75420e 100644 --- a/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp +++ b/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp @@ -806,7 +806,7 @@ void CGOpenMPRuntimeGPU::emitKernelDeinit(CodeGenFunction &CGF, // This is temporary until we remove the fixed sized buffer. ASTContext &C = CGM.getContext(); RecordDecl *StaticRD = C.buildImplicitRecord( - "_openmp_teams_reduction_type_$_", RecordDecl::TagKind::TTK_Union); + "_openmp_teams_reduction_type_$_", RecordDecl::TagKind::Union); StaticRD->startDefinition(); for (const RecordDecl *TeamReductionRec : TeamsReductions) { QualType RecTy = C.getRecordType(TeamReductionRec); diff --git a/clang/lib/Frontend/Rewrite/RewriteModernObjC.cpp b/clang/lib/Frontend/Rewrite/RewriteModernObjC.cpp index c645355d5aecd..c458700837f4e 100644 --- a/clang/lib/Frontend/Rewrite/RewriteModernObjC.cpp +++ b/clang/lib/Frontend/Rewrite/RewriteModernObjC.cpp @@ -864,9 +864,9 @@ RewriteModernObjC::getIvarAccessString(ObjCIvarDecl *D) { CDecl = CatDecl->getClassInterface(); std::string RecName = std::string(CDecl->getName()); RecName += "_IMPL"; - RecordDecl *RD = - RecordDecl::Create(*Context, TTK_Struct, TUDecl, SourceLocation(), - SourceLocation(), &Context->Idents.get(RecName)); + RecordDecl *RD = RecordDecl::Create(*Context, TagTypeKind::Struct, TUDecl, + SourceLocation(), SourceLocation(), + &Context->Idents.get(RecName)); QualType PtrStructIMPL = Context->getPointerType(Context->getTagDeclType(RD)); unsigned UnsignedIntSize = static_cast(Context->getTypeSize(Context->UnsignedIntTy)); @@ -2978,9 +2978,9 @@ Stmt *RewriteModernObjC::RewriteObjCDictionaryLiteralExpr(ObjCDictionaryLiteral // }; QualType RewriteModernObjC::getSuperStructType() { if (!SuperStructDecl) { - SuperStructDecl = RecordDecl::Create(*Context, TTK_Struct, TUDecl, - SourceLocation(), SourceLocation(), - &Context->Idents.get("__rw_objc_super")); + SuperStructDecl = RecordDecl::Create( + *Context, TagTypeKind::Struct, TUDecl, SourceLocation(), + SourceLocation(), &Context->Idents.get("__rw_objc_super")); QualType FieldTypes[2]; // struct objc_object *object; @@ -3006,9 +3006,9 @@ QualType RewriteModernObjC::getSuperStructType() { QualType RewriteModernObjC::getConstantStringStructType() { if (!ConstantStringDecl) { - ConstantStringDecl = RecordDecl::Create(*Context, TTK_Struct, TUDecl, - SourceLocation(), SourceLocation(), - &Context->Idents.get("__NSConstantStringImpl")); + ConstantStringDecl = RecordDecl::Create( + *Context, TagTypeKind::Struct, TUDecl, SourceLocation(), + SourceLocation(), &Context->Idents.get("__NSConstantStringImpl")); QualType FieldTypes[4]; // struct objc_object *receiver; @@ -3782,10 +3782,9 @@ QualType RewriteModernObjC::SynthesizeBitfieldGroupStructType( SmallVectorImpl &IVars) { std::string StructTagName; ObjCIvarBitfieldGroupType(IV, StructTagName); - RecordDecl *RD = RecordDecl::Create(*Context, TTK_Struct, - Context->getTranslationUnitDecl(), - SourceLocation(), SourceLocation(), - &Context->Idents.get(StructTagName)); + RecordDecl *RD = RecordDecl::Create( + *Context, TagTypeKind::Struct, Context->getTranslationUnitDecl(), + SourceLocation(), SourceLocation(), &Context->Idents.get(StructTagName)); for (unsigned i=0, e = IVars.size(); i < e; i++) { ObjCIvarDecl *Ivar = IVars[i]; RD->addDecl(FieldDecl::Create(*Context, RD, SourceLocation(), SourceLocation(), @@ -4588,7 +4587,7 @@ Stmt *RewriteModernObjC::SynthesizeBlockCall(CallExpr *Exp, const Expr *BlockExp const FunctionProtoType *FTP = dyn_cast(FT); // FTP will be null for closures that don't take arguments. - RecordDecl *RD = RecordDecl::Create(*Context, TTK_Struct, TUDecl, + RecordDecl *RD = RecordDecl::Create(*Context, TagTypeKind::Struct, TUDecl, SourceLocation(), SourceLocation(), &Context->Idents.get("__block_impl")); QualType PtrBlock = Context->getPointerType(Context->getTagDeclType(RD)); @@ -5347,9 +5346,9 @@ Stmt *RewriteModernObjC::SynthBlockInitExpr(BlockExpr *Exp, RewriteByRefString(RecName, Name, ND, true); IdentifierInfo *II = &Context->Idents.get(RecName.c_str() + sizeof("struct")); - RecordDecl *RD = RecordDecl::Create(*Context, TTK_Struct, TUDecl, - SourceLocation(), SourceLocation(), - II); + RecordDecl *RD = + RecordDecl::Create(*Context, TagTypeKind::Struct, TUDecl, + SourceLocation(), SourceLocation(), II); assert(RD && "SynthBlockInitExpr(): Can't find RecordDecl"); QualType castT = Context->getPointerType(Context->getTagDeclType(RD)); @@ -7508,8 +7507,8 @@ Stmt *RewriteModernObjC::RewriteObjCIvarRefExpr(ObjCIvarRefExpr *IV) { std::string RecName = std::string(CDecl->getName()); RecName += "_IMPL"; RecordDecl *RD = RecordDecl::Create( - *Context, TTK_Struct, TUDecl, SourceLocation(), SourceLocation(), - &Context->Idents.get(RecName)); + *Context, TagTypeKind::Struct, TUDecl, SourceLocation(), + SourceLocation(), &Context->Idents.get(RecName)); QualType PtrStructIMPL = Context->getPointerType(Context->getTagDeclType(RD)); unsigned UnsignedIntSize = static_cast(Context->getTypeSize(Context->UnsignedIntTy)); diff --git a/clang/lib/Frontend/Rewrite/RewriteObjC.cpp b/clang/lib/Frontend/Rewrite/RewriteObjC.cpp index 89ffb8908d37b..71d0e95f9bf37 100644 --- a/clang/lib/Frontend/Rewrite/RewriteObjC.cpp +++ b/clang/lib/Frontend/Rewrite/RewriteObjC.cpp @@ -2357,7 +2357,7 @@ void RewriteObjC::SynthMsgSendFunctionDecl() { void RewriteObjC::SynthMsgSendSuperFunctionDecl() { IdentifierInfo *msgSendIdent = &Context->Idents.get("objc_msgSendSuper"); SmallVector ArgTys; - RecordDecl *RD = RecordDecl::Create(*Context, TTK_Struct, TUDecl, + RecordDecl *RD = RecordDecl::Create(*Context, TagTypeKind::Struct, TUDecl, SourceLocation(), SourceLocation(), &Context->Idents.get("objc_super")); QualType argT = Context->getPointerType(Context->getTagDeclType(RD)); @@ -2400,7 +2400,7 @@ void RewriteObjC::SynthMsgSendSuperStretFunctionDecl() { IdentifierInfo *msgSendIdent = &Context->Idents.get("objc_msgSendSuper_stret"); SmallVector ArgTys; - RecordDecl *RD = RecordDecl::Create(*Context, TTK_Struct, TUDecl, + RecordDecl *RD = RecordDecl::Create(*Context, TagTypeKind::Struct, TUDecl, SourceLocation(), SourceLocation(), &Context->Idents.get("objc_super")); QualType argT = Context->getPointerType(Context->getTagDeclType(RD)); @@ -2531,7 +2531,7 @@ Stmt *RewriteObjC::RewriteObjCStringLiteral(ObjCStringLiteral *Exp) { // struct objc_super { struct objc_object *receiver; struct objc_class *super; }; QualType RewriteObjC::getSuperStructType() { if (!SuperStructDecl) { - SuperStructDecl = RecordDecl::Create(*Context, TTK_Struct, TUDecl, + SuperStructDecl = RecordDecl::Create(*Context, TagTypeKind::Struct, TUDecl, SourceLocation(), SourceLocation(), &Context->Idents.get("objc_super")); QualType FieldTypes[2]; @@ -2559,9 +2559,9 @@ QualType RewriteObjC::getSuperStructType() { QualType RewriteObjC::getConstantStringStructType() { if (!ConstantStringDecl) { - ConstantStringDecl = RecordDecl::Create(*Context, TTK_Struct, TUDecl, - SourceLocation(), SourceLocation(), - &Context->Idents.get("__NSConstantStringImpl")); + ConstantStringDecl = RecordDecl::Create( + *Context, TagTypeKind::Struct, TUDecl, SourceLocation(), + SourceLocation(), &Context->Idents.get("__NSConstantStringImpl")); QualType FieldTypes[4]; // struct objc_object *receiver; @@ -3755,7 +3755,7 @@ Stmt *RewriteObjC::SynthesizeBlockCall(CallExpr *Exp, const Expr *BlockExp) { const FunctionProtoType *FTP = dyn_cast(FT); // FTP will be null for closures that don't take arguments. - RecordDecl *RD = RecordDecl::Create(*Context, TTK_Struct, TUDecl, + RecordDecl *RD = RecordDecl::Create(*Context, TagTypeKind::Struct, TUDecl, SourceLocation(), SourceLocation(), &Context->Idents.get("__block_impl")); QualType PtrBlock = Context->getPointerType(Context->getTagDeclType(RD)); @@ -4483,9 +4483,9 @@ Stmt *RewriteObjC::SynthBlockInitExpr(BlockExpr *Exp, RewriteByRefString(RecName, Name, ND, true); IdentifierInfo *II = &Context->Idents.get(RecName.c_str() + sizeof("struct")); - RecordDecl *RD = RecordDecl::Create(*Context, TTK_Struct, TUDecl, - SourceLocation(), SourceLocation(), - II); + RecordDecl *RD = + RecordDecl::Create(*Context, TagTypeKind::Struct, TUDecl, + SourceLocation(), SourceLocation(), II); assert(RD && "SynthBlockInitExpr(): Can't find RecordDecl"); QualType castT = Context->getPointerType(Context->getTagDeclType(RD)); @@ -5821,9 +5821,9 @@ Stmt *RewriteObjCFragileABI::RewriteObjCIvarRefExpr(ObjCIvarRefExpr *IV) { std::string(clsDeclared->getIdentifier()->getName()); RecName += "_IMPL"; IdentifierInfo *II = &Context->Idents.get(RecName); - RecordDecl *RD = RecordDecl::Create(*Context, TTK_Struct, TUDecl, - SourceLocation(), SourceLocation(), - II); + RecordDecl *RD = + RecordDecl::Create(*Context, TagTypeKind::Struct, TUDecl, + SourceLocation(), SourceLocation(), II); assert(RD && "RewriteObjCIvarRefExpr(): Can't find RecordDecl"); QualType castT = Context->getPointerType(Context->getTagDeclType(RD)); CastExpr *castExpr = NoTypeInfoCStyleCastExpr(Context, castT, @@ -5862,9 +5862,9 @@ Stmt *RewriteObjCFragileABI::RewriteObjCIvarRefExpr(ObjCIvarRefExpr *IV) { std::string(clsDeclared->getIdentifier()->getName()); RecName += "_IMPL"; IdentifierInfo *II = &Context->Idents.get(RecName); - RecordDecl *RD = RecordDecl::Create(*Context, TTK_Struct, TUDecl, - SourceLocation(), SourceLocation(), - II); + RecordDecl *RD = + RecordDecl::Create(*Context, TagTypeKind::Struct, TUDecl, + SourceLocation(), SourceLocation(), II); assert(RD && "RewriteObjCIvarRefExpr(): Can't find RecordDecl"); QualType castT = Context->getPointerType(Context->getTagDeclType(RD)); CastExpr *castExpr = NoTypeInfoCStyleCastExpr(Context, castT, diff --git a/clang/lib/Index/IndexSymbol.cpp b/clang/lib/Index/IndexSymbol.cpp index 10384660d2cb6..c67810ad126b6 100644 --- a/clang/lib/Index/IndexSymbol.cpp +++ b/clang/lib/Index/IndexSymbol.cpp @@ -107,19 +107,19 @@ SymbolInfo index::getSymbolInfo(const Decl *D) { if (const TagDecl *TD = dyn_cast(D)) { switch (TD->getTagKind()) { - case TTK_Struct: + case TagTypeKind::Struct: Info.Kind = SymbolKind::Struct; break; - case TTK_Union: + case TagTypeKind::Union: Info.Kind = SymbolKind::Union; break; - case TTK_Class: + case TagTypeKind::Class: Info.Kind = SymbolKind::Class; Info.Lang = SymbolLanguage::CXX; break; - case TTK_Interface: + case TagTypeKind::Interface: Info.Kind = SymbolKind::Protocol; Info.Lang = SymbolLanguage::CXX; break; - case TTK_Enum: + case TagTypeKind::Enum: Info.Kind = SymbolKind::Enum; break; } diff --git a/clang/lib/Index/USRGeneration.cpp b/clang/lib/Index/USRGeneration.cpp index 0eee6fe6d8207..fb936d9fbf8ab 100644 --- a/clang/lib/Index/USRGeneration.cpp +++ b/clang/lib/Index/USRGeneration.cpp @@ -519,11 +519,16 @@ void USRGenerator::VisitTagDecl(const TagDecl *D) { AlreadyStarted = true; switch (D->getTagKind()) { - case TTK_Interface: - case TTK_Class: - case TTK_Struct: Out << "@ST"; break; - case TTK_Union: Out << "@UT"; break; - case TTK_Enum: llvm_unreachable("enum template"); + case TagTypeKind::Interface: + case TagTypeKind::Class: + case TagTypeKind::Struct: + Out << "@ST"; + break; + case TagTypeKind::Union: + Out << "@UT"; + break; + case TagTypeKind::Enum: + llvm_unreachable("enum template"); } VisitTemplateParameterList(ClassTmpl->getTemplateParameters()); } else if (const ClassTemplatePartialSpecializationDecl *PartialSpec @@ -531,11 +536,16 @@ void USRGenerator::VisitTagDecl(const TagDecl *D) { AlreadyStarted = true; switch (D->getTagKind()) { - case TTK_Interface: - case TTK_Class: - case TTK_Struct: Out << "@SP"; break; - case TTK_Union: Out << "@UP"; break; - case TTK_Enum: llvm_unreachable("enum partial specialization"); + case TagTypeKind::Interface: + case TagTypeKind::Class: + case TagTypeKind::Struct: + Out << "@SP"; + break; + case TagTypeKind::Union: + Out << "@UP"; + break; + case TagTypeKind::Enum: + llvm_unreachable("enum partial specialization"); } VisitTemplateParameterList(PartialSpec->getTemplateParameters()); } @@ -543,11 +553,17 @@ void USRGenerator::VisitTagDecl(const TagDecl *D) { if (!AlreadyStarted) { switch (D->getTagKind()) { - case TTK_Interface: - case TTK_Class: - case TTK_Struct: Out << "@S"; break; - case TTK_Union: Out << "@U"; break; - case TTK_Enum: Out << "@E"; break; + case TagTypeKind::Interface: + case TagTypeKind::Class: + case TagTypeKind::Struct: + Out << "@S"; + break; + case TagTypeKind::Union: + Out << "@U"; + break; + case TagTypeKind::Enum: + Out << "@E"; + break; } } diff --git a/clang/lib/Sema/HLSLExternalSemaSource.cpp b/clang/lib/Sema/HLSLExternalSemaSource.cpp index 0be76d4b36e04..8de144486c91d 100644 --- a/clang/lib/Sema/HLSLExternalSemaSource.cpp +++ b/clang/lib/Sema/HLSLExternalSemaSource.cpp @@ -62,9 +62,9 @@ struct BuiltinTypeDeclBuilder { return; } - Record = CXXRecordDecl::Create(AST, TagDecl::TagKind::TTK_Class, - HLSLNamespace, SourceLocation(), - SourceLocation(), &II, PrevDecl, true); + Record = CXXRecordDecl::Create(AST, TagDecl::TagKind::Class, HLSLNamespace, + SourceLocation(), SourceLocation(), &II, + PrevDecl, true); Record->setImplicit(true); Record->setLexicalDeclContext(HLSLNamespace); Record->setHasExternalLexicalStorage(); diff --git a/clang/lib/Sema/Sema.cpp b/clang/lib/Sema/Sema.cpp index 8e78d2c11f92d..d25edd470334f 100644 --- a/clang/lib/Sema/Sema.cpp +++ b/clang/lib/Sema/Sema.cpp @@ -329,8 +329,9 @@ void Sema::Initialize() { if (getLangOpts().MSVCCompat) { if (getLangOpts().CPlusPlus && IdResolver.begin(&Context.Idents.get("type_info")) == IdResolver.end()) - PushOnScopeChains(Context.buildImplicitRecord("type_info", TTK_Class), - TUScope); + PushOnScopeChains( + Context.buildImplicitRecord("type_info", TagTypeKind::Class), + TUScope); addImplicitTypedef("size_t", Context.getSizeType()); } diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp index adb82d3f6d176..3355336d8c2c8 100644 --- a/clang/lib/Sema/SemaCodeComplete.cpp +++ b/clang/lib/Sema/SemaCodeComplete.cpp @@ -1576,8 +1576,9 @@ bool ResultBuilder::IsClassOrStruct(const NamedDecl *ND) const { // For purposes of this check, interfaces match too. if (const auto *RD = dyn_cast(ND)) - return RD->getTagKind() == TTK_Class || RD->getTagKind() == TTK_Struct || - RD->getTagKind() == TTK_Interface; + return RD->getTagKind() == TagTypeKind::Class || + RD->getTagKind() == TagTypeKind::Struct || + RD->getTagKind() == TagTypeKind::Interface; return false; } @@ -1589,7 +1590,7 @@ bool ResultBuilder::IsUnion(const NamedDecl *ND) const { ND = ClassTemplate->getTemplatedDecl(); if (const auto *RD = dyn_cast(ND)) - return RD->getTagKind() == TTK_Union; + return RD->getTagKind() == TagTypeKind::Union; return false; } @@ -2018,15 +2019,15 @@ static const char *GetCompletionTypeString(QualType T, ASTContext &Context, if (TagDecl *Tag = TagT->getDecl()) if (!Tag->hasNameForLinkage()) { switch (Tag->getTagKind()) { - case TTK_Struct: + case TagTypeKind::Struct: return "struct "; - case TTK_Interface: + case TagTypeKind::Interface: return "__interface "; - case TTK_Class: + case TagTypeKind::Class: return "class "; - case TTK_Union: + case TagTypeKind::Union: return "union "; - case TTK_Enum: + case TagTypeKind::Enum: return "enum "; } } @@ -4167,14 +4168,14 @@ CXCursorKind clang::getCursorKindForDecl(const Decl *D) { default: if (const auto *TD = dyn_cast(D)) { switch (TD->getTagKind()) { - case TTK_Interface: // fall through - case TTK_Struct: + case TagTypeKind::Interface: // fall through + case TagTypeKind::Struct: return CXCursor_StructDecl; - case TTK_Class: + case TagTypeKind::Class: return CXCursor_ClassDecl; - case TTK_Union: + case TagTypeKind::Union: return CXCursor_UnionDecl; - case TTK_Enum: + case TagTypeKind::Enum: return CXCursor_EnumDecl; } } diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index b4affa7277f6b..396566a8f10a9 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -680,11 +680,16 @@ DeclSpec::TST Sema::isTagName(IdentifierInfo &II, Scope *S) { if (R.getResultKind() == LookupResult::Found) if (const TagDecl *TD = R.getAsSingle()) { switch (TD->getTagKind()) { - case TTK_Struct: return DeclSpec::TST_struct; - case TTK_Interface: return DeclSpec::TST_interface; - case TTK_Union: return DeclSpec::TST_union; - case TTK_Class: return DeclSpec::TST_class; - case TTK_Enum: return DeclSpec::TST_enum; + case TagTypeKind::Struct: + return DeclSpec::TST_struct; + case TagTypeKind::Interface: + return DeclSpec::TST_interface; + case TagTypeKind::Union: + return DeclSpec::TST_union; + case TagTypeKind::Class: + return DeclSpec::TST_class; + case TagTypeKind::Enum: + return DeclSpec::TST_enum; } } @@ -860,25 +865,25 @@ static bool isTagTypeWithMissingTag(Sema &SemaRef, LookupResult &Result, if (TagDecl *Tag = R.getAsSingle()) { StringRef FixItTagName; switch (Tag->getTagKind()) { - case TTK_Class: - FixItTagName = "class "; - break; + case TagTypeKind::Class: + FixItTagName = "class "; + break; - case TTK_Enum: - FixItTagName = "enum "; - break; + case TagTypeKind::Enum: + FixItTagName = "enum "; + break; - case TTK_Struct: - FixItTagName = "struct "; - break; + case TagTypeKind::Struct: + FixItTagName = "struct "; + break; - case TTK_Interface: - FixItTagName = "__interface "; - break; + case TagTypeKind::Interface: + FixItTagName = "__interface "; + break; - case TTK_Union: - FixItTagName = "union "; - break; + case TagTypeKind::Union: + FixItTagName = "union "; + break; } StringRef TagName = FixItTagName.drop_back(); @@ -5268,8 +5273,8 @@ Decl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS, if (DS.isModulePrivateSpecified() && Tag && Tag->getDeclContext()->isFunctionOrMethod()) Diag(DS.getModulePrivateSpecLoc(), diag::err_module_private_local_class) - << Tag->getTagKind() - << FixItHint::CreateRemoval(DS.getModulePrivateSpecLoc()); + << llvm::to_underlying(Tag->getTagKind()) + << FixItHint::CreateRemoval(DS.getModulePrivateSpecLoc()); ActOnDocumentableDecl(TagD); @@ -7667,14 +7672,15 @@ NamedDecl *Sema::ActOnVariableDeclarator( // members. Diag(D.getIdentifierLoc(), diag::err_static_data_member_not_allowed_in_local_class) - << Name << RD->getDeclName() << RD->getTagKind(); + << Name << RD->getDeclName() + << llvm::to_underlying(RD->getTagKind()); } else if (AnonStruct) { // C++ [class.static.data]p4: Unnamed classes and classes contained // directly or indirectly within unnamed classes shall not contain // static data members. Diag(D.getIdentifierLoc(), diag::err_static_data_member_not_allowed_in_anon_struct) - << Name << AnonStruct->getTagKind(); + << Name << llvm::to_underlying(AnonStruct->getTagKind()); Invalid = true; } else if (RD->isUnion()) { // C++98 [class.union]p1: If a union contains a static data member, @@ -16766,9 +16772,12 @@ bool Sema::CheckEnumRedeclaration(SourceLocation EnumLoc, bool IsScoped, /// \returns diagnostic %select index. static unsigned getRedeclDiagFromTagKind(TagTypeKind Tag) { switch (Tag) { - case TTK_Struct: return 0; - case TTK_Interface: return 1; - case TTK_Class: return 2; + case TagTypeKind::Struct: + return 0; + case TagTypeKind::Interface: + return 1; + case TagTypeKind::Class: + return 2; default: llvm_unreachable("Invalid tag kind for redecl diagnostic!"); } } @@ -16779,7 +16788,8 @@ static unsigned getRedeclDiagFromTagKind(TagTypeKind Tag) { /// \returns true iff the tag kind is compatible. static bool isClassCompatTagKind(TagTypeKind Tag) { - return Tag == TTK_Struct || Tag == TTK_Class || Tag == TTK_Interface; + return Tag == TagTypeKind::Struct || Tag == TagTypeKind::Class || + Tag == TagTypeKind::Interface; } Sema::NonTagKind Sema::getNonTagTypeDeclKind(const Decl *PrevDecl, @@ -16795,13 +16805,13 @@ Sema::NonTagKind Sema::getNonTagTypeDeclKind(const Decl *PrevDecl, else if (isa(PrevDecl)) return NTK_TemplateTemplateArgument; switch (TTK) { - case TTK_Struct: - case TTK_Interface: - case TTK_Class: + case TagTypeKind::Struct: + case TagTypeKind::Interface: + case TagTypeKind::Class: return getLangOpts().CPlusPlus ? NTK_NonClass : NTK_NonStruct; - case TTK_Union: + case TagTypeKind::Union: return NTK_NonUnion; - case TTK_Enum: + case TagTypeKind::Enum: return NTK_NonEnum; } llvm_unreachable("invalid TTK"); @@ -17037,7 +17047,7 @@ Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, MatchTemplateParametersToScopeSpecifier( KWLoc, NameLoc, SS, nullptr, TemplateParameterLists, TUK == TUK_Friend, isMemberSpecialization, Invalid)) { - if (Kind == TTK_Enum) { + if (Kind == TagTypeKind::Enum) { Diag(KWLoc, diag::err_enum_template); return true; } @@ -17075,7 +17085,7 @@ Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, llvm::PointerUnion EnumUnderlying; bool IsFixed = !UnderlyingType.isUnset() || ScopedEnum; - if (Kind == TTK_Enum) { + if (Kind == TagTypeKind::Enum) { if (UnderlyingType.isInvalid() || (!UnderlyingType.get() && ScopedEnum)) { // No underlying type explicitly specified, or we failed to parse the // type, default to int. @@ -17125,7 +17135,7 @@ Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, SourceLocation Loc = NameLoc.isValid() ? NameLoc : KWLoc; TagDecl *New = nullptr; - if (Kind == TTK_Enum) { + if (Kind == TagTypeKind::Enum) { New = EnumDecl::Create(Context, SearchDC, KWLoc, Loc, Name, nullptr, ScopedEnum, ScopedEnumUsesClassTag, IsFixed); // If this is an undefined enum, bail. @@ -17218,7 +17228,7 @@ Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, // A tag 'foo::bar' must already exist. Diag(NameLoc, diag::err_not_tag_in_scope) - << Kind << Name << DC << SS.getRange(); + << llvm::to_underlying(Kind) << Name << DC << SS.getRange(); Name = nullptr; Invalid = true; goto CreateNewDecl; @@ -17478,9 +17488,9 @@ Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, if (!isAcceptableTagRedeclaration(PrevTagDecl, Kind, TUK == TUK_Definition, KWLoc, Name)) { - bool SafeToContinue - = (PrevTagDecl->getTagKind() != TTK_Enum && - Kind != TTK_Enum); + bool SafeToContinue = + (PrevTagDecl->getTagKind() != TagTypeKind::Enum && + Kind != TagTypeKind::Enum); if (SafeToContinue) Diag(KWLoc, diag::err_use_with_wrong_tag) << Name @@ -17500,7 +17510,8 @@ Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, } } - if (Kind == TTK_Enum && PrevTagDecl->getTagKind() == TTK_Enum) { + if (Kind == TagTypeKind::Enum && + PrevTagDecl->getTagKind() == TagTypeKind::Enum) { const EnumDecl *PrevEnum = cast(PrevTagDecl); if (TUK == TUK_Reference || TUK == TUK_Friend) return PrevTagDecl; @@ -17670,8 +17681,8 @@ Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, if ((TUK == TUK_Reference || TUK == TUK_Friend) && !Previous.isForRedeclaration()) { NonTagKind NTK = getNonTagTypeDeclKind(PrevDecl, Kind); - Diag(NameLoc, diag::err_tag_reference_non_tag) << PrevDecl << NTK - << Kind; + Diag(NameLoc, diag::err_tag_reference_non_tag) + << PrevDecl << NTK << llvm::to_underlying(Kind); Diag(PrevDecl->getLocation(), diag::note_declared_at); Invalid = true; @@ -17729,7 +17740,7 @@ Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, // PrevDecl. TagDecl *New; - if (Kind == TTK_Enum) { + if (Kind == TagTypeKind::Enum) { // FIXME: Tag decls should be chained to any simultaneous vardecls, e.g.: // enum X { A, B, C } D; D should chain to X. New = EnumDecl::Create(Context, SearchDC, KWLoc, Loc, Name, @@ -17864,7 +17875,7 @@ Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc, // If we're declaring or defining a tag in function prototype scope in C, // note that this type can only be used within the function and add it to // the list of decls to inject into the function definition scope. - if ((Name || Kind == TTK_Enum) && + if ((Name || Kind == TagTypeKind::Enum) && getNonFieldDeclScope(S)->isFunctionPrototypeScope()) { if (getLangOpts().CPlusPlus) { // C++ [dcl.fct]p6: @@ -19038,7 +19049,8 @@ void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, unsigned DiagID = 0; if (!Record->isUnion() && !IsLastField) { Diag(FD->getLocation(), diag::err_flexible_array_not_at_end) - << FD->getDeclName() << FD->getType() << Record->getTagKind(); + << FD->getDeclName() << FD->getType() + << llvm::to_underlying(Record->getTagKind()); Diag((*(i + 1))->getLocation(), diag::note_next_field_declaration); FD->setInvalidDecl(); EnclosingDecl->setInvalidDecl(); @@ -19057,8 +19069,8 @@ void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, : diag::err_flexible_array_empty_aggregate; if (DiagID) - Diag(FD->getLocation(), DiagID) << FD->getDeclName() - << Record->getTagKind(); + Diag(FD->getLocation(), DiagID) + << FD->getDeclName() << llvm::to_underlying(Record->getTagKind()); // While the layout of types that contain virtual bases is not specified // by the C++ standard, both the Itanium and Microsoft C++ ABIs place // virtual bases after the derived members. This would make a flexible @@ -19066,10 +19078,10 @@ void Sema::ActOnFields(Scope *S, SourceLocation RecLoc, Decl *EnclosingDecl, // of the type. if (CXXRecord && CXXRecord->getNumVBases() != 0) Diag(FD->getLocation(), diag::err_flexible_array_virtual_base) - << FD->getDeclName() << Record->getTagKind(); + << FD->getDeclName() << llvm::to_underlying(Record->getTagKind()); if (!getLangOpts().C99) Diag(FD->getLocation(), diag::ext_c99_flexible_array_member) - << FD->getDeclName() << Record->getTagKind(); + << FD->getDeclName() << llvm::to_underlying(Record->getTagKind()); // If the element type has a non-trivial destructor, we would not // implicitly destroy the elements, so disallow it for now. diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp index 842a01a88cd3c..cdb769a883550 100644 --- a/clang/lib/Sema/SemaDeclAttr.cpp +++ b/clang/lib/Sema/SemaDeclAttr.cpp @@ -189,7 +189,7 @@ static inline bool isCFStringType(QualType T, ASTContext &Ctx) { return false; const RecordDecl *RD = RT->getDecl(); - if (RD->getTagKind() != TTK_Struct) + if (RD->getTagKind() != TagTypeKind::Struct) return false; return RD->getIdentifier() == &Ctx.Idents.get("__CFString"); diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index be79defbbfac6..397b7a00e4531 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -1781,9 +1781,12 @@ static bool CheckConstexprReturnType(Sema &SemaRef, const FunctionDecl *FD, /// \returns diagnostic %select index. static unsigned getRecordDiagFromTagKind(TagTypeKind Tag) { switch (Tag) { - case TTK_Struct: return 0; - case TTK_Interface: return 1; - case TTK_Class: return 2; + case TagTypeKind::Struct: + return 0; + case TagTypeKind::Interface: + return 1; + case TagTypeKind::Class: + return 2; default: llvm_unreachable("Invalid tag kind for record diagnostic!"); } } @@ -2680,7 +2683,7 @@ Sema::CheckBaseSpecifier(CXXRecordDecl *Class, TypeSourceInfo *TInfo, SourceLocation EllipsisLoc) { // In HLSL, unspecified class access is public rather than private. - if (getLangOpts().HLSL && Class->getTagKind() == TTK_Class && + if (getLangOpts().HLSL && Class->getTagKind() == TagTypeKind::Class && Access == AS_none) Access = AS_public; @@ -2733,9 +2736,9 @@ Sema::CheckBaseSpecifier(CXXRecordDecl *Class, // emitted. if (!Class->getTypeForDecl()->isDependentType()) Class->setInvalidDecl(); - return new (Context) CXXBaseSpecifier(SpecifierRange, Virtual, - Class->getTagKind() == TTK_Class, - Access, TInfo, EllipsisLoc); + return new (Context) CXXBaseSpecifier( + SpecifierRange, Virtual, Class->getTagKind() == TagTypeKind::Class, + Access, TInfo, EllipsisLoc); } // Base specifiers must be record types. @@ -2821,9 +2824,9 @@ Sema::CheckBaseSpecifier(CXXRecordDecl *Class, Class->setInvalidDecl(); // Create the base specifier. - return new (Context) CXXBaseSpecifier(SpecifierRange, Virtual, - Class->getTagKind() == TTK_Class, - Access, TInfo, EllipsisLoc); + return new (Context) CXXBaseSpecifier( + SpecifierRange, Virtual, Class->getTagKind() == TagTypeKind::Class, + Access, TInfo, EllipsisLoc); } /// ActOnBaseSpecifier - Parsed a base specifier. A base specifier is @@ -7010,7 +7013,7 @@ void Sema::CheckCompletedCXXClass(Scope *S, CXXRecordDecl *Record) { (F->getType().isConstQualified() && F->getType()->isScalarType())) { if (!Complained) { Diag(Record->getLocation(), diag::warn_no_constructor_for_refconst) - << Record->getTagKind() << Record; + << llvm::to_underlying(Record->getTagKind()) << Record; Complained = true; } diff --git a/clang/lib/Sema/SemaDeclObjC.cpp b/clang/lib/Sema/SemaDeclObjC.cpp index 8685838157b5c..cdfa6ad3f281a 100644 --- a/clang/lib/Sema/SemaDeclObjC.cpp +++ b/clang/lib/Sema/SemaDeclObjC.cpp @@ -3884,7 +3884,7 @@ static void DiagnoseVariableSizedIvars(Sema &S, ObjCContainerDecl *OCD) { if (IvarTy->isIncompleteArrayType()) { S.Diag(ivar->getLocation(), diag::err_flexible_array_not_at_end) << ivar->getDeclName() << IvarTy - << TTK_Class; // Use "class" for Obj-C. + << llvm::to_underlying(TagTypeKind::Class); // Use "class" for Obj-C. IsInvalidIvar = true; } else if (const RecordType *RecordTy = IvarTy->getAs()) { if (RecordTy->getDecl()->hasFlexibleArrayMember()) { diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp index ea286c9709c13..093c57d64a712 100644 --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -3035,11 +3035,10 @@ void Sema::DeclareGlobalNewDelete() { if (!StdBadAlloc && !getLangOpts().CPlusPlus11) { // The "std::bad_alloc" class has not yet been declared, so build it // implicitly. - StdBadAlloc = CXXRecordDecl::Create(Context, TTK_Class, - getOrCreateStdNamespace(), - SourceLocation(), SourceLocation(), - &PP.getIdentifierTable().get("bad_alloc"), - nullptr); + StdBadAlloc = CXXRecordDecl::Create( + Context, TagTypeKind::Class, getOrCreateStdNamespace(), + SourceLocation(), SourceLocation(), + &PP.getIdentifierTable().get("bad_alloc"), nullptr); getStdBadAlloc()->setImplicit(true); // The implicitly declared "std::bad_alloc" should live in global module diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp index 333226963aeac..5ef0aaa40ba1f 100644 --- a/clang/lib/Sema/SemaStmt.cpp +++ b/clang/lib/Sema/SemaStmt.cpp @@ -4692,10 +4692,11 @@ Sema::CreateCapturedStmtRecordDecl(CapturedDecl *&CD, SourceLocation Loc, RecordDecl *RD = nullptr; if (getLangOpts().CPlusPlus) - RD = CXXRecordDecl::Create(Context, TTK_Struct, DC, Loc, Loc, + RD = CXXRecordDecl::Create(Context, TagTypeKind::Struct, DC, Loc, Loc, /*Id=*/nullptr); else - RD = RecordDecl::Create(Context, TTK_Struct, DC, Loc, Loc, /*Id=*/nullptr); + RD = RecordDecl::Create(Context, TagTypeKind::Struct, DC, Loc, Loc, + /*Id=*/nullptr); RD->setCapturedRecord(); DC->addDecl(RD); diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp index 4d6b2376ba786..ee35486221280 100644 --- a/clang/lib/Sema/SemaTemplate.cpp +++ b/clang/lib/Sema/SemaTemplate.cpp @@ -1841,7 +1841,8 @@ DeclResult Sema::CheckClassTemplate( return true; TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec); - assert(Kind != TTK_Enum && "can't build template of enumerated type"); + assert(Kind != TagTypeKind::Enum && + "can't build template of enumerated type"); // There is no such thing as an unnamed class template. if (!Name) { @@ -4292,7 +4293,7 @@ TypeResult Sema::ActOnTagTemplateIdType(TagUseKind TUK, // resolves to an alias template specialization, the // elaborated-type-specifier is ill-formed. Diag(TemplateLoc, diag::err_tag_reference_non_tag) - << TAT << NTK_TypeAliasTemplate << TagKind; + << TAT << NTK_TypeAliasTemplate << llvm::to_underlying(TagKind); Diag(TAT->getLocation(), diag::note_declared_at); } @@ -8722,7 +8723,8 @@ DeclResult Sema::ActOnClassTemplateSpecialization( // Check that the specialization uses the same tag kind as the // original template. TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec); - assert(Kind != TTK_Enum && "Invalid enum tag in class template spec!"); + assert(Kind != TagTypeKind::Enum && + "Invalid enum tag in class template spec!"); if (!isAcceptableTagRedeclaration(ClassTemplate->getTemplatedDecl(), Kind, TUK == TUK_Definition, KWLoc, ClassTemplate->getIdentifier())) { @@ -9968,14 +9970,15 @@ DeclResult Sema::ActOnExplicitInstantiation( // Check that the specialization uses the same tag kind as the // original template. TagTypeKind Kind = TypeWithKeyword::getTagTypeKindForTypeSpec(TagSpec); - assert(Kind != TTK_Enum && + assert(Kind != TagTypeKind::Enum && "Invalid enum tag in class template explicit instantiation!"); ClassTemplateDecl *ClassTemplate = dyn_cast(TD); if (!ClassTemplate) { NonTagKind NTK = getNonTagTypeDeclKind(TD, Kind); - Diag(TemplateNameLoc, diag::err_tag_reference_non_tag) << TD << NTK << Kind; + Diag(TemplateNameLoc, diag::err_tag_reference_non_tag) + << TD << NTK << llvm::to_underlying(Kind); Diag(TD->getLocation(), diag::note_previous_use); return true; } @@ -10800,7 +10803,8 @@ Sema::ActOnDependentTag(Scope *S, unsigned TagSpec, TagUseKind TUK, if (TUK == TUK_Declaration || TUK == TUK_Definition) { Diag(NameLoc, diag::err_dependent_tag_decl) - << (TUK == TUK_Definition) << Kind << SS.getRange(); + << (TUK == TUK_Definition) << llvm::to_underlying(Kind) + << SS.getRange(); return true; } diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp index 8edcbf4709a23..011356e08a042 100644 --- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -1662,8 +1662,8 @@ Decl *TemplateDeclInstantiator::VisitClassTemplateDecl(ClassTemplateDecl *D) { if (!PrevClassTemplate && QualifierLoc) { SemaRef.Diag(Pattern->getLocation(), diag::err_not_tag_in_scope) - << D->getTemplatedDecl()->getTagKind() << Pattern->getDeclName() << DC - << QualifierLoc.getSourceRange(); + << llvm::to_underlying(D->getTemplatedDecl()->getTagKind()) + << Pattern->getDeclName() << DC << QualifierLoc.getSourceRange(); return nullptr; } } diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp index a46deed8e7c58..560feafa1857c 100644 --- a/clang/lib/Sema/SemaType.cpp +++ b/clang/lib/Sema/SemaType.cpp @@ -3667,11 +3667,20 @@ static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state, Error = 6; // Interface member. } else { switch (cast(SemaRef.CurContext)->getTagKind()) { - case TTK_Enum: llvm_unreachable("unhandled tag kind"); - case TTK_Struct: Error = Cxx ? 1 : 2; /* Struct member */ break; - case TTK_Union: Error = Cxx ? 3 : 4; /* Union member */ break; - case TTK_Class: Error = 5; /* Class member */ break; - case TTK_Interface: Error = 6; /* Interface member */ break; + case TagTypeKind::Enum: + llvm_unreachable("unhandled tag kind"); + case TagTypeKind::Struct: + Error = Cxx ? 1 : 2; /* Struct member */ + break; + case TagTypeKind::Union: + Error = Cxx ? 3 : 4; /* Union member */ + break; + case TagTypeKind::Class: + Error = 5; /* Class member */ + break; + case TagTypeKind::Interface: + Error = 6; /* Interface member */ + break; } } if (D.getDeclSpec().isFriendSpecified()) @@ -4413,7 +4422,7 @@ bool Sema::isCFError(RecordDecl *RD) { // NSError. CFErrorRef used to be declared with "objc_bridge" but is now // declared with "objc_bridge_mutable", so look for either one of the two // attributes. - if (RD->getTagKind() == TTK_Struct) { + if (RD->getTagKind() == TagTypeKind::Struct) { IdentifierInfo *bridgedType = nullptr; if (auto bridgeAttr = RD->getAttr()) bridgedType = bridgeAttr->getBridgedType(); @@ -9417,9 +9426,12 @@ bool Sema::RequireCompleteType(SourceLocation Loc, QualType T, /// \returns diagnostic %select index. static unsigned getLiteralDiagFromTagKind(TagTypeKind Tag) { switch (Tag) { - case TTK_Struct: return 0; - case TTK_Interface: return 1; - case TTK_Class: return 2; + case TagTypeKind::Struct: + return 0; + case TagTypeKind::Interface: + return 1; + case TagTypeKind::Class: + return 2; default: llvm_unreachable("Invalid tag kind for literal type diagnostic!"); } } diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index 22357d55d3733..ac12b39a5978b 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -1209,14 +1209,15 @@ class TreeTransform { case LookupResult::FoundUnresolvedValue: { NamedDecl *SomeDecl = Result.getRepresentativeDecl(); Sema::NonTagKind NTK = SemaRef.getNonTagTypeDeclKind(SomeDecl, Kind); - SemaRef.Diag(IdLoc, diag::err_tag_reference_non_tag) << SomeDecl - << NTK << Kind; + SemaRef.Diag(IdLoc, diag::err_tag_reference_non_tag) + << SomeDecl << NTK << llvm::to_underlying(Kind); SemaRef.Diag(SomeDecl->getLocation(), diag::note_declared_at); break; } default: SemaRef.Diag(IdLoc, diag::err_not_tag_in_scope) - << Kind << Id << DC << QualifierLoc.getSourceRange(); + << llvm::to_underlying(Kind) << Id << DC + << QualifierLoc.getSourceRange(); break; } return QualType(); @@ -7029,7 +7030,8 @@ TreeTransform::TransformElaboratedType(TypeLocBuilder &TLB, SemaRef.Diag(TL.getNamedTypeLoc().getBeginLoc(), diag::err_tag_reference_non_tag) << TAT << Sema::NTK_TypeAliasTemplate - << ElaboratedType::getTagTypeKindForKeyword(T->getKeyword()); + << llvm::to_underlying( + ElaboratedType::getTagTypeKindForKeyword(T->getKeyword())); SemaRef.Diag(TAT->getLocation(), diag::note_declared_at); } } diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp index a63911cb4adfb..79817b3fb1ec3 100644 --- a/clang/lib/Serialization/ASTReaderDecl.cpp +++ b/clang/lib/Serialization/ASTReaderDecl.cpp @@ -757,7 +757,8 @@ ASTDeclReader::RedeclarableResult ASTDeclReader::VisitTagDecl(TagDecl *TD) { TD->IdentifierNamespace = Record.readInt(); BitsUnpacker TagDeclBits(Record.readInt()); - TD->setTagKind((TagDecl::TagKind)TagDeclBits.getNextBits(/*Width=*/3)); + TD->setTagKind( + static_cast(TagDeclBits.getNextBits(/*Width=*/3))); TD->setCompleteDefinition(TagDeclBits.getNextBit()); TD->setEmbeddedInDeclarator(TagDeclBits.getNextBit()); TD->setFreeStanding(TagDeclBits.getNextBit()); @@ -4587,7 +4588,7 @@ void ASTDeclReader::UpdateDecl(Decl *D, } } - RD->setTagKind((TagTypeKind)Record.readInt()); + RD->setTagKind(static_cast(Record.readInt())); RD->setLocation(readSourceLocation()); RD->setLocStart(readSourceLocation()); RD->setBraceRange(readSourceRange()); diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp index 2fe12f7ff300f..1e86566d81fbc 100644 --- a/clang/lib/Serialization/ASTWriter.cpp +++ b/clang/lib/Serialization/ASTWriter.cpp @@ -5333,7 +5333,7 @@ void ASTWriter::WriteDeclUpdatesBlocks(RecordDataImpl &OffsetsRecord) { Record.push_back(false); } } - Record.push_back(RD->getTagKind()); + Record.push_back(llvm::to_underlying(RD->getTagKind())); Record.AddSourceLocation(RD->getLocation()); Record.AddSourceLocation(RD->getBeginLoc()); Record.AddSourceRange(RD->getBraceRange()); diff --git a/clang/lib/Serialization/ASTWriterDecl.cpp b/clang/lib/Serialization/ASTWriterDecl.cpp index b4438e4cf6a0c..a06df18e89818 100644 --- a/clang/lib/Serialization/ASTWriterDecl.cpp +++ b/clang/lib/Serialization/ASTWriterDecl.cpp @@ -445,7 +445,7 @@ void ASTDeclWriter::VisitTagDecl(TagDecl *D) { Record.push_back(D->getIdentifierNamespace()); BitsPacker TagDeclBits; - TagDeclBits.addBits(D->getTagKind(), /*BitWidth=*/3); + TagDeclBits.addBits(llvm::to_underlying(D->getTagKind()), /*BitWidth=*/3); TagDeclBits.addBit(!isa(D) ? D->isCompleteDefinition() : 0); TagDeclBits.addBit(D->isEmbeddedInDeclarator()); TagDeclBits.addBit(D->isFreeStanding()); diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/NoUncountedMembersChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/WebKit/NoUncountedMembersChecker.cpp index 66d8588e25315..d10924776f107 100644 --- a/clang/lib/StaticAnalyzer/Checkers/WebKit/NoUncountedMembersChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/NoUncountedMembersChecker.cpp @@ -104,7 +104,7 @@ class NoUncountedMemberChecker const auto Kind = RD->getTagKind(); // FIMXE: Should we check union members too? - if (Kind != TTK_Struct && Kind != TTK_Class) + if (Kind != TagTypeKind::Struct && Kind != TagTypeKind::Class) return true; // Ignore CXXRecords that come from system headers. diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/RefCntblBaseVirtualDtorChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/WebKit/RefCntblBaseVirtualDtorChecker.cpp index 48dcfc4a3c464..bd7c50ccfa9c4 100644 --- a/clang/lib/StaticAnalyzer/Checkers/WebKit/RefCntblBaseVirtualDtorChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/RefCntblBaseVirtualDtorChecker.cpp @@ -114,7 +114,7 @@ class RefCntblBaseVirtualDtorChecker return true; const auto Kind = RD->getTagKind(); - if (Kind != TTK_Struct && Kind != TTK_Class) + if (Kind != TagTypeKind::Struct && Kind != TagTypeKind::Class) return true; // Ignore CXXRecords that come from system headers. diff --git a/clang/tools/libclang/CIndexCXX.cpp b/clang/tools/libclang/CIndexCXX.cpp index a06fe7ba4af56..ea6f97d39644e 100644 --- a/clang/tools/libclang/CIndexCXX.cpp +++ b/clang/tools/libclang/CIndexCXX.cpp @@ -63,11 +63,15 @@ enum CXCursorKind clang_getTemplateCursorKind(CXCursor C) { = dyn_cast_or_null( getCursorDecl(C))) { switch (PartialSpec->getTagKind()) { - case TTK_Interface: - case TTK_Struct: return CXCursor_StructDecl; - case TTK_Class: return CXCursor_ClassDecl; - case TTK_Union: return CXCursor_UnionDecl; - case TTK_Enum: return CXCursor_NoDeclFound; + case TagTypeKind::Interface: + case TagTypeKind::Struct: + return CXCursor_StructDecl; + case TagTypeKind::Class: + return CXCursor_ClassDecl; + case TagTypeKind::Union: + return CXCursor_UnionDecl; + case TagTypeKind::Enum: + return CXCursor_NoDeclFound; } } break; diff --git a/clang/unittests/AST/ASTImporterTest.cpp b/clang/unittests/AST/ASTImporterTest.cpp index 0cbec5cf9ba06..5f4d8d040772c 100644 --- a/clang/unittests/AST/ASTImporterTest.cpp +++ b/clang/unittests/AST/ASTImporterTest.cpp @@ -7705,8 +7705,9 @@ TEST_P(ImportWithExternalSource, CompleteRecordBeforeImporting) { // Create a dummy class by hand with external lexical storage. IdentifierInfo &Ident = Context.Idents.get("test_class"); - auto *Record = CXXRecordDecl::Create( - Context, TTK_Class, FromTU, SourceLocation(), SourceLocation(), &Ident); + auto *Record = + CXXRecordDecl::Create(Context, TagTypeKind::Class, FromTU, + SourceLocation(), SourceLocation(), &Ident); Record->setHasExternalLexicalStorage(); FromTU->addDecl(Record); diff --git a/clang/utils/ClangVisualizers/clang.natvis b/clang/utils/ClangVisualizers/clang.natvis index cbb63dc08de23..2d1ad16797f81 100644 --- a/clang/utils/ClangVisualizers/clang.natvis +++ b/clang/utils/ClangVisualizers/clang.natvis @@ -347,11 +347,11 @@ For later versions of Visual Studio, no setup is required--> {*this,view(implicit)nd} {*this,view(modifiers)}{Name,view(cpp)} - {*this,view(modifiers)nd}struct {Name,view(cpp)} - {*this,view(modifiers)nd}interface {Name,view(cpp)} - {*this,view(modifiers)nd}union {Name,view(cpp)} - {*this,view(modifiers)nd}class {Name,view(cpp)} - {*this,view(modifiers)nd}enum {Name,view(cpp)} + {*this,view(modifiers)nd}struct {Name,view(cpp)} + {*this,view(modifiers)nd}interface {Name,view(cpp)} + {*this,view(modifiers)nd}union {Name,view(cpp)} + {*this,view(modifiers)nd}class {Name,view(cpp)} + {*this,view(modifiers)nd}enum {Name,view(cpp)} (clang::DeclContext *)this diff --git a/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp b/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp index 2e927eb8d8569..605c79cbd9b55 100644 --- a/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp @@ -78,7 +78,8 @@ static CompilerType GetLLDBNSPairType(TargetSP target_sp) { if (!compiler_type) { compiler_type = scratch_ts_sp->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, - g_lldb_autogen_nspair, clang::TTK_Struct, lldb::eLanguageTypeC); + g_lldb_autogen_nspair, llvm::to_underlying(clang::TagTypeKind::Struct), + lldb::eLanguageTypeC); if (compiler_type) { TypeSystemClang::StartTagDeclarationDefinition(compiler_type); diff --git a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.cpp b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.cpp index 2cc5319c84bbe..ca582cb1d5a46 100644 --- a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.cpp +++ b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCTypeEncodingParser.cpp @@ -81,13 +81,13 @@ AppleObjCTypeEncodingParser::ReadStructElement(TypeSystemClang &ast_ctx, clang::QualType AppleObjCTypeEncodingParser::BuildStruct( TypeSystemClang &ast_ctx, StringLexer &type, bool for_expression) { return BuildAggregate(ast_ctx, type, for_expression, _C_STRUCT_B, _C_STRUCT_E, - clang::TTK_Struct); + llvm::to_underlying(clang::TagTypeKind::Struct)); } clang::QualType AppleObjCTypeEncodingParser::BuildUnion( TypeSystemClang &ast_ctx, StringLexer &type, bool for_expression) { return BuildAggregate(ast_ctx, type, for_expression, _C_UNION_B, _C_UNION_E, - clang::TTK_Union); + llvm::to_underlying(clang::TagTypeKind::Union)); } clang::QualType AppleObjCTypeEncodingParser::BuildAggregate( diff --git a/lldb/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.cpp b/lldb/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.cpp index 7abc71a1c53fe..d7584be2b95ee 100644 --- a/lldb/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.cpp +++ b/lldb/source/Plugins/Platform/FreeBSD/PlatformFreeBSD.cpp @@ -206,7 +206,7 @@ CompilerType PlatformFreeBSD::GetSiginfoType(const llvm::Triple &triple) { CompilerType sigval_type = ast->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, "__lldb_sigval_t", - clang::TTK_Union, lldb::eLanguageTypeC); + llvm::to_underlying(clang::TagTypeKind::Union), lldb::eLanguageTypeC); ast->StartTagDeclarationDefinition(sigval_type); ast->AddFieldToRecordType(sigval_type, "sival_int", int_type, lldb::eAccessPublic, 0); @@ -217,7 +217,7 @@ CompilerType PlatformFreeBSD::GetSiginfoType(const llvm::Triple &triple) { // siginfo_t CompilerType siginfo_type = ast->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, "__lldb_siginfo_t", - clang::TTK_Struct, lldb::eLanguageTypeC); + llvm::to_underlying(clang::TagTypeKind::Struct), lldb::eLanguageTypeC); ast->StartTagDeclarationDefinition(siginfo_type); ast->AddFieldToRecordType(siginfo_type, "si_signo", int_type, lldb::eAccessPublic, 0); @@ -239,7 +239,7 @@ CompilerType PlatformFreeBSD::GetSiginfoType(const llvm::Triple &triple) { // union used to hold the signal data CompilerType union_type = ast->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, "", - clang::TTK_Union, lldb::eLanguageTypeC); + llvm::to_underlying(clang::TagTypeKind::Union), lldb::eLanguageTypeC); ast->StartTagDeclarationDefinition(union_type); ast->AddFieldToRecordType( diff --git a/lldb/source/Plugins/Platform/Linux/PlatformLinux.cpp b/lldb/source/Plugins/Platform/Linux/PlatformLinux.cpp index dd50bfc2dc04a..13465986f49c5 100644 --- a/lldb/source/Plugins/Platform/Linux/PlatformLinux.cpp +++ b/lldb/source/Plugins/Platform/Linux/PlatformLinux.cpp @@ -348,7 +348,7 @@ CompilerType PlatformLinux::GetSiginfoType(const llvm::Triple &triple) { CompilerType sigval_type = ast->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, "__lldb_sigval_t", - clang::TTK_Union, lldb::eLanguageTypeC); + llvm::to_underlying(clang::TagTypeKind::Union), lldb::eLanguageTypeC); ast->StartTagDeclarationDefinition(sigval_type); ast->AddFieldToRecordType(sigval_type, "sival_int", int_type, lldb::eAccessPublic, 0); @@ -358,7 +358,7 @@ CompilerType PlatformLinux::GetSiginfoType(const llvm::Triple &triple) { CompilerType sigfault_bounds_type = ast->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, "", - clang::TTK_Union, lldb::eLanguageTypeC); + llvm::to_underlying(clang::TagTypeKind::Union), lldb::eLanguageTypeC); ast->StartTagDeclarationDefinition(sigfault_bounds_type); ast->AddFieldToRecordType( sigfault_bounds_type, "_addr_bnd", @@ -375,7 +375,7 @@ CompilerType PlatformLinux::GetSiginfoType(const llvm::Triple &triple) { // siginfo_t CompilerType siginfo_type = ast->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, "__lldb_siginfo_t", - clang::TTK_Struct, lldb::eLanguageTypeC); + llvm::to_underlying(clang::TagTypeKind::Struct), lldb::eLanguageTypeC); ast->StartTagDeclarationDefinition(siginfo_type); ast->AddFieldToRecordType(siginfo_type, "si_signo", int_type, lldb::eAccessPublic, 0); @@ -400,7 +400,7 @@ CompilerType PlatformLinux::GetSiginfoType(const llvm::Triple &triple) { // union used to hold the signal data CompilerType union_type = ast->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, "", - clang::TTK_Union, lldb::eLanguageTypeC); + llvm::to_underlying(clang::TagTypeKind::Union), lldb::eLanguageTypeC); ast->StartTagDeclarationDefinition(union_type); ast->AddFieldToRecordType( diff --git a/lldb/source/Plugins/Platform/NetBSD/PlatformNetBSD.cpp b/lldb/source/Plugins/Platform/NetBSD/PlatformNetBSD.cpp index 393519d708d36..ce81aab557062 100644 --- a/lldb/source/Plugins/Platform/NetBSD/PlatformNetBSD.cpp +++ b/lldb/source/Plugins/Platform/NetBSD/PlatformNetBSD.cpp @@ -228,7 +228,7 @@ CompilerType PlatformNetBSD::GetSiginfoType(const llvm::Triple &triple) { CompilerType sigval_type = ast->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, "__lldb_sigval_t", - clang::TTK_Union, lldb::eLanguageTypeC); + llvm::to_underlying(clang::TagTypeKind::Union), lldb::eLanguageTypeC); ast->StartTagDeclarationDefinition(sigval_type); ast->AddFieldToRecordType(sigval_type, "sival_int", int_type, lldb::eAccessPublic, 0); @@ -238,7 +238,7 @@ CompilerType PlatformNetBSD::GetSiginfoType(const llvm::Triple &triple) { CompilerType ptrace_option_type = ast->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, "", - clang::TTK_Union, lldb::eLanguageTypeC); + llvm::to_underlying(clang::TagTypeKind::Union), lldb::eLanguageTypeC); ast->StartTagDeclarationDefinition(ptrace_option_type); ast->AddFieldToRecordType(ptrace_option_type, "_pe_other_pid", pid_type, lldb::eAccessPublic, 0); @@ -249,13 +249,13 @@ CompilerType PlatformNetBSD::GetSiginfoType(const llvm::Triple &triple) { // siginfo_t CompilerType siginfo_type = ast->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, "__lldb_siginfo_t", - clang::TTK_Union, lldb::eLanguageTypeC); + llvm::to_underlying(clang::TagTypeKind::Union), lldb::eLanguageTypeC); ast->StartTagDeclarationDefinition(siginfo_type); // struct _ksiginfo CompilerType ksiginfo_type = ast->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, "", - clang::TTK_Struct, lldb::eLanguageTypeC); + llvm::to_underlying(clang::TagTypeKind::Struct), lldb::eLanguageTypeC); ast->StartTagDeclarationDefinition(ksiginfo_type); ast->AddFieldToRecordType(ksiginfo_type, "_signo", int_type, lldb::eAccessPublic, 0); @@ -272,7 +272,7 @@ CompilerType PlatformNetBSD::GetSiginfoType(const llvm::Triple &triple) { // union used to hold the signal data CompilerType union_type = ast->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, "", - clang::TTK_Union, lldb::eLanguageTypeC); + llvm::to_underlying(clang::TagTypeKind::Union), lldb::eLanguageTypeC); ast->StartTagDeclarationDefinition(union_type); ast->AddFieldToRecordType( diff --git a/lldb/source/Plugins/RegisterTypeBuilder/RegisterTypeBuilderClang.cpp b/lldb/source/Plugins/RegisterTypeBuilder/RegisterTypeBuilderClang.cpp index aeb54ef9ee24b..067768537c068 100644 --- a/lldb/source/Plugins/RegisterTypeBuilder/RegisterTypeBuilderClang.cpp +++ b/lldb/source/Plugins/RegisterTypeBuilder/RegisterTypeBuilderClang.cpp @@ -60,7 +60,8 @@ CompilerType RegisterTypeBuilderClang::GetRegisterType( fields_type = type_system->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, - register_type_name, clang::TTK_Struct, lldb::eLanguageTypeC); + register_type_name, llvm::to_underlying(clang::TagTypeKind::Struct), + lldb::eLanguageTypeC); type_system->StartTagDeclarationDefinition(fields_type); // We assume that RegisterFlags has padded and sorted the fields diff --git a/lldb/source/Plugins/SymbolFile/CTF/SymbolFileCTF.cpp b/lldb/source/Plugins/SymbolFile/CTF/SymbolFileCTF.cpp index 62353be170cfb..7a2b4c00eedf3 100644 --- a/lldb/source/Plugins/SymbolFile/CTF/SymbolFileCTF.cpp +++ b/lldb/source/Plugins/SymbolFile/CTF/SymbolFileCTF.cpp @@ -320,12 +320,12 @@ static uint32_t GetBytes(uint32_t bits) { return bits / sizeof(unsigned); } static clang::TagTypeKind TranslateRecordKind(CTFType::Kind type) { switch (type) { case CTFType::Kind::eStruct: - return clang::TTK_Struct; + return clang::TagTypeKind::Struct; case CTFType::Kind::eUnion: - return clang::TTK_Union; + return clang::TagTypeKind::Union; default: lldbassert(false && "Invalid record kind!"); - return clang::TTK_Struct; + return clang::TagTypeKind::Struct; } } @@ -503,9 +503,9 @@ SymbolFileCTF::CreateFunction(const CTFFunction &ctf_function) { llvm::Expected SymbolFileCTF::CreateRecord(const CTFRecord &ctf_record) { const clang::TagTypeKind tag_kind = TranslateRecordKind(ctf_record.kind); - CompilerType record_type = - m_ast->CreateRecordType(nullptr, OptionalClangModuleID(), eAccessPublic, - ctf_record.name.data(), tag_kind, eLanguageTypeC); + CompilerType record_type = m_ast->CreateRecordType( + nullptr, OptionalClangModuleID(), eAccessPublic, ctf_record.name.data(), + llvm::to_underlying(tag_kind), eLanguageTypeC); m_compiler_types[record_type.GetOpaqueQualType()] = &ctf_record; Declaration decl; return MakeType(ctf_record.uid, ConstString(ctf_record.name), ctf_record.size, @@ -562,7 +562,7 @@ llvm::Expected SymbolFileCTF::CreateForward(const CTFForward &ctf_forward) { CompilerType forward_compiler_type = m_ast->CreateRecordType( nullptr, OptionalClangModuleID(), eAccessPublic, ctf_forward.name, - clang::TTK_Struct, eLanguageTypeC); + llvm::to_underlying(clang::TagTypeKind::Struct), eLanguageTypeC); Declaration decl; return MakeType(ctf_forward.uid, ConstString(ctf_forward.name), 0, nullptr, LLDB_INVALID_UID, Type::eEncodingIsUID, decl, diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp index 696708d3fc7cf..3174c18c97d88 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp @@ -1637,13 +1637,13 @@ DWARFASTParserClang::ParseStructureLikeDIE(const SymbolContext &sc, int tag_decl_kind = -1; AccessType default_accessibility = eAccessNone; if (tag == DW_TAG_structure_type) { - tag_decl_kind = clang::TTK_Struct; + tag_decl_kind = llvm::to_underlying(clang::TagTypeKind::Struct); default_accessibility = eAccessPublic; } else if (tag == DW_TAG_union_type) { - tag_decl_kind = clang::TTK_Union; + tag_decl_kind = llvm::to_underlying(clang::TagTypeKind::Union); default_accessibility = eAccessPublic; } else if (tag == DW_TAG_class_type) { - tag_decl_kind = clang::TTK_Class; + tag_decl_kind = llvm::to_underlying(clang::TagTypeKind::Class); default_accessibility = eAccessPrivate; } @@ -3852,7 +3852,7 @@ void DWARFASTParserClang::ParseRustVariantPart( decl_context, OptionalClangModuleID(), lldb::eAccessPublic, std::string( llvm::formatv("{0}$Inner", class_clang_type.GetTypeName(false))), - clang::TTK_Union, lldb::eLanguageTypeRust); + llvm::to_underlying(clang::TagTypeKind::Union), lldb::eLanguageTypeRust); m_ast.StartTagDeclarationDefinition(inner_holder); m_ast.SetIsPacked(inner_holder); @@ -3866,7 +3866,8 @@ void DWARFASTParserClang::ParseRustVariantPart( m_ast.GetDeclContextForType(inner_holder), OptionalClangModuleID(), lldb::eAccessPublic, std::string(llvm::formatv("{0}$Variant", member.GetName())), - clang::TTK_Struct, lldb::eLanguageTypeRust); + llvm::to_underlying(clang::TagTypeKind::Struct), + lldb::eLanguageTypeRust); m_ast.StartTagDeclarationDefinition(field_type); auto offset = member.byte_offset; diff --git a/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp b/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp index c7ff25e904abe..5b690ead1e8de 100644 --- a/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp +++ b/lldb/source/Plugins/SymbolFile/NativePDB/PdbAstBuilder.cpp @@ -99,18 +99,18 @@ struct CreateMethodDecl : public TypeVisitorCallbacks { static clang::TagTypeKind TranslateUdtKind(const TagRecord &cr) { switch (cr.Kind) { case TypeRecordKind::Class: - return clang::TTK_Class; + return clang::TagTypeKind::Class; case TypeRecordKind::Struct: - return clang::TTK_Struct; + return clang::TagTypeKind::Struct; case TypeRecordKind::Union: - return clang::TTK_Union; + return clang::TagTypeKind::Union; case TypeRecordKind::Interface: - return clang::TTK_Interface; + return clang::TagTypeKind::Interface; case TypeRecordKind::Enum: - return clang::TTK_Enum; + return clang::TagTypeKind::Enum; default: lldbassert(false && "Invalid tag record kind!"); - return clang::TTK_Struct; + return clang::TagTypeKind::Struct; } } @@ -608,16 +608,17 @@ clang::QualType PdbAstBuilder::CreateRecordType(PdbTypeSymId id, return {}; clang::TagTypeKind ttk = TranslateUdtKind(record); - lldb::AccessType access = - (ttk == clang::TTK_Class) ? lldb::eAccessPrivate : lldb::eAccessPublic; + lldb::AccessType access = (ttk == clang::TagTypeKind::Class) + ? lldb::eAccessPrivate + : lldb::eAccessPublic; ClangASTMetadata metadata; metadata.SetUserID(toOpaqueUid(id)); metadata.SetIsDynamicCXXType(false); - CompilerType ct = - m_clang.CreateRecordType(context, OptionalClangModuleID(), access, uname, - ttk, lldb::eLanguageTypeC_plus_plus, &metadata); + CompilerType ct = m_clang.CreateRecordType( + context, OptionalClangModuleID(), access, uname, llvm::to_underlying(ttk), + lldb::eLanguageTypeC_plus_plus, &metadata); lldbassert(ct.IsValid()); diff --git a/lldb/source/Plugins/SymbolFile/NativePDB/UdtRecordCompleter.cpp b/lldb/source/Plugins/SymbolFile/NativePDB/UdtRecordCompleter.cpp index cf3868d077c3f..fab3ca989c0ec 100644 --- a/lldb/source/Plugins/SymbolFile/NativePDB/UdtRecordCompleter.cpp +++ b/lldb/source/Plugins/SymbolFile/NativePDB/UdtRecordCompleter.cpp @@ -356,14 +356,14 @@ UdtRecordCompleter::AddMember(TypeSystemClang &clang, Member *field, case Member::Struct: case Member::Union: { clang::TagTypeKind kind = field->kind == Member::Struct - ? clang::TagTypeKind::TTK_Struct - : clang::TagTypeKind::TTK_Union; + ? clang::TagTypeKind::Struct + : clang::TagTypeKind::Union; ClangASTMetadata metadata; metadata.SetUserID(pdb->anonymous_id); metadata.SetIsDynamicCXXType(false); CompilerType record_ct = clang.CreateRecordType( - parent_decl_ctx, OptionalClangModuleID(), lldb::eAccessPublic, "", kind, - lldb::eLanguageTypeC_plus_plus, &metadata); + parent_decl_ctx, OptionalClangModuleID(), lldb::eAccessPublic, "", + llvm::to_underlying(kind), lldb::eLanguageTypeC_plus_plus, &metadata); TypeSystemClang::StartTagDeclarationDefinition(record_ct); ClangASTImporter::LayoutInfo layout; clang::DeclContext *decl_ctx = clang.GetDeclContextForType(record_ct); diff --git a/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp b/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp index 5efa5bccb85f5..e915bff9e4a47 100644 --- a/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp +++ b/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp @@ -49,13 +49,13 @@ using namespace llvm::pdb; static int TranslateUdtKind(PDB_UdtType pdb_kind) { switch (pdb_kind) { case PDB_UdtType::Class: - return clang::TTK_Class; + return llvm::to_underlying(clang::TagTypeKind::Class); case PDB_UdtType::Struct: - return clang::TTK_Struct; + return llvm::to_underlying(clang::TagTypeKind::Struct); case PDB_UdtType::Union: - return clang::TTK_Union; + return llvm::to_underlying(clang::TagTypeKind::Union); case PDB_UdtType::Interface: - return clang::TTK_Interface; + return llvm::to_underlying(clang::TagTypeKind::Interface); } llvm_unreachable("unsuported PDB UDT type"); } @@ -1387,9 +1387,9 @@ void PDBASTParser::AddRecordBases( auto is_virtual = base->isVirtualBaseClass(); std::unique_ptr base_spec = - m_ast.CreateBaseClassSpecifier(base_comp_type.GetOpaqueQualType(), - access, is_virtual, - record_kind == clang::TTK_Class); + m_ast.CreateBaseClassSpecifier( + base_comp_type.GetOpaqueQualType(), access, is_virtual, + record_kind == llvm::to_underlying(clang::TagTypeKind::Class)); lldbassert(base_spec); base_classes.push_back(std::move(base_spec)); diff --git a/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp b/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp index f4ddc9e869148..dbceaf0ed4f44 100644 --- a/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp +++ b/lldb/source/Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.cpp @@ -420,7 +420,8 @@ void SystemRuntimeMacOSX::ReadLibdispatchTSDIndexes() { scratch_ts_sp->GetBuiltinTypeForEncodingAndBitSize(eEncodingUint, 16); CompilerType dispatch_tsd_indexes_s = scratch_ts_sp->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, - "__lldb_dispatch_tsd_indexes_s", clang::TTK_Struct, + "__lldb_dispatch_tsd_indexes_s", + llvm::to_underlying(clang::TagTypeKind::Struct), lldb::eLanguageTypeC); TypeSystemClang::StartTagDeclarationDefinition(dispatch_tsd_indexes_s); diff --git a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp index 5f64e0e4abaf9..6f65587c4aced 100644 --- a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp +++ b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp @@ -2320,8 +2320,9 @@ CompilerType TypeSystemClang::CreateStructForIdentifier( return type; } - type = CreateRecordType(nullptr, OptionalClangModuleID(), lldb::eAccessPublic, - type_name, clang::TTK_Struct, lldb::eLanguageTypeC); + type = CreateRecordType( + nullptr, OptionalClangModuleID(), lldb::eAccessPublic, type_name, + llvm::to_underlying(clang::TagTypeKind::Struct), lldb::eLanguageTypeC); StartTagDeclarationDefinition(type); for (const auto &field : type_fields) AddFieldToRecordType(type, field.first, field.second, lldb::eAccessPublic, diff --git a/lldb/unittests/Symbol/TestTypeSystemClang.cpp b/lldb/unittests/Symbol/TestTypeSystemClang.cpp index ec5cc776d960f..c83e6ed1d4189 100644 --- a/lldb/unittests/Symbol/TestTypeSystemClang.cpp +++ b/lldb/unittests/Symbol/TestTypeSystemClang.cpp @@ -295,7 +295,8 @@ TEST_F(TestTypeSystemClang, TestOwningModule) { CompilerType record_type = ast.CreateRecordType( nullptr, OptionalClangModuleID(200), lldb::eAccessPublic, "FooRecord", - clang::TTK_Struct, lldb::eLanguageTypeC_plus_plus, nullptr); + llvm::to_underlying(clang::TagTypeKind::Struct), + lldb::eLanguageTypeC_plus_plus, nullptr); auto *rd = TypeSystemClang::GetAsRecordDecl(record_type); EXPECT_FALSE(!rd); EXPECT_EQ(rd->getOwningModuleID(), 200u); @@ -315,7 +316,8 @@ TEST_F(TestTypeSystemClang, TestIsClangType) { CompilerType bool_type(m_ast->weak_from_this(), bool_ctype); CompilerType record_type = m_ast->CreateRecordType( nullptr, OptionalClangModuleID(100), lldb::eAccessPublic, "FooRecord", - clang::TTK_Struct, lldb::eLanguageTypeC_plus_plus, nullptr); + llvm::to_underlying(clang::TagTypeKind::Struct), + lldb::eLanguageTypeC_plus_plus, nullptr); // Clang builtin type and record type should pass EXPECT_TRUE(ClangUtil::IsClangType(bool_type)); EXPECT_TRUE(ClangUtil::IsClangType(record_type)); @@ -327,7 +329,8 @@ TEST_F(TestTypeSystemClang, TestIsClangType) { TEST_F(TestTypeSystemClang, TestRemoveFastQualifiers) { CompilerType record_type = m_ast->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, "FooRecord", - clang::TTK_Struct, lldb::eLanguageTypeC_plus_plus, nullptr); + llvm::to_underlying(clang::TagTypeKind::Struct), + lldb::eLanguageTypeC_plus_plus, nullptr); QualType qt; qt = ClangUtil::GetQualType(record_type); @@ -399,7 +402,8 @@ TEST_F(TestTypeSystemClang, TestRecordHasFields) { // Test that a record with no fields returns false CompilerType empty_base = m_ast->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, "EmptyBase", - clang::TTK_Struct, lldb::eLanguageTypeC_plus_plus, nullptr); + llvm::to_underlying(clang::TagTypeKind::Struct), + lldb::eLanguageTypeC_plus_plus, nullptr); TypeSystemClang::StartTagDeclarationDefinition(empty_base); TypeSystemClang::CompleteTagDeclarationDefinition(empty_base); @@ -410,7 +414,8 @@ TEST_F(TestTypeSystemClang, TestRecordHasFields) { // Test that a record with direct fields returns true CompilerType non_empty_base = m_ast->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, "NonEmptyBase", - clang::TTK_Struct, lldb::eLanguageTypeC_plus_plus, nullptr); + llvm::to_underlying(clang::TagTypeKind::Struct), + lldb::eLanguageTypeC_plus_plus, nullptr); TypeSystemClang::StartTagDeclarationDefinition(non_empty_base); FieldDecl *non_empty_base_field_decl = m_ast->AddFieldToRecordType( non_empty_base, "MyField", int_type, eAccessPublic, 0); @@ -426,7 +431,8 @@ TEST_F(TestTypeSystemClang, TestRecordHasFields) { // Test that a record with no direct fields, but fields in a base returns true CompilerType empty_derived = m_ast->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, "EmptyDerived", - clang::TTK_Struct, lldb::eLanguageTypeC_plus_plus, nullptr); + llvm::to_underlying(clang::TagTypeKind::Struct), + lldb::eLanguageTypeC_plus_plus, nullptr); TypeSystemClang::StartTagDeclarationDefinition(empty_derived); std::unique_ptr non_empty_base_spec = m_ast->CreateBaseClassSpecifier(non_empty_base.GetOpaqueQualType(), @@ -448,7 +454,8 @@ TEST_F(TestTypeSystemClang, TestRecordHasFields) { // returns true CompilerType empty_derived2 = m_ast->CreateRecordType( nullptr, OptionalClangModuleID(), lldb::eAccessPublic, "EmptyDerived2", - clang::TTK_Struct, lldb::eLanguageTypeC_plus_plus, nullptr); + llvm::to_underlying(clang::TagTypeKind::Struct), + lldb::eLanguageTypeC_plus_plus, nullptr); TypeSystemClang::StartTagDeclarationDefinition(empty_derived2); std::unique_ptr non_empty_vbase_spec = m_ast->CreateBaseClassSpecifier(non_empty_base.GetOpaqueQualType(), @@ -479,14 +486,14 @@ TEST_F(TestTypeSystemClang, TemplateArguments) { // template struct foo; ClassTemplateDecl *decl = m_ast->CreateClassTemplateDecl( m_ast->GetTranslationUnitDecl(), OptionalClangModuleID(), eAccessPublic, - "foo", TTK_Struct, infos); + "foo", llvm::to_underlying(clang::TagTypeKind::Struct), infos); ASSERT_NE(decl, nullptr); // foo ClassTemplateSpecializationDecl *spec_decl = m_ast->CreateClassTemplateSpecializationDecl( m_ast->GetTranslationUnitDecl(), OptionalClangModuleID(), decl, - TTK_Struct, infos); + llvm::to_underlying(clang::TagTypeKind::Struct), infos); ASSERT_NE(spec_decl, nullptr); CompilerType type = m_ast->CreateClassTemplateSpecializationType(spec_decl); ASSERT_TRUE(type); @@ -543,7 +550,7 @@ class TestCreateClassTemplateDecl : public TestTypeSystemClang { CreateClassTemplate(const TypeSystemClang::TemplateParameterInfos &infos) { ClassTemplateDecl *decl = m_ast->CreateClassTemplateDecl( m_ast->GetTranslationUnitDecl(), OptionalClangModuleID(), eAccessPublic, - "foo", TTK_Struct, infos); + "foo", llvm::to_underlying(clang::TagTypeKind::Struct), infos); return decl; }