-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[clang-doc] serialize IsBuiltIn and IsTemplate for types #146149
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
This stack of pull requests is managed by Graphite. Learn more about stacking. |
@llvm/pr-subscribers-clang-tools-extra Author: Erick Velez (evelez7) ChangesIsBuiltIn and IsTemplate were being emitted as their default values. Full diff: https://github.com/llvm/llvm-project/pull/146149.diff 8 Files Affected:
diff --git a/clang-tools-extra/clang-doc/BitcodeReader.cpp b/clang-tools-extra/clang-doc/BitcodeReader.cpp
index 74da80c382120..fd6f40cff1a4e 100644
--- a/clang-tools-extra/clang-doc/BitcodeReader.cpp
+++ b/clang-tools-extra/clang-doc/BitcodeReader.cpp
@@ -283,7 +283,15 @@ static llvm::Error parseRecord(const Record &R, unsigned ID,
static llvm::Error parseRecord(const Record &R, unsigned ID,
llvm::StringRef Blob, TypeInfo *I) {
- return llvm::Error::success();
+ switch (ID) {
+ case TYPE_IS_BUILTIN:
+ return decodeRecord(R, I->IsBuiltIn, Blob);
+ case TYPE_IS_TEMPLATE:
+ return decodeRecord(R, I->IsTemplate, Blob);
+ default:
+ return llvm::createStringError(llvm::inconvertibleErrorCode(),
+ "invalid field for TypeInfo");
+ }
}
static llvm::Error parseRecord(const Record &R, unsigned ID,
@@ -293,6 +301,10 @@ static llvm::Error parseRecord(const Record &R, unsigned ID,
return decodeRecord(R, I->Name, Blob);
case FIELD_DEFAULT_VALUE:
return decodeRecord(R, I->DefaultValue, Blob);
+ case FIELD_TYPE_IS_BUILTIN:
+ return decodeRecord(R, I->IsBuiltIn, Blob);
+ case FIELD_TYPE_IS_TEMPLATE:
+ return decodeRecord(R, I->IsTemplate, Blob);
default:
return llvm::createStringError(llvm::inconvertibleErrorCode(),
"invalid field for TypeInfo");
@@ -308,6 +320,10 @@ static llvm::Error parseRecord(const Record &R, unsigned ID,
return decodeRecord(R, I->Access, Blob);
case MEMBER_TYPE_IS_STATIC:
return decodeRecord(R, I->IsStatic, Blob);
+ case MEMBER_TYPE_IS_BUILTIN:
+ return decodeRecord(R, I->IsBuiltIn, Blob);
+ case MEMBER_TYPE_IS_TEMPLATE:
+ return decodeRecord(R, I->IsTemplate, Blob);
default:
return llvm::createStringError(llvm::inconvertibleErrorCode(),
"invalid field for MemberTypeInfo");
diff --git a/clang-tools-extra/clang-doc/BitcodeWriter.cpp b/clang-tools-extra/clang-doc/BitcodeWriter.cpp
index c3351d1decbf5..006ddda1b75e7 100644
--- a/clang-tools-extra/clang-doc/BitcodeWriter.cpp
+++ b/clang-tools-extra/clang-doc/BitcodeWriter.cpp
@@ -161,9 +161,15 @@ static const llvm::IndexedMap<RecordIdDsc, RecordIdToIndexFunctor>
{COMMENT_ARG, {"Arg", &genStringAbbrev}},
{FIELD_TYPE_NAME, {"Name", &genStringAbbrev}},
{FIELD_DEFAULT_VALUE, {"DefaultValue", &genStringAbbrev}},
+ {FIELD_TYPE_IS_BUILTIN, {"IsBuiltin", &genBoolAbbrev}},
+ {FIELD_TYPE_IS_TEMPLATE, {"IsTemplate", &genBoolAbbrev}},
{MEMBER_TYPE_NAME, {"Name", &genStringAbbrev}},
{MEMBER_TYPE_ACCESS, {"Access", &genIntAbbrev}},
{MEMBER_TYPE_IS_STATIC, {"IsStatic", &genBoolAbbrev}},
+ {MEMBER_TYPE_IS_BUILTIN, {"IsBuiltin", &genBoolAbbrev}},
+ {MEMBER_TYPE_IS_TEMPLATE, {"IsTemplate", &genBoolAbbrev}},
+ {TYPE_IS_BUILTIN, {"IsBuiltin", &genBoolAbbrev}},
+ {TYPE_IS_TEMPLATE, {"IsTemplate", &genBoolAbbrev}},
{NAMESPACE_USR, {"USR", &genSymbolIdAbbrev}},
{NAMESPACE_NAME, {"Name", &genStringAbbrev}},
{NAMESPACE_PATH, {"Path", &genStringAbbrev}},
@@ -239,12 +245,15 @@ static const std::vector<std::pair<BlockId, std::vector<RecordId>>>
COMMENT_PARAMNAME, COMMENT_CLOSENAME, COMMENT_SELFCLOSING,
COMMENT_EXPLICIT, COMMENT_ATTRKEY, COMMENT_ATTRVAL, COMMENT_ARG}},
// Type Block
- {BI_TYPE_BLOCK_ID, {}},
+ {BI_TYPE_BLOCK_ID, {TYPE_IS_BUILTIN, TYPE_IS_TEMPLATE}},
// FieldType Block
- {BI_FIELD_TYPE_BLOCK_ID, {FIELD_TYPE_NAME, FIELD_DEFAULT_VALUE}},
+ {BI_FIELD_TYPE_BLOCK_ID,
+ {FIELD_TYPE_NAME, FIELD_DEFAULT_VALUE, FIELD_TYPE_IS_BUILTIN,
+ FIELD_TYPE_IS_TEMPLATE}},
// MemberType Block
{BI_MEMBER_TYPE_BLOCK_ID,
- {MEMBER_TYPE_NAME, MEMBER_TYPE_ACCESS, MEMBER_TYPE_IS_STATIC}},
+ {MEMBER_TYPE_NAME, MEMBER_TYPE_ACCESS, MEMBER_TYPE_IS_STATIC,
+ MEMBER_TYPE_IS_BUILTIN, MEMBER_TYPE_IS_TEMPLATE}},
// Enum Block
{BI_ENUM_BLOCK_ID,
{ENUM_USR, ENUM_NAME, ENUM_DEFLOCATION, ENUM_LOCATION, ENUM_SCOPED}},
@@ -470,6 +479,8 @@ void ClangDocBitcodeWriter::emitBlock(const Reference &R, FieldId Field) {
void ClangDocBitcodeWriter::emitBlock(const TypeInfo &T) {
StreamSubBlockGuard Block(Stream, BI_TYPE_BLOCK_ID);
emitBlock(T.Type, FieldId::F_type);
+ emitRecord(T.IsBuiltIn, TYPE_IS_BUILTIN);
+ emitRecord(T.IsTemplate, TYPE_IS_TEMPLATE);
}
void ClangDocBitcodeWriter::emitBlock(const TypedefInfo &T) {
@@ -491,6 +502,8 @@ void ClangDocBitcodeWriter::emitBlock(const FieldTypeInfo &T) {
emitBlock(T.Type, FieldId::F_type);
emitRecord(T.Name, FIELD_TYPE_NAME);
emitRecord(T.DefaultValue, FIELD_DEFAULT_VALUE);
+ emitRecord(T.IsBuiltIn, FIELD_TYPE_IS_BUILTIN);
+ emitRecord(T.IsTemplate, FIELD_TYPE_IS_TEMPLATE);
}
void ClangDocBitcodeWriter::emitBlock(const MemberTypeInfo &T) {
@@ -499,6 +512,9 @@ void ClangDocBitcodeWriter::emitBlock(const MemberTypeInfo &T) {
emitRecord(T.Name, MEMBER_TYPE_NAME);
emitRecord(T.Access, MEMBER_TYPE_ACCESS);
emitRecord(T.IsStatic, MEMBER_TYPE_IS_STATIC);
+ emitRecord(T.IsBuiltIn, MEMBER_TYPE_IS_BUILTIN);
+ emitRecord(T.IsTemplate, MEMBER_TYPE_IS_TEMPLATE);
+ emitRecord(T.IsTemplate, MEMBER_TYPE_IS_TEMPLATE);
for (const auto &CI : T.Description)
emitBlock(CI);
}
diff --git a/clang-tools-extra/clang-doc/BitcodeWriter.h b/clang-tools-extra/clang-doc/BitcodeWriter.h
index a70e50b53a61a..f1325094f957a 100644
--- a/clang-tools-extra/clang-doc/BitcodeWriter.h
+++ b/clang-tools-extra/clang-doc/BitcodeWriter.h
@@ -96,11 +96,17 @@ enum RecordId {
COMMENT_ATTRKEY,
COMMENT_ATTRVAL,
COMMENT_ARG,
+ TYPE_IS_BUILTIN,
+ TYPE_IS_TEMPLATE,
FIELD_TYPE_NAME,
FIELD_DEFAULT_VALUE,
+ FIELD_TYPE_IS_BUILTIN,
+ FIELD_TYPE_IS_TEMPLATE,
MEMBER_TYPE_NAME,
MEMBER_TYPE_ACCESS,
MEMBER_TYPE_IS_STATIC,
+ MEMBER_TYPE_IS_BUILTIN,
+ MEMBER_TYPE_IS_TEMPLATE,
NAMESPACE_USR,
NAMESPACE_NAME,
NAMESPACE_PATH,
diff --git a/clang-tools-extra/test/clang-doc/json/class-template.cpp b/clang-tools-extra/test/clang-doc/json/class-template.cpp
index e3ca086d1d9a4..fb9c4c2f21c2e 100644
--- a/clang-tools-extra/test/clang-doc/json/class-template.cpp
+++ b/clang-tools-extra/test/clang-doc/json/class-template.cpp
@@ -17,7 +17,7 @@ template<typename T> struct MyClass {
// CHECK-NEXT: ],
// CHECK-NEXT: "ReturnType": {
// CHECK-NEXT: "IsBuiltIn": false,
-// CHECK-NEXT: "IsTemplate": false,
+// CHECK-NEXT: "IsTemplate": true,
// CHECK-NEXT: "Name": "T",
// CHECK-NEXT: "QualName": "T"
// CHECK-NEXT: "USR": "0000000000000000000000000000000000000000"
diff --git a/clang-tools-extra/test/clang-doc/json/class.cpp b/clang-tools-extra/test/clang-doc/json/class.cpp
index 9ae1f14e2d2a6..bd82b8159e2f9 100644
--- a/clang-tools-extra/test/clang-doc/json/class.cpp
+++ b/clang-tools-extra/test/clang-doc/json/class.cpp
@@ -107,7 +107,7 @@ struct MyClass {
// CHECK-NEXT: "GlobalNamespace"
// CHECK-NEXT: ],
// CHECK-NEXT: "ReturnType": {
-// CHECK-NEXT: "IsBuiltIn": false,
+// CHECK-NEXT: "IsBuiltIn": true,
// CHECK-NEXT: "IsTemplate": false,
// CHECK-NEXT: "Name": "int",
// CHECK-NEXT: "QualName": "int",
@@ -137,7 +137,7 @@ struct MyClass {
// CHECK-NEXT: }
// CHECK-NEXT: ],
// CHECK-NEXT: "ReturnType": {
-// CHECK-NEXT: "IsBuiltIn": false,
+// CHECK-NEXT: "IsBuiltIn": true,
// CHECK-NEXT: "IsTemplate": false,
// CHECK-NEXT: "Name": "int",
// CHECK-NEXT: "QualName": "int",
@@ -184,7 +184,7 @@ struct MyClass {
// CHECK-NEXT: "TypeDeclaration": "",
// CHECK-NEXT: "USR": "{{[0-9A-F]*}}",
// CHECK-NEXT: "Underlying": {
-// CHECK-NEXT: "IsBuiltIn": false,
+// CHECK-NEXT: "IsBuiltIn": true,
// CHECK-NEXT: "IsTemplate": false,
// CHECK-NEXT: "Name": "int",
// CHECK-NEXT: "QualName": "int",
diff --git a/clang-tools-extra/test/clang-doc/json/function-requires.cpp b/clang-tools-extra/test/clang-doc/json/function-requires.cpp
index 99eb2bdb898f3..4e8432e088c4f 100644
--- a/clang-tools-extra/test/clang-doc/json/function-requires.cpp
+++ b/clang-tools-extra/test/clang-doc/json/function-requires.cpp
@@ -23,7 +23,7 @@ template<Incrementable T> Incrementable auto incrementTwo(T t);
// CHECK-NEXT: }
// CHECK-NEXT: ],
// CHECK-NEXT: "ReturnType": {
-// CHECK-NEXT: "IsBuiltIn": false,
+// CHECK-NEXT: "IsBuiltIn": true,
// CHECK-NEXT: "IsTemplate": false,
// CHECK-NEXT: "Name": "void",
// CHECK-NEXT: "QualName": "void",
diff --git a/clang-tools-extra/test/clang-doc/json/method-template.cpp b/clang-tools-extra/test/clang-doc/json/method-template.cpp
index c51a2706d1c22..ea9110d6c2d1c 100644
--- a/clang-tools-extra/test/clang-doc/json/method-template.cpp
+++ b/clang-tools-extra/test/clang-doc/json/method-template.cpp
@@ -27,7 +27,7 @@ struct MyClass {
// CHECK-NEXT: ],
// CHECK-NEXT: "ReturnType": {
// CHECK-NEXT: "IsBuiltIn": false,
-// CHECK-NEXT: "IsTemplate": false,
+// CHECK-NEXT: "IsTemplate": true,
// CHECK-NEXT: "Name": "T",
// CHECK-NEXT: "QualName": "T",
// CHECK-NEXT: "USR": "0000000000000000000000000000000000000000"
diff --git a/clang-tools-extra/test/clang-doc/json/namespace.cpp b/clang-tools-extra/test/clang-doc/json/namespace.cpp
index f1e094f6cab17..6e4fc6938d856 100644
--- a/clang-tools-extra/test/clang-doc/json/namespace.cpp
+++ b/clang-tools-extra/test/clang-doc/json/namespace.cpp
@@ -56,7 +56,7 @@ typedef int MyTypedef;
// CHECK-NEXT: }
// CHECK-NEXT: ],
// CHECK-NEXT: "ReturnType": {
-// CHECK-NEXT: "IsBuiltIn": false,
+// CHECK-NEXT: "IsBuiltIn": true,
// CHECK-NEXT: "IsTemplate": false,
// CHECK-NEXT: "Name": "void",
// CHECK-NEXT: "QualName": "void",
@@ -93,7 +93,7 @@ typedef int MyTypedef;
// CHECK-NEXT: "TypeDeclaration": "",
// CHECK-NEXT: "USR": "{{[0-9A-F]*}}",
// CHECK-NEXT: "Underlying": {
-// CHECK-NEXT: "IsBuiltIn": false,
+// CHECK-NEXT: "IsBuiltIn": true,
// CHECK-NEXT: "IsTemplate": false,
// CHECK-NEXT: "Name": "int",
// CHECK-NEXT: "QualName": "int",
@@ -111,8 +111,7 @@ typedef int MyTypedef;
// CHECK-NEXT: },
// CHECK-NEXT: "Name": "Global",
// CHECK-NEXT: "Type": {
-// COM: FIXME: IsBuiltIn emits as its default value
-// CHECK-NEXT: "IsBuiltIn": false,
+// CHECK-NEXT: "IsBuiltIn": true,
// CHECK-NEXT: "IsTemplate": false,
// CHECK-NEXT: "Name": "int",
// CHECK-NEXT: "QualName": "int",
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM. Maybe use [clang-doc] Serialize IsBuiltIn and IsTemplate for types
as the title?
IsBuiltIn and IsTemplate were being emitted as their default values.