mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-16 06:46:33 +00:00
[clang][NFC] Refactor TagTypeKind
(#71160)
This patch converts TagTypeKind into scoped enum. Among other benefits, this allows us to forward-declare it where necessary.
This commit is contained in:
parent
9dfdbd7887
commit
edd690b02e
@ -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<TagTypeKind>(R[0])) {
|
||||
case TagTypeKind::Struct:
|
||||
case TagTypeKind::Interface:
|
||||
case TagTypeKind::Union:
|
||||
case TagTypeKind::Class:
|
||||
case TagTypeKind::Enum:
|
||||
Field = static_cast<TagTypeKind>(R[0]);
|
||||
return llvm::Error::success();
|
||||
default:
|
||||
return llvm::createStringError(llvm::inconvertibleErrorCode(),
|
||||
|
@ -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);
|
||||
|
@ -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");
|
||||
|
@ -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())
|
||||
|
@ -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.
|
||||
|
@ -47,11 +47,11 @@ template <> struct ScalarEnumerationTraits<clang::AccessSpecifier> {
|
||||
|
||||
template <> struct ScalarEnumerationTraits<clang::TagTypeKind> {
|
||||
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);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -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<AccessSpecDecl>(D))
|
||||
Spec = ASD->getAccess();
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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<int> {} ;)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<int> {} ;)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<int> {} ;)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<int> {} ;)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<int> {} ;)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);
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
|
@ -1197,8 +1197,9 @@ public:
|
||||
|
||||
/// 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;
|
||||
|
@ -3703,13 +3703,15 @@ public:
|
||||
return static_cast<TagKind>(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?
|
||||
|
@ -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.
|
||||
|
@ -6525,12 +6525,12 @@ bool ASTContext::isSameEntity(const NamedDecl *X, const NamedDecl *Y) const {
|
||||
if (const auto *TagX = dyn_cast<TagDecl>(X)) {
|
||||
const auto *TagY = cast<TagDecl>(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.
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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<FieldDecl>(D) &&
|
||||
!isa<IndirectFieldDecl>(D) &&
|
||||
(!isa<TagDecl>(D) || cast<TagDecl>(D)->getTagKind() == TTK_Class ||
|
||||
cast<TagDecl>(D)->getTagKind() == TTK_Interface))
|
||||
if (!D->isImplicit() && !isa<FieldDecl>(D) && !isa<IndirectFieldDecl>(D) &&
|
||||
(!isa<TagDecl>(D) ||
|
||||
cast<TagDecl>(D)->getTagKind() == TagTypeKind::Class ||
|
||||
cast<TagDecl>(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())
|
||||
|
@ -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) {}
|
||||
|
||||
|
@ -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<ObjCObjectType>(),
|
||||
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,
|
||||
// <enum-type> ::= W4 <name>
|
||||
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<ExtVectorType>(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,
|
||||
|
@ -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!");
|
||||
}
|
||||
}
|
||||
|
@ -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.");
|
||||
|
@ -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));
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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<unsigned>(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<ObjCIvarDecl *> &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<FunctionProtoType>(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<unsigned>(Context->getTypeSize(Context->UnsignedIntTy));
|
||||
|
@ -2357,7 +2357,7 @@ void RewriteObjC::SynthMsgSendFunctionDecl() {
|
||||
void RewriteObjC::SynthMsgSendSuperFunctionDecl() {
|
||||
IdentifierInfo *msgSendIdent = &Context->Idents.get("objc_msgSendSuper");
|
||||
SmallVector<QualType, 16> 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<QualType, 16> 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<FunctionProtoType>(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,
|
||||
|
@ -107,19 +107,19 @@ SymbolInfo index::getSymbolInfo(const Decl *D) {
|
||||
|
||||
if (const TagDecl *TD = dyn_cast<TagDecl>(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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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());
|
||||
}
|
||||
|
@ -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<RecordDecl>(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<RecordDecl>(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 <anonymous>";
|
||||
case TTK_Interface:
|
||||
case TagTypeKind::Interface:
|
||||
return "__interface <anonymous>";
|
||||
case TTK_Class:
|
||||
case TagTypeKind::Class:
|
||||
return "class <anonymous>";
|
||||
case TTK_Union:
|
||||
case TagTypeKind::Union:
|
||||
return "union <anonymous>";
|
||||
case TTK_Enum:
|
||||
case TagTypeKind::Enum:
|
||||
return "enum <anonymous>";
|
||||
}
|
||||
}
|
||||
@ -4167,14 +4168,14 @@ CXCursorKind clang::getCursorKindForDecl(const Decl *D) {
|
||||
default:
|
||||
if (const auto *TD = dyn_cast<TagDecl>(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;
|
||||
}
|
||||
}
|
||||
|
@ -680,11 +680,16 @@ DeclSpec::TST Sema::isTagName(IdentifierInfo &II, Scope *S) {
|
||||
if (R.getResultKind() == LookupResult::Found)
|
||||
if (const TagDecl *TD = R.getAsSingle<TagDecl>()) {
|
||||
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<TagDecl>()) {
|
||||
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<TemplateTemplateParmDecl>(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<const Type*, TypeSourceInfo*> 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<EnumDecl>(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 @@ CreateNewDecl:
|
||||
// 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 @@ CreateNewDecl:
|
||||
// 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.
|
||||
|
@ -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");
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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<RecordType>()) {
|
||||
if (RecordTy->getDecl()->hasFlexibleArrayMember()) {
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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<ClassTemplateDecl>(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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -3667,11 +3667,20 @@ static QualType GetDeclSpecTypeForDeclarator(TypeProcessingState &state,
|
||||
Error = 6; // Interface member.
|
||||
} else {
|
||||
switch (cast<TagDecl>(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<ObjCBridgeAttr>())
|
||||
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!");
|
||||
}
|
||||
}
|
||||
|
@ -1209,14 +1209,15 @@ public:
|
||||
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<Derived>::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);
|
||||
}
|
||||
}
|
||||
|
@ -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<TagTypeKind>(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<TagTypeKind>(Record.readInt()));
|
||||
RD->setLocation(readSourceLocation());
|
||||
RD->setLocStart(readSourceLocation());
|
||||
RD->setBraceRange(readSourceRange());
|
||||
|
@ -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());
|
||||
|
@ -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<CXXRecordDecl>(D) ? D->isCompleteDefinition() : 0);
|
||||
TagDeclBits.addBit(D->isEmbeddedInDeclarator());
|
||||
TagDeclBits.addBit(D->isFreeStanding());
|
||||
|
@ -104,7 +104,7 @@ public:
|
||||
|
||||
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.
|
||||
|
@ -114,7 +114,7 @@ public:
|
||||
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.
|
||||
|
@ -63,11 +63,15 @@ enum CXCursorKind clang_getTemplateCursorKind(CXCursor C) {
|
||||
= dyn_cast_or_null<ClassTemplatePartialSpecializationDecl>(
|
||||
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;
|
||||
|
@ -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);
|
||||
|
||||
|
@ -347,11 +347,11 @@ For later versions of Visual Studio, no setup is required-->
|
||||
<DisplayString IncludeView="implicit"></DisplayString>
|
||||
<DisplayString IncludeView="modifiers">{*this,view(implicit)nd}</DisplayString>
|
||||
<DisplayString IncludeView="cpp">{*this,view(modifiers)}{Name,view(cpp)}</DisplayString>
|
||||
<DisplayString Condition="TagDeclBits.TagDeclKind==clang::TagTypeKind::TTK_Struct">{*this,view(modifiers)nd}struct {Name,view(cpp)}</DisplayString>
|
||||
<DisplayString Condition="TagDeclBits.TagDeclKind==clang::TagTypeKind::TTK_Interface">{*this,view(modifiers)nd}interface {Name,view(cpp)}</DisplayString>
|
||||
<DisplayString Condition="TagDeclBits.TagDeclKind==clang::TagTypeKind::TTK_Union">{*this,view(modifiers)nd}union {Name,view(cpp)}</DisplayString>
|
||||
<DisplayString Condition="TagDeclBits.TagDeclKind==clang::TagTypeKind::TTK_Class">{*this,view(modifiers)nd}class {Name,view(cpp)}</DisplayString>
|
||||
<DisplayString Condition="TagDeclBits.TagDeclKind==clang::TagTypeKind::TTK_Enum">{*this,view(modifiers)nd}enum {Name,view(cpp)}</DisplayString>
|
||||
<DisplayString Condition="TagDeclBits.TagDeclKind==clang::TagTypeKind::Struct">{*this,view(modifiers)nd}struct {Name,view(cpp)}</DisplayString>
|
||||
<DisplayString Condition="TagDeclBits.TagDeclKind==clang::TagTypeKind::Interface">{*this,view(modifiers)nd}interface {Name,view(cpp)}</DisplayString>
|
||||
<DisplayString Condition="TagDeclBits.TagDeclKind==clang::TagTypeKind::Union">{*this,view(modifiers)nd}union {Name,view(cpp)}</DisplayString>
|
||||
<DisplayString Condition="TagDeclBits.TagDeclKind==clang::TagTypeKind::Class">{*this,view(modifiers)nd}class {Name,view(cpp)}</DisplayString>
|
||||
<DisplayString Condition="TagDeclBits.TagDeclKind==clang::TagTypeKind::Enum">{*this,view(modifiers)nd}enum {Name,view(cpp)}</DisplayString>
|
||||
<Expand>
|
||||
<ExpandedItem>(clang::DeclContext *)this</ExpandedItem>
|
||||
</Expand>
|
||||
|
@ -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);
|
||||
|
@ -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(
|
||||
|
@ -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(
|
||||
|
@ -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(
|
||||
|
@ -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(
|
||||
|
@ -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
|
||||
|
@ -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<lldb::TypeSP>
|
||||
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<lldb::TypeSP>
|
||||
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,
|
||||
|
@ -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;
|
||||
|
@ -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());
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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<clang::CXXBaseSpecifier> 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));
|
||||
|
@ -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);
|
||||
|
@ -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,
|
||||
|
@ -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<clang::CXXBaseSpecifier> 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<CXXBaseSpecifier> non_empty_vbase_spec =
|
||||
m_ast->CreateBaseClassSpecifier(non_empty_base.GetOpaqueQualType(),
|
||||
@ -479,14 +486,14 @@ TEST_F(TestTypeSystemClang, TemplateArguments) {
|
||||
// template<typename T, int I> 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<int, 47>
|
||||
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 @@ protected:
|
||||
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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user