[clang-tools-extra] r331539 - [clang-doc] Attaching a name to reference data

Julie Hockett via cfe-commits cfe-commits at lists.llvm.org
Fri May 4 10:02:13 PDT 2018


Author: juliehockett
Date: Fri May  4 10:02:13 2018
New Revision: 331539

URL: http://llvm.org/viewvc/llvm-project?rev=331539&view=rev
Log:
[clang-doc] Attaching a name to reference data

This adds the name of the referenced decl, in addition to its USR, to
the saved data, so that the backend can look at an info in isolation and
still be able to construct a human-readable name for it.

Differential Revision: https://reviews.llvm.org/D46281

Modified:
    clang-tools-extra/trunk/clang-doc/BitcodeWriter.cpp
    clang-tools-extra/trunk/clang-doc/BitcodeWriter.h
    clang-tools-extra/trunk/clang-doc/Representation.h
    clang-tools-extra/trunk/clang-doc/Serialize.cpp
    clang-tools-extra/trunk/test/clang-doc/mapper-class-in-class.cpp
    clang-tools-extra/trunk/test/clang-doc/mapper-class-in-function.cpp
    clang-tools-extra/trunk/test/clang-doc/mapper-class.cpp
    clang-tools-extra/trunk/test/clang-doc/mapper-comments.cpp
    clang-tools-extra/trunk/test/clang-doc/mapper-enum.cpp
    clang-tools-extra/trunk/test/clang-doc/mapper-function.cpp
    clang-tools-extra/trunk/test/clang-doc/mapper-method.cpp
    clang-tools-extra/trunk/test/clang-doc/mapper-namespace.cpp
    clang-tools-extra/trunk/test/clang-doc/mapper-struct.cpp
    clang-tools-extra/trunk/test/clang-doc/mapper-union.cpp

Modified: clang-tools-extra/trunk/clang-doc/BitcodeWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-doc/BitcodeWriter.cpp?rev=331539&r1=331538&r2=331539&view=diff
==============================================================================
--- clang-tools-extra/trunk/clang-doc/BitcodeWriter.cpp (original)
+++ clang-tools-extra/trunk/clang-doc/BitcodeWriter.cpp Fri May  4 10:02:13 2018
@@ -14,6 +14,9 @@
 namespace clang {
 namespace doc {
 
+// Empty SymbolID for comparison, so we don't have to construct one every time.
+static const SymbolID EmptySID = SymbolID();
+
 // Since id enums are not zero-indexed, we need to transform the given id into
 // its associated index.
 struct BlockIdToIndexFunctor {
@@ -82,18 +85,6 @@ static void LocationAbbrev(std::shared_p
        llvm::BitCodeAbbrevOp(llvm::BitCodeAbbrevOp::Blob)});
 }
 
-static void ReferenceAbbrev(std::shared_ptr<llvm::BitCodeAbbrev> &Abbrev) {
-  AbbrevGen(Abbrev,
-            {// 0. Fixed-size integer (ref type)
-             llvm::BitCodeAbbrevOp(llvm::BitCodeAbbrevOp::Fixed,
-                                   BitCodeConstants::ReferenceTypeSize),
-             // 1. Fixed-size integer (length of the USR or UnresolvedName)
-             llvm::BitCodeAbbrevOp(llvm::BitCodeAbbrevOp::Fixed,
-                                   BitCodeConstants::StringLengthSize),
-             // 2. The string blob
-             llvm::BitCodeAbbrevOp(llvm::BitCodeAbbrevOp::Blob)});
-}
-
 struct RecordIdDsc {
   llvm::StringRef Name;
   AbbrevDsc Abbrev = nullptr;
@@ -124,7 +115,8 @@ static const llvm::IndexedMap<llvm::Stri
           {BI_MEMBER_TYPE_BLOCK_ID, "MemberTypeBlock"},
           {BI_RECORD_BLOCK_ID, "RecordBlock"},
           {BI_FUNCTION_BLOCK_ID, "FunctionBlock"},
-          {BI_COMMENT_BLOCK_ID, "CommentBlock"}};
+          {BI_COMMENT_BLOCK_ID, "CommentBlock"},
+          {BI_REFERENCE_BLOCK_ID, "ReferenceBlock"}};
       assert(Inits.size() == BlockIdCount);
       for (const auto &Init : Inits)
         BlockIdNameMap[Init.first] = Init.second;
@@ -152,38 +144,32 @@ static const llvm::IndexedMap<RecordIdDs
           {COMMENT_ATTRKEY, {"AttrKey", &StringAbbrev}},
           {COMMENT_ATTRVAL, {"AttrVal", &StringAbbrev}},
           {COMMENT_ARG, {"Arg", &StringAbbrev}},
-          {TYPE_REF, {"Type", &ReferenceAbbrev}},
-          {FIELD_TYPE_REF, {"Type", &ReferenceAbbrev}},
           {FIELD_TYPE_NAME, {"Name", &StringAbbrev}},
-          {MEMBER_TYPE_REF, {"Type", &ReferenceAbbrev}},
           {MEMBER_TYPE_NAME, {"Name", &StringAbbrev}},
           {MEMBER_TYPE_ACCESS, {"Access", &IntAbbrev}},
           {NAMESPACE_USR, {"USR", &SymbolIDAbbrev}},
           {NAMESPACE_NAME, {"Name", &StringAbbrev}},
-          {NAMESPACE_NAMESPACE, {"Namespace", &ReferenceAbbrev}},
           {ENUM_USR, {"USR", &SymbolIDAbbrev}},
           {ENUM_NAME, {"Name", &StringAbbrev}},
-          {ENUM_NAMESPACE, {"Namespace", &ReferenceAbbrev}},
           {ENUM_DEFLOCATION, {"DefLocation", &LocationAbbrev}},
           {ENUM_LOCATION, {"Location", &LocationAbbrev}},
           {ENUM_MEMBER, {"Member", &StringAbbrev}},
           {ENUM_SCOPED, {"Scoped", &BoolAbbrev}},
           {RECORD_USR, {"USR", &SymbolIDAbbrev}},
           {RECORD_NAME, {"Name", &StringAbbrev}},
-          {RECORD_NAMESPACE, {"Namespace", &ReferenceAbbrev}},
           {RECORD_DEFLOCATION, {"DefLocation", &LocationAbbrev}},
           {RECORD_LOCATION, {"Location", &LocationAbbrev}},
           {RECORD_TAG_TYPE, {"TagType", &IntAbbrev}},
-          {RECORD_PARENT, {"Parent", &ReferenceAbbrev}},
-          {RECORD_VPARENT, {"VParent", &ReferenceAbbrev}},
           {FUNCTION_USR, {"USR", &SymbolIDAbbrev}},
           {FUNCTION_NAME, {"Name", &StringAbbrev}},
-          {FUNCTION_NAMESPACE, {"Namespace", &ReferenceAbbrev}},
           {FUNCTION_DEFLOCATION, {"DefLocation", &LocationAbbrev}},
           {FUNCTION_LOCATION, {"Location", &LocationAbbrev}},
-          {FUNCTION_PARENT, {"Parent", &ReferenceAbbrev}},
           {FUNCTION_ACCESS, {"Access", &IntAbbrev}},
-          {FUNCTION_IS_METHOD, {"IsMethod", &BoolAbbrev}}};
+          {FUNCTION_IS_METHOD, {"IsMethod", &BoolAbbrev}},
+          {REFERENCE_USR, {"USR", &SymbolIDAbbrev}},
+          {REFERENCE_NAME, {"Name", &StringAbbrev}},
+          {REFERENCE_TYPE, {"RefType", &IntAbbrev}},
+          {REFERENCE_FIELD, {"Field", &IntAbbrev}}};
       assert(Inits.size() == RecordIdCount);
       for (const auto &Init : Inits) {
         RecordIdNameMap[Init.first] = Init.second;
@@ -203,28 +189,28 @@ static const std::vector<std::pair<Block
           COMMENT_PARAMNAME, COMMENT_CLOSENAME, COMMENT_SELFCLOSING,
           COMMENT_EXPLICIT, COMMENT_ATTRKEY, COMMENT_ATTRVAL, COMMENT_ARG}},
         // Type Block
-        {BI_TYPE_BLOCK_ID, {TYPE_REF}},
+        {BI_TYPE_BLOCK_ID, {}},
         // FieldType Block
-        {BI_FIELD_TYPE_BLOCK_ID, {FIELD_TYPE_REF, FIELD_TYPE_NAME}},
+        {BI_FIELD_TYPE_BLOCK_ID, {FIELD_TYPE_NAME}},
         // MemberType Block
-        {BI_MEMBER_TYPE_BLOCK_ID,
-         {MEMBER_TYPE_REF, MEMBER_TYPE_NAME, MEMBER_TYPE_ACCESS}},
+        {BI_MEMBER_TYPE_BLOCK_ID, {MEMBER_TYPE_NAME, MEMBER_TYPE_ACCESS}},
         // Enum Block
         {BI_ENUM_BLOCK_ID,
-         {ENUM_USR, ENUM_NAME, ENUM_NAMESPACE, ENUM_DEFLOCATION, ENUM_LOCATION,
-          ENUM_MEMBER, ENUM_SCOPED}},
+         {ENUM_USR, ENUM_NAME, ENUM_DEFLOCATION, ENUM_LOCATION, ENUM_MEMBER,
+          ENUM_SCOPED}},
         // Namespace Block
-        {BI_NAMESPACE_BLOCK_ID,
-         {NAMESPACE_USR, NAMESPACE_NAME, NAMESPACE_NAMESPACE}},
+        {BI_NAMESPACE_BLOCK_ID, {NAMESPACE_USR, NAMESPACE_NAME}},
         // Record Block
         {BI_RECORD_BLOCK_ID,
-         {RECORD_USR, RECORD_NAME, RECORD_NAMESPACE, RECORD_DEFLOCATION,
-          RECORD_LOCATION, RECORD_TAG_TYPE, RECORD_PARENT, RECORD_VPARENT}},
+         {RECORD_USR, RECORD_NAME, RECORD_DEFLOCATION, RECORD_LOCATION,
+          RECORD_TAG_TYPE}},
         // Function Block
         {BI_FUNCTION_BLOCK_ID,
-         {FUNCTION_USR, FUNCTION_NAME, FUNCTION_NAMESPACE, FUNCTION_DEFLOCATION,
-          FUNCTION_LOCATION, FUNCTION_PARENT, FUNCTION_ACCESS,
-          FUNCTION_IS_METHOD}}};
+         {FUNCTION_USR, FUNCTION_NAME, FUNCTION_DEFLOCATION, FUNCTION_LOCATION,
+          FUNCTION_ACCESS, FUNCTION_IS_METHOD}},
+        // Reference Block
+        {BI_REFERENCE_BLOCK_ID,
+         {REFERENCE_USR, REFERENCE_NAME, REFERENCE_TYPE, REFERENCE_FIELD}}};
 
 // AbbreviationMap
 
@@ -293,7 +279,7 @@ void ClangDocBitcodeWriter::emitRecord(c
   assert(RecordIdNameMap[ID] && "Unknown RecordId.");
   assert(RecordIdNameMap[ID].Abbrev == &SymbolIDAbbrev &&
          "Abbrev type mismatch.");
-  if (!prepRecordData(ID, !Sym.empty()))
+  if (!prepRecordData(ID, Sym != EmptySID))
     return;
   assert(Sym.size() == 20);
   Record.push_back(Sym.size());
@@ -327,26 +313,6 @@ void ClangDocBitcodeWriter::emitRecord(c
   Stream.EmitRecordWithBlob(Abbrevs.get(ID), Record, "test");
 }
 
-void ClangDocBitcodeWriter::emitRecord(const Reference &Ref, RecordId ID) {
-  assert(RecordIdNameMap[ID] && "Unknown RecordId.");
-  assert(RecordIdNameMap[ID].Abbrev == &ReferenceAbbrev &&
-         "Abbrev type mismatch.");
-  SmallString<40> StringUSR;
-  StringRef OutString;
-  if (Ref.RefType == InfoType::IT_default)
-    OutString = Ref.UnresolvedName;
-  else {
-    StringUSR = llvm::toHex(llvm::toStringRef(Ref.USR));
-    OutString = StringUSR;
-  }
-  if (!prepRecordData(ID, !OutString.empty()))
-    return;
-  assert(OutString.size() < (1U << BitCodeConstants::StringLengthSize));
-  Record.push_back((int)Ref.RefType);
-  Record.push_back(OutString.size());
-  Stream.EmitRecordWithBlob(Abbrevs.get(ID), Record, OutString);
-}
-
 void ClangDocBitcodeWriter::emitRecord(bool Val, RecordId ID) {
   assert(RecordIdNameMap[ID] && "Unknown RecordId.");
   assert(RecordIdNameMap[ID].Abbrev == &BoolAbbrev && "Abbrev type mismatch.");
@@ -408,28 +374,37 @@ void ClangDocBitcodeWriter::emitBlockInf
 
 // Block emission
 
+void ClangDocBitcodeWriter::emitBlock(const Reference &R, FieldId Field) {
+  if (R.USR == EmptySID && R.Name.empty())
+    return;
+  StreamSubBlockGuard Block(Stream, BI_REFERENCE_BLOCK_ID);
+  emitRecord(R.USR, REFERENCE_USR);
+  emitRecord(R.Name, REFERENCE_NAME);
+  emitRecord((unsigned)R.RefType, REFERENCE_TYPE);
+  emitRecord((unsigned)Field, REFERENCE_FIELD);
+}
+
 void ClangDocBitcodeWriter::emitBlock(const TypeInfo &T) {
   StreamSubBlockGuard Block(Stream, BI_TYPE_BLOCK_ID);
-  emitRecord(T.Type, TYPE_REF);
+  emitBlock(T.Type, FieldId::F_type);
 }
 
 void ClangDocBitcodeWriter::emitBlock(const FieldTypeInfo &T) {
   StreamSubBlockGuard Block(Stream, BI_FIELD_TYPE_BLOCK_ID);
-  emitRecord(T.Type, FIELD_TYPE_REF);
+  emitBlock(T.Type, FieldId::F_type);
   emitRecord(T.Name, FIELD_TYPE_NAME);
 }
 
 void ClangDocBitcodeWriter::emitBlock(const MemberTypeInfo &T) {
   StreamSubBlockGuard Block(Stream, BI_MEMBER_TYPE_BLOCK_ID);
-  emitRecord(T.Type, MEMBER_TYPE_REF);
+  emitBlock(T.Type, FieldId::F_type);
   emitRecord(T.Name, MEMBER_TYPE_NAME);
   emitRecord(T.Access, MEMBER_TYPE_ACCESS);
 }
 
 void ClangDocBitcodeWriter::emitBlock(const CommentInfo &I) {
   StreamSubBlockGuard Block(Stream, BI_COMMENT_BLOCK_ID);
-  for (const auto &L :
-       std::vector<std::pair<llvm::StringRef, RecordId>>{
+  for (const auto &L : std::vector<std::pair<llvm::StringRef, RecordId>>{
            {I.Kind, COMMENT_KIND},
            {I.Text, COMMENT_TEXT},
            {I.Name, COMMENT_NAME},
@@ -453,7 +428,7 @@ void ClangDocBitcodeWriter::emitBlock(co
   emitRecord(I.USR, X##_USR);                                                  \
   emitRecord(I.Name, X##_NAME);                                                \
   for (const auto &N : I.Namespace)                                            \
-    emitRecord(N, X##_NAMESPACE);                                              \
+    emitBlock(N, FieldId::F_namespace);                                        \
   for (const auto &CI : I.Description)                                         \
     emitBlock(CI);
 
@@ -485,9 +460,9 @@ void ClangDocBitcodeWriter::emitBlock(co
   for (const auto &N : I.Members)
     emitBlock(N);
   for (const auto &P : I.Parents)
-    emitRecord(P, RECORD_PARENT);
+    emitBlock(P, FieldId::F_parent);
   for (const auto &P : I.VirtualParents)
-    emitRecord(P, RECORD_VPARENT);
+    emitBlock(P, FieldId::F_vparent);
 }
 
 void ClangDocBitcodeWriter::emitBlock(const FunctionInfo &I) {
@@ -498,7 +473,7 @@ void ClangDocBitcodeWriter::emitBlock(co
     emitRecord(I.DefLoc.getValue(), FUNCTION_DEFLOCATION);
   for (const auto &L : I.Loc)
     emitRecord(L, FUNCTION_LOCATION);
-  emitRecord(I.Parent, FUNCTION_PARENT);
+  emitBlock(I.Parent, FieldId::F_parent);
   emitBlock(I.ReturnType);
   for (const auto &N : I.Params)
     emitBlock(N);

Modified: clang-tools-extra/trunk/clang-doc/BitcodeWriter.h
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-doc/BitcodeWriter.h?rev=331539&r1=331538&r2=331539&view=diff
==============================================================================
--- clang-tools-extra/trunk/clang-doc/BitcodeWriter.h (original)
+++ clang-tools-extra/trunk/clang-doc/BitcodeWriter.h Fri May  4 10:02:13 2018
@@ -31,7 +31,7 @@ namespace doc {
 // Current version number of clang-doc bitcode.
 // Should be bumped when removing or changing BlockIds, RecordIds, or
 // BitCodeConstants, though they can be added without breaking it.
-static const unsigned VersionNumber = 1;
+static const unsigned VersionNumber = 2;
 
 struct BitCodeConstants {
   static constexpr unsigned RecordSize = 16U;
@@ -59,20 +59,20 @@ enum BlockId {
   BI_RECORD_BLOCK_ID,
   BI_FUNCTION_BLOCK_ID,
   BI_COMMENT_BLOCK_ID,
-  BI_FIRST = BI_VERSION_BLOCK_ID,
-  BI_LAST = BI_COMMENT_BLOCK_ID
+  BI_REFERENCE_BLOCK_ID,
+  BI_LAST,
+  BI_FIRST = BI_VERSION_BLOCK_ID
 };
 
 // New Ids need to be added to the enum here, and to the relevant IdNameMap and
 // initialization list in the implementation file.
-#define INFORECORDS(X) X##_USR, X##_NAME, X##_NAMESPACE
+#define INFORECORDS(X) X##_USR, X##_NAME
 
 enum RecordId {
   VERSION = 1,
   INFORECORDS(FUNCTION),
   FUNCTION_DEFLOCATION,
   FUNCTION_LOCATION,
-  FUNCTION_PARENT,
   FUNCTION_ACCESS,
   FUNCTION_IS_METHOD,
   COMMENT_KIND,
@@ -86,10 +86,7 @@ enum RecordId {
   COMMENT_ATTRKEY,
   COMMENT_ATTRVAL,
   COMMENT_ARG,
-  TYPE_REF,
-  FIELD_TYPE_REF,
   FIELD_TYPE_NAME,
-  MEMBER_TYPE_REF,
   MEMBER_TYPE_NAME,
   MEMBER_TYPE_ACCESS,
   INFORECORDS(NAMESPACE),
@@ -102,17 +99,22 @@ enum RecordId {
   RECORD_DEFLOCATION,
   RECORD_LOCATION,
   RECORD_TAG_TYPE,
-  RECORD_PARENT,
-  RECORD_VPARENT,
-  RI_FIRST = VERSION,
-  RI_LAST = RECORD_VPARENT
+  REFERENCE_USR,
+  REFERENCE_NAME,
+  REFERENCE_TYPE,
+  REFERENCE_FIELD,
+  RI_LAST,
+  RI_FIRST = VERSION
 };
 
-static constexpr unsigned BlockIdCount = BI_LAST - BI_FIRST + 1;
-static constexpr unsigned RecordIdCount = RI_LAST - RI_FIRST + 1;
+static constexpr unsigned BlockIdCount = BI_LAST - BI_FIRST;
+static constexpr unsigned RecordIdCount = RI_LAST - RI_FIRST;
 
 #undef INFORECORDS
 
+// Identifiers for differentiating between subblocks
+enum class FieldId { F_namespace = 1, F_parent, F_vparent, F_type };
+
 class ClangDocBitcodeWriter {
 public:
   ClangDocBitcodeWriter(llvm::BitstreamWriter &Stream) : Stream(Stream) {
@@ -137,6 +139,7 @@ public:
   void emitBlock(const FieldTypeInfo &B);
   void emitBlock(const MemberTypeInfo &B);
   void emitBlock(const CommentInfo &B);
+  void emitBlock(const Reference &B, FieldId F);
 
 private:
   class AbbreviationMap {

Modified: clang-tools-extra/trunk/clang-doc/Representation.h
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-doc/Representation.h?rev=331539&r1=331538&r2=331539&view=diff
==============================================================================
--- clang-tools-extra/trunk/clang-doc/Representation.h (original)
+++ clang-tools-extra/trunk/clang-doc/Representation.h Fri May  4 10:02:13 2018
@@ -30,11 +30,11 @@ using SymbolID = std::array<uint8_t, 20>
 
 struct Info;
 enum class InfoType {
+  IT_default,
   IT_namespace,
   IT_record,
   IT_function,
-  IT_enum,
-  IT_default
+  IT_enum
 };
 
 // A representation of a parsed comment.
@@ -42,13 +42,13 @@ struct CommentInfo {
   CommentInfo() = default;
   CommentInfo(CommentInfo &&Other) : Children(std::move(Other.Children)) {}
 
-  SmallString<16>
-      Kind; // Kind of comment (TextComment, InlineCommandComment,
-            // HTMLStartTagComment, HTMLEndTagComment, BlockCommandComment,
-            // ParamCommandComment, TParamCommandComment, VerbatimBlockComment,
-            // VerbatimBlockLineComment, VerbatimLineComment).
-  SmallString<64> Text;      // Text of the comment.
-  SmallString<16> Name;      // Name of the comment (for Verbatim and HTML).
+  SmallString<16> Kind; // Kind of comment (TextComment, InlineCommandComment,
+                        // HTMLStartTagComment, HTMLEndTagComment,
+                        // BlockCommandComment, ParamCommandComment,
+                        // TParamCommandComment, VerbatimBlockComment,
+                        // VerbatimBlockLineComment, VerbatimLineComment).
+  SmallString<64> Text; // Text of the comment.
+  SmallString<16> Name; // Name of the comment (for Verbatim and HTML).
   SmallString<8> Direction;  // Parameter direction (for (T)ParamCommand).
   SmallString<16> ParamName; // Parameter name (for (T)ParamCommand).
   SmallString<16> CloseName; // Closing tag name (for VerbatimBlock).
@@ -67,20 +67,22 @@ struct CommentInfo {
 
 struct Reference {
   Reference() = default;
-  Reference(llvm::StringRef Name) : UnresolvedName(Name) {}
-  Reference(SymbolID USR, InfoType IT) : USR(USR), RefType(IT) {}
-
-  SymbolID USR;                   // Unique identifer for referenced decl
-  SmallString<16> UnresolvedName; // Name of unresolved type.
-  InfoType RefType =
-      InfoType::IT_default; // Indicates the type of this Reference (namespace,
-                            // record, function, enum, default).
+  Reference(llvm::StringRef Name) : Name(Name) {}
+  Reference(SymbolID USR, StringRef Name, InfoType IT)
+      : USR(USR), Name(Name), RefType(IT) {}
+
+  SymbolID USR = SymbolID(); // Unique identifer for referenced decl
+  SmallString<16> Name;      // Name of type (possibly unresolved).
+  InfoType RefType = InfoType::IT_default; // Indicates the type of this
+                                           // Reference (namespace, record,
+                                           // function, enum, default).
 };
 
 // A base struct for TypeInfos
 struct TypeInfo {
   TypeInfo() = default;
-  TypeInfo(SymbolID &Type, InfoType IT) : Type(Type, IT) {}
+  TypeInfo(SymbolID Type, StringRef Field, InfoType IT)
+      : Type(Type, Field, IT) {}
   TypeInfo(llvm::StringRef RefName) : Type(RefName) {}
 
   Reference Type; // Referenced type in this info.
@@ -89,8 +91,9 @@ struct TypeInfo {
 // Info for field types.
 struct FieldTypeInfo : public TypeInfo {
   FieldTypeInfo() = default;
-  FieldTypeInfo(SymbolID &Type, InfoType IT, llvm::StringRef Name)
-      : TypeInfo(Type, IT), Name(Name) {}
+  FieldTypeInfo(SymbolID Type, StringRef Field, InfoType IT,
+                llvm::StringRef Name)
+      : TypeInfo(Type, Field, IT), Name(Name) {}
   FieldTypeInfo(llvm::StringRef RefName, llvm::StringRef Name)
       : TypeInfo(RefName), Name(Name) {}
 
@@ -100,15 +103,17 @@ struct FieldTypeInfo : public TypeInfo {
 // Info for member types.
 struct MemberTypeInfo : public FieldTypeInfo {
   MemberTypeInfo() = default;
-  MemberTypeInfo(SymbolID &Type, InfoType IT, llvm::StringRef Name)
-      : FieldTypeInfo(Type, IT, Name) {}
-  MemberTypeInfo(llvm::StringRef RefName, llvm::StringRef Name)
-      : FieldTypeInfo(RefName, Name) {}
-
-  AccessSpecifier Access =
-      clang::AccessSpecifier::AS_none; // Access level associated with this
-                                       // info (public, protected, private,
-                                       // none).
+  MemberTypeInfo(SymbolID Type, StringRef Field, InfoType IT,
+                 llvm::StringRef Name, AccessSpecifier Access)
+      : FieldTypeInfo(Type, Field, IT, Name), Access(Access) {}
+  MemberTypeInfo(llvm::StringRef RefName, llvm::StringRef Name,
+                 AccessSpecifier Access)
+      : FieldTypeInfo(RefName, Name), Access(Access) {}
+
+  AccessSpecifier Access = AccessSpecifier::AS_none; // Access level associated
+                                                     // with this info (public,
+                                                     // protected, private,
+                                                     // none).
 };
 
 struct Location {
@@ -148,10 +153,10 @@ struct FunctionInfo : public SymbolInfo
   bool IsMethod = false; // Indicates whether this function is a class method.
   Reference Parent;      // Reference to the parent class decl for this method.
   TypeInfo ReturnType;   // Info about the return type of this function.
-  llvm::SmallVector<FieldTypeInfo, 4> Params; // List of parameters.
-  AccessSpecifier Access =
-      AccessSpecifier::AS_none; // Access level for this method (public,
-                                // private, protected, none).
+  llvm::SmallVector<FieldTypeInfo, 4> Params;        // List of parameters.
+  AccessSpecifier Access = AccessSpecifier::AS_none; // Access level for this
+                                                     // method (public, private,
+                                                     // protected, none).
 };
 
 // TODO: Expand to allow for documenting templating, inheritance access,

Modified: clang-tools-extra/trunk/clang-doc/Serialize.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-doc/Serialize.cpp?rev=331539&r1=331538&r2=331539&view=diff
==============================================================================
--- clang-tools-extra/trunk/clang-doc/Serialize.cpp (original)
+++ clang-tools-extra/trunk/clang-doc/Serialize.cpp Fri May  4 10:02:13 2018
@@ -173,21 +173,23 @@ static RecordDecl *getDeclForType(const
 
 static void parseFields(RecordInfo &I, const RecordDecl *D) {
   for (const FieldDecl *F : D->fields()) {
-    // FIXME: Set Access to the appropriate value.
-    SymbolID Type;
-    std::string Name;
-    InfoType RefType;
     if (const auto *T = getDeclForType(F->getTypeSourceInfo()->getType())) {
-      Type = getUSRForDecl(T);
-      if (dyn_cast<EnumDecl>(T))
-        RefType = InfoType::IT_enum;
-      else if (dyn_cast<RecordDecl>(T))
-        RefType = InfoType::IT_record;
-      I.Members.emplace_back(Type, RefType, F->getQualifiedNameAsString());
-    } else {
-      Name = F->getTypeSourceInfo()->getType().getAsString();
-      I.Members.emplace_back(Name, F->getQualifiedNameAsString());
+      // Use getAccessUnsafe so that we just get the default AS_none if it's not
+      // valid, as opposed to an assert.
+      if (const auto *N = dyn_cast<EnumDecl>(T)) {
+        I.Members.emplace_back(getUSRForDecl(T), N->getNameAsString(),
+                               InfoType::IT_enum, F->getNameAsString(),
+                               N->getAccessUnsafe());
+        continue;
+      } else if (const auto *N = dyn_cast<RecordDecl>(T)) {
+        I.Members.emplace_back(getUSRForDecl(T), N->getNameAsString(),
+                               InfoType::IT_record, F->getNameAsString(),
+                               N->getAccessUnsafe());
+        continue;
+      }
     }
+    I.Members.emplace_back(F->getTypeSourceInfo()->getType().getAsString(),
+                           F->getNameAsString(), F->getAccessUnsafe());
   }
 }
 
@@ -198,20 +200,19 @@ static void parseEnumerators(EnumInfo &I
 
 static void parseParameters(FunctionInfo &I, const FunctionDecl *D) {
   for (const ParmVarDecl *P : D->parameters()) {
-    SymbolID Type;
-    std::string Name;
-    InfoType RefType;
     if (const auto *T = getDeclForType(P->getOriginalType())) {
-      Type = getUSRForDecl(T);
-      if (dyn_cast<EnumDecl>(T))
-        RefType = InfoType::IT_enum;
-      else if (dyn_cast<RecordDecl>(T))
-        RefType = InfoType::IT_record;
-      I.Params.emplace_back(Type, RefType, P->getQualifiedNameAsString());
-    } else {
-      Name = P->getOriginalType().getAsString();
-      I.Params.emplace_back(Name, P->getQualifiedNameAsString());
+      if (const auto *N = dyn_cast<EnumDecl>(T)) {
+        I.Params.emplace_back(getUSRForDecl(N), N->getNameAsString(),
+                              InfoType::IT_enum, P->getNameAsString());
+        continue;
+      } else if (const auto *N = dyn_cast<RecordDecl>(T)) {
+        I.Params.emplace_back(getUSRForDecl(N), N->getNameAsString(),
+                              InfoType::IT_record, P->getNameAsString());
+        continue;
+      }
     }
+    I.Params.emplace_back(P->getOriginalType().getAsString(),
+                          P->getNameAsString());
   }
 }
 
@@ -220,13 +221,15 @@ static void parseBases(RecordInfo &I, co
     if (B.isVirtual())
       continue;
     if (const auto *P = getDeclForType(B.getType()))
-      I.Parents.emplace_back(getUSRForDecl(P), InfoType::IT_record);
+      I.Parents.emplace_back(getUSRForDecl(P), P->getNameAsString(),
+                             InfoType::IT_record);
     else
       I.Parents.emplace_back(B.getType().getAsString());
   }
   for (const CXXBaseSpecifier &B : D->vbases()) {
     if (const auto *P = getDeclForType(B.getType()))
-      I.VirtualParents.emplace_back(getUSRForDecl(P), InfoType::IT_record);
+      I.VirtualParents.emplace_back(getUSRForDecl(P), P->getNameAsString(),
+                                    InfoType::IT_record);
     else
       I.VirtualParents.emplace_back(B.getType().getAsString());
   }
@@ -239,13 +242,17 @@ populateParentNamespaces(llvm::SmallVect
   const auto *DC = dyn_cast<DeclContext>(D);
   while ((DC = DC->getParent())) {
     if (const auto *N = dyn_cast<NamespaceDecl>(DC))
-      Namespaces.emplace_back(getUSRForDecl(N), InfoType::IT_namespace);
+      Namespaces.emplace_back(getUSRForDecl(N), N->getNameAsString(),
+                              InfoType::IT_namespace);
     else if (const auto *N = dyn_cast<RecordDecl>(DC))
-      Namespaces.emplace_back(getUSRForDecl(N), InfoType::IT_record);
+      Namespaces.emplace_back(getUSRForDecl(N), N->getNameAsString(),
+                              InfoType::IT_record);
     else if (const auto *N = dyn_cast<FunctionDecl>(DC))
-      Namespaces.emplace_back(getUSRForDecl(N), InfoType::IT_function);
+      Namespaces.emplace_back(getUSRForDecl(N), N->getNameAsString(),
+                              InfoType::IT_function);
     else if (const auto *N = dyn_cast<EnumDecl>(DC))
-      Namespaces.emplace_back(getUSRForDecl(N), InfoType::IT_enum);
+      Namespaces.emplace_back(getUSRForDecl(N), N->getNameAsString(),
+                              InfoType::IT_enum);
   }
 }
 
@@ -275,13 +282,14 @@ static void populateFunctionInfo(Functio
                                  StringRef Filename) {
   populateSymbolInfo(I, D, FC, LineNumber, Filename);
   if (const auto *T = getDeclForType(D->getReturnType())) {
-    I.ReturnType.Type.USR = getUSRForDecl(T);
     if (dyn_cast<EnumDecl>(T))
-      I.ReturnType.Type.RefType = InfoType::IT_enum;
+      I.ReturnType =
+          TypeInfo(getUSRForDecl(T), T->getNameAsString(), InfoType::IT_enum);
     else if (dyn_cast<RecordDecl>(T))
-      I.ReturnType.Type.RefType = InfoType::IT_record;
+      I.ReturnType =
+          TypeInfo(getUSRForDecl(T), T->getNameAsString(), InfoType::IT_record);
   } else {
-    I.ReturnType.Type.UnresolvedName = D->getReturnType().getAsString();
+    I.ReturnType = TypeInfo(D->getReturnType().getAsString());
   }
   parseParameters(I, D);
 }
@@ -317,7 +325,8 @@ std::string emitInfo(const CXXMethodDecl
   FunctionInfo I;
   populateFunctionInfo(I, D, FC, LineNumber, File);
   I.IsMethod = true;
-  I.Parent = Reference(getUSRForDecl(D->getParent()), InfoType::IT_record);
+  I.Parent = Reference{getUSRForDecl(D->getParent()),
+                       D->getParent()->getNameAsString(), InfoType::IT_record};
   I.Access = D->getAccess();
   return serialize(I);
 }

Modified: clang-tools-extra/trunk/test/clang-doc/mapper-class-in-class.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-doc/mapper-class-in-class.cpp?rev=331539&r1=331538&r2=331539&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/clang-doc/mapper-class-in-class.cpp (original)
+++ clang-tools-extra/trunk/test/clang-doc/mapper-class-in-class.cpp Fri May  4 10:02:13 2018
@@ -12,24 +12,29 @@ class X {
 
 // CHECK-X: <BLOCKINFO_BLOCK/>
 // CHECK-X-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-  // CHECK-X-NEXT: <Version abbrevid=4 op0=1/>
+  // CHECK-X-NEXT: <Version abbrevid=4 op0=2/>
 // CHECK-X-NEXT: </VersionBlock>
 // CHECK-X-NEXT: <RecordBlock NumWords={{[0-9]*}} BlockCodeSize=4>
   // CHECK-X-NEXT: <USR abbrevid=4 op0=20 op1=202 op2=124 op3=121 op4=53 op5=115 op6=11 op7=94 op8=172 op9=210 op10=95 op11=8 op12=14 op13=156 op14=131 op15=250 op16=8 op17=124 op18=205 op19=199 op20=94/>
   // CHECK-X-NEXT: <Name abbrevid=5 op0=1/> blob data = 'X'
-  // CHECK-X-NEXT: <DefLocation abbrevid=7 op0=9 op1={{[0-9]*}}/> blob data = '{{.*}}'
-  // CHECK-X-NEXT: <TagType abbrevid=9 op0=3/>
+  // CHECK-X-NEXT: <DefLocation abbrevid=6 op0=9 op1={{[0-9]*}}/> blob data = '{{.*}}'
+  // CHECK-X-NEXT: <TagType abbrevid=8 op0=3/>
 // CHECK-X-NEXT: </RecordBlock>
 
 
 // CHECK-X-Y: <BLOCKINFO_BLOCK/>
 // CHECK-X-Y-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-  // CHECK-X-Y-NEXT: <Version abbrevid=4 op0=1/>
+  // CHECK-X-Y-NEXT: <Version abbrevid=4 op0=2/>
 // CHECK-X-Y-NEXT: </VersionBlock>
 // CHECK-X-Y-NEXT: <RecordBlock NumWords={{[0-9]*}} BlockCodeSize=4>
   // CHECK-X-Y-NEXT: <USR abbrevid=4 op0=20 op1=100 op2=26 op3=180 op4=163 op5=211 op6=99 op7=153 op8=149 op9=74 op10=205 op11=226 op12=156 op13=122 op14=136 op15=51 op16=3 op17=43 op18=244 op19=4 op20=114/>
   // CHECK-X-Y-NEXT: <Name abbrevid=5 op0=1/> blob data = 'Y'
-  // CHECK-X-Y-NEXT: <Namespace abbrevid=6 op0=1 op1=40/> blob data = 'CA7C7935730B5EACD25F080E9C83FA087CCDC75E'
-  // CHECK-X-Y-NEXT: <DefLocation abbrevid=7 op0=10 op1={{[0-9]*}}/> blob data = '{{.*}}'
-  // CHECK-X-Y-NEXT: <TagType abbrevid=9 op0=3/>
+  // CHECK-X-Y-NEXT: <ReferenceBlock NumWords=10 BlockCodeSize=4>
+      // CHECK-X-Y-NEXT: <USR abbrevid=4 op0=20 op1=202 op2=124 op3=121 op4=53 op5=115 op6=11 op7=94 op8=172 op9=210 op10=95 op11=8 op12=14 op13=156 op14=131 op15=250 op16=8 op17=124 op18=205 op19=199 op20=94/>
+      // CHECK-X-Y-NEXT: <Name abbrevid=5 op0=1/> blob data = 'X'
+      // CHECK-X-Y-NEXT: <RefType abbrevid=6 op0=2/>
+      // CHECK-X-Y-NEXT: <Field abbrevid=7 op0=1/>
+  // CHECK-X-Y-NEXT: </ReferenceBlock>  
+  // CHECK-X-Y-NEXT: <DefLocation abbrevid=6 op0=10 op1={{[0-9]*}}/> blob data = '{{.*}}'
+  // CHECK-X-Y-NEXT: <TagType abbrevid=8 op0=3/>
 // CHECK-X-Y-NEXT: </RecordBlock>

Modified: clang-tools-extra/trunk/test/clang-doc/mapper-class-in-function.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-doc/mapper-class-in-function.cpp?rev=331539&r1=331538&r2=331539&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/clang-doc/mapper-class-in-function.cpp (original)
+++ clang-tools-extra/trunk/test/clang-doc/mapper-class-in-function.cpp Fri May  4 10:02:13 2018
@@ -15,27 +15,35 @@ void H() {
 
 // CHECK-H: <BLOCKINFO_BLOCK/>
 // CHECK-H-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-  // CHECK-H-NEXT: <Version abbrevid=4 op0=1/>
+  // CHECK-H-NEXT: <Version abbrevid=4 op0=2/>
 // CHECK-H-NEXT: </VersionBlock>
 // CHECK-H-NEXT: <FunctionBlock NumWords={{[0-9]*}} BlockCodeSize=4>
   // CHECK-H-NEXT: <USR abbrevid=4 op0=20 op1=182 op2=172 op3=76 op4=92 op5=159 op6=46 op7=163 op8=242 op9=179 op10=236 op11=225 op12=163 op13=61 op14=52 op15=159 op16=78 op17=229 op18=2 op19=178 op20=78/>
   // CHECK-H-NEXT: <Name abbrevid=5 op0=1/> blob data = 'H'
-  // CHECK-H-NEXT: <DefLocation abbrevid=7 op0=12 op1={{[0-9]*}}/> blob data = '{{.*}}'
-  // CHECK-H-NEXT: <TypeBlock NumWords=4 BlockCodeSize=4>
-    // CHECK-H-NEXT: <Type abbrevid=4 op0=4 op1=4/> blob data = 'void'
+  // CHECK-H-NEXT: <DefLocation abbrevid=6 op0=12 op1={{[0-9]*}}/> blob data = '{{.*}}'
+  // CHECK-H-NEXT: <TypeBlock NumWords={{[0-9]*}} BlockCodeSize=4>
+    // CHECK-H-NEXT: <ReferenceBlock NumWords={{[0-9]*}} BlockCodeSize=4>
+      // CHECK-H-NEXT: <Name abbrevid=5 op0=4/> blob data = 'void'
+      // CHECK-H-NEXT: <Field abbrevid=7 op0=4/>
+    // CHECK-H-NEXT: </ReferenceBlock>
   // CHECK-H-NEXT: </TypeBlock>
 // CHECK-H-NEXT: </FunctionBlock>
 
 // CHECK-H-I: <BLOCKINFO_BLOCK/>
 // CHECK-H-I-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-  // CHECK-H-I-NEXT: <Version abbrevid=4 op0=1/>
+  // CHECK-H-I-NEXT: <Version abbrevid=4 op0=2/>
 // CHECK-H-I-NEXT: </VersionBlock>
 // CHECK-H-I-NEXT: <RecordBlock NumWords={{[0-9]*}} BlockCodeSize=4>
   // CHECK-H-I-NEXT: <USR abbrevid=4 op0=20 op1=1 op2=169 op3=95 op4=63 op5=115 op6=245 op7=50 op8=129 op9=179 op10=229 op11=1 op12=9 op13=165 op14=119 op15=253 op16=36 op17=147 op18=21 op19=147 op20=101/>
   // CHECK-H-I-NEXT: <Name abbrevid=5 op0=1/> blob data = 'I'
-  // CHECK-H-I-NEXT: <Namespace abbrevid=6 op0=2 op1=40/> blob data = 'B6AC4C5C9F2EA3F2B3ECE1A33D349F4EE502B24E'
-  // CHECK-H-I-NEXT: <DefLocation abbrevid=7 op0=13 op1={{[0-9]*}}/> blob data = '{{.*}}'
-  // CHECK-H-I-NEXT: <TagType abbrevid=9 op0=3/>
+  // CHECK-H-I-NEXT: <ReferenceBlock NumWords={{[0-9]*}} BlockCodeSize=4>
+    // CHECK-H-I-NEXT: <USR abbrevid=4 op0=20 op1=182 op2=172 op3=76 op4=92 op5=159 op6=46 op7=163 op8=242 op9=179 op10=236 op11=225 op12=163 op13=61 op14=52 op15=159 op16=78 op17=229 op18=2 op19=178 op20=78/>
+    // CHECK-H-I-NEXT: <Name abbrevid=5 op0=1/> blob data = 'H'
+    // CHECK-H-I-NEXT: <RefType abbrevid=6 op0=3/>
+    // CHECK-H-I-NEXT: <Field abbrevid=7 op0=1/>
+  // CHECK-H-I-NEXT: </ReferenceBlock>
+  // CHECK-H-I-NEXT: <DefLocation abbrevid=6 op0=13 op1={{[0-9]*}}/> blob data = '{{.*}}'
+  // CHECK-H-I-NEXT: <TagType abbrevid=8 op0=3/>
 // CHECK-H-I-NEXT: </RecordBlock>
 
 

Modified: clang-tools-extra/trunk/test/clang-doc/mapper-class.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-doc/mapper-class.cpp?rev=331539&r1=331538&r2=331539&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/clang-doc/mapper-class.cpp (original)
+++ clang-tools-extra/trunk/test/clang-doc/mapper-class.cpp Fri May  4 10:02:13 2018
@@ -9,11 +9,11 @@ class E {};
 
 // CHECK: <BLOCKINFO_BLOCK/>
 // CHECK-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-  // CHECK-NEXT: <Version abbrevid=4 op0=1/>
+  // CHECK-NEXT: <Version abbrevid=4 op0=2/>
 // CHECK-NEXT: </VersionBlock>
 // CHECK-NEXT: <RecordBlock NumWords={{[0-9]*}} BlockCodeSize=4>
   // CHECK-NEXT: <USR abbrevid=4 op0=20 op1=40 op2=149 op3=132 op4=168 op5=224 op6=255 op7=65 op8=120 op9=167 op10=148 op11=98 op12=42 op13=84 op14=122 op15=166 op16=34 op17=80 op18=57 op19=103 op20=161/>
   // CHECK-NEXT: <Name abbrevid=5 op0=1/> blob data = 'E'
-  // CHECK-NEXT: <DefLocation abbrevid=7 op0=8 op1={{[0-9]*}}/> blob data = '{{.*}}'
-  // CHECK-NEXT: <TagType abbrevid=9 op0=3/>
+  // CHECK-NEXT: <DefLocation abbrevid=6 op0=8 op1={{[0-9]*}}/> blob data = '{{.*}}'
+  // CHECK-NEXT: <TagType abbrevid=8 op0=3/>
 // CHECK-NEXT: </RecordBlock>

Modified: clang-tools-extra/trunk/test/clang-doc/mapper-comments.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-doc/mapper-comments.cpp?rev=331539&r1=331538&r2=331539&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/clang-doc/mapper-comments.cpp (original)
+++ clang-tools-extra/trunk/test/clang-doc/mapper-comments.cpp Fri May  4 10:02:13 2018
@@ -25,7 +25,7 @@ int F(int I, int J);
 
 // CHECK: <BLOCKINFO_BLOCK/>
 // CHECK-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-  // CHECK-NEXT: <Version abbrevid=4 op0=1/>
+  // CHECK-NEXT: <Version abbrevid=4 op0=2/>
 // CHECK-NEXT: </VersionBlock>
 // CHECK-NEXT: <FunctionBlock NumWords={{[0-9]*}} BlockCodeSize=4>
   // CHECK-NEXT: <USR abbrevid=4 op0=20 op1=117 op2=116 op3=99 op4=6 op5=20 op6=165 op7=53 op8=113 op9=14 op10=90 op11=106 op12=188 op13=255 op14=249 op15=139 op16=202 op17=45 op18=6 op19=164 op20=202/>
@@ -157,16 +157,25 @@ int F(int I, int J);
       // CHECK-NEXT: </CommentBlock>
     // CHECK-NEXT: </CommentBlock>
   // CHECK-NEXT: </CommentBlock>
-  // CHECK-NEXT: <Location abbrevid=8 op0=24 op1={{[0-9]*}}/> blob data = '{{.*}}'
-  // CHECK-NEXT: <TypeBlock NumWords=4 BlockCodeSize=4>
-    // CHECK-NEXT: <Type abbrevid=4 op0=4 op1=3/> blob data = 'int'
+  // CHECK-NEXT: <Location abbrevid=7 op0=24 op1={{[0-9]*}}/> blob data = '{{.*}}'
+  // CHECK-NEXT: <TypeBlock NumWords={{[0-9]*}} BlockCodeSize=4>
+    // CHECK-NEXT: <ReferenceBlock NumWords={{[0-9]*}} BlockCodeSize=4>
+      // CHECK-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+      // CHECK-NEXT: <Field abbrevid=7 op0=4/>
+    // CHECK-NEXT: </ReferenceBlock>
   // CHECK-NEXT: </TypeBlock>
-  // CHECK-NEXT: <FieldTypeBlock NumWords=6 BlockCodeSize=4>
-    // CHECK-NEXT: <Type abbrevid=4 op0=4 op1=3/> blob data = 'int'
-    // CHECK-NEXT: <Name abbrevid=5 op0=1/> blob data = 'I'
+  // CHECK-NEXT: <FieldTypeBlock NumWords={{[0-9]*}} BlockCodeSize=4>
+    // CHECK-NEXT: <ReferenceBlock NumWords={{[0-9]*}} BlockCodeSize=4>
+      // CHECK-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+      // CHECK-NEXT: <Field abbrevid=7 op0=4/>
+    // CHECK-NEXT: </ReferenceBlock>
+    // CHECK-NEXT: <Name abbrevid=4 op0=1/> blob data = 'I'
   // CHECK-NEXT: </FieldTypeBlock>
-  // CHECK-NEXT: <FieldTypeBlock NumWords=6 BlockCodeSize=4>
-    // CHECK-NEXT: <Type abbrevid=4 op0=4 op1=3/> blob data = 'int'
-    // CHECK-NEXT: <Name abbrevid=5 op0=1/> blob data = 'J'
+  // CHECK-NEXT: <FieldTypeBlock NumWords={{[0-9]*}} BlockCodeSize=4>
+    // CHECK-NEXT: <ReferenceBlock NumWords={{[0-9]*}} BlockCodeSize=4>
+      // CHECK-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+      // CHECK-NEXT: <Field abbrevid=7 op0=4/>
+    // CHECK-NEXT: </ReferenceBlock>
+    // CHECK-NEXT: <Name abbrevid=4 op0=1/> blob data = 'J'
   // CHECK-NEXT: </FieldTypeBlock>
 // CHECK-NEXT: </FunctionBlock>

Modified: clang-tools-extra/trunk/test/clang-doc/mapper-enum.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-doc/mapper-enum.cpp?rev=331539&r1=331538&r2=331539&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/clang-doc/mapper-enum.cpp (original)
+++ clang-tools-extra/trunk/test/clang-doc/mapper-enum.cpp Fri May  4 10:02:13 2018
@@ -10,27 +10,27 @@ enum B { X, Y };
 
 // CHECK-B: <BLOCKINFO_BLOCK/>
 // CHECK-B-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-  // CHECK-B-NEXT: <Version abbrevid=4 op0=1/>
+  // CHECK-B-NEXT: <Version abbrevid=4 op0=2/>
 // CHECK-B-NEXT: </VersionBlock>
 // CHECK-B-NEXT: <EnumBlock NumWords={{[0-9]*}} BlockCodeSize=4>
   // CHECK-B-NEXT: <USR abbrevid=4 op0=20 op1=252 op2=7 op3=189 op4=52 op5=213 op6=231 op7=119 op8=130 op9=194 op10=99 op11=250 op12=148 op13=68 op14=71 op15=146 op16=158 op17=168 op18=117 op19=55 op20=64/>
   // CHECK-B-NEXT: <Name abbrevid=5 op0=1/> blob data = 'B'
-  // CHECK-B-NEXT: <DefLocation abbrevid=7 op0=9 op1={{[0-9]*}}/> blob data = '{{.*}}'
-  // CHECK-B-NEXT: <Member abbrevid=9 op0=1/> blob data = 'X'
-  // CHECK-B-NEXT: <Member abbrevid=9 op0=1/> blob data = 'Y'
+  // CHECK-B-NEXT: <DefLocation abbrevid=6 op0=9 op1={{[0-9]*}}/> blob data = '{{.*}}'
+  // CHECK-B-NEXT: <Member abbrevid=8 op0=1/> blob data = 'X'
+  // CHECK-B-NEXT: <Member abbrevid=8 op0=1/> blob data = 'Y'
 // CHECK-B-NEXT: </EnumBlock>
 
 enum class C { A, B };
 
 // CHECK-C: <BLOCKINFO_BLOCK/>
 // CHECK-C-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-  // CHECK-C-NEXT: <Version abbrevid=4 op0=1/>
+  // CHECK-C-NEXT: <Version abbrevid=4 op0=2/>
 // CHECK-C-NEXT: </VersionBlock>
 // CHECK-C-NEXT: <EnumBlock NumWords={{[0-9]*}} BlockCodeSize=4>
   // CHECK-C-NEXT: <USR abbrevid=4 op0=20 op1=2 op2=14 op3=108 op4=50 op5=167 op6=0 op7=195 op8=23 op9=12 op10=0 op11=159 op12=204 op13=212 op14=22 op15=113 op16=237 op17=219 op18=234 op19=245 op20=117/>
   // CHECK-C-NEXT: <Name abbrevid=5 op0=1/> blob data = 'C'
-  // CHECK-C-NEXT: <DefLocation abbrevid=7 op0=23 op1={{[0-9]*}}/> blob data = '{{.*}}'
-  // CHECK-C-NEXT: <Scoped abbrevid=10 op0=1/>
-  // CHECK-C-NEXT: <Member abbrevid=9 op0=1/> blob data = 'A'
-  // CHECK-C-NEXT: <Member abbrevid=9 op0=1/> blob data = 'B'
+  // CHECK-C-NEXT: <DefLocation abbrevid=6 op0=23 op1={{[0-9]*}}/> blob data = '{{.*}}'
+  // CHECK-C-NEXT: <Scoped abbrevid=9 op0=1/>
+  // CHECK-C-NEXT: <Member abbrevid=8 op0=1/> blob data = 'A'
+  // CHECK-C-NEXT: <Member abbrevid=8 op0=1/> blob data = 'B'
 // CHECK-C-NEXT: </EnumBlock>

Modified: clang-tools-extra/trunk/test/clang-doc/mapper-function.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-doc/mapper-function.cpp?rev=331539&r1=331538&r2=331539&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/clang-doc/mapper-function.cpp (original)
+++ clang-tools-extra/trunk/test/clang-doc/mapper-function.cpp Fri May  4 10:02:13 2018
@@ -9,17 +9,23 @@ int F(int param) { return param; }
 
 // CHECK: <BLOCKINFO_BLOCK/>
 // CHECK-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-  // CHECK-NEXT: <Version abbrevid=4 op0=1/>
+  // CHECK-NEXT: <Version abbrevid=4 op0=2/>
 // CHECK-NEXT: </VersionBlock>
 // CHECK-NEXT: <FunctionBlock NumWords={{[0-9]*}} BlockCodeSize=4>
   // CHECK-NEXT: <USR abbrevid=4 op0=20 op1=164 op2=75 op3=50 op4=204 op5=60 op6=8 op7=124 op8=154 op9=247 op10=93 op11=175 op12=80 op13=222 op14=25 op15=62 op16=133 op17=231 op18=178 op19=193 op20=107/>
   // CHECK-NEXT: <Name abbrevid=5 op0=1/> blob data = 'F'
-  // CHECK-NEXT: <DefLocation abbrevid=7 op0=8 op1={{[0-9]*}}/> blob data = '{{.*}}'
-  // CHECK-NEXT: <TypeBlock NumWords=4 BlockCodeSize=4>
-    // CHECK-NEXT: <Type abbrevid=4 op0=4 op1=3/> blob data = 'int'
+  // CHECK-NEXT: <DefLocation abbrevid=6 op0=8 op1={{[0-9]*}}/> blob data = '{{.*}}'
+  // CHECK-NEXT: <TypeBlock NumWords={{[0-9]*}} BlockCodeSize=4>
+    // CHECK-NEXT: <ReferenceBlock NumWords={{[0-9]*}} BlockCodeSize=4>
+      // CHECK-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+      // CHECK-NEXT: <Field abbrevid=7 op0=4/>
+    // CHECK-NEXT: </ReferenceBlock>
   // CHECK-NEXT: </TypeBlock>
-  // CHECK-NEXT: <FieldTypeBlock NumWords=7 BlockCodeSize=4>
-    // CHECK-NEXT: <Type abbrevid=4 op0=4 op1=3/> blob data = 'int'
-    // CHECK-NEXT: <Name abbrevid=5 op0=5/> blob data = 'param'
+  // CHECK-NEXT: <FieldTypeBlock NumWords={{[0-9]*}} BlockCodeSize=4>
+    // CHECK-NEXT: <ReferenceBlock NumWords={{[0-9]*}} BlockCodeSize=4>
+      // CHECK-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+      // CHECK-NEXT: <Field abbrevid=7 op0=4/>
+    // CHECK-NEXT: </ReferenceBlock>
+    // CHECK-NEXT: <Name abbrevid=4 op0=5/> blob data = 'param'
   // CHECK-NEXT: </FieldTypeBlock>
 // CHECK-NEXT: </FunctionBlock>

Modified: clang-tools-extra/trunk/test/clang-doc/mapper-method.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-doc/mapper-method.cpp?rev=331539&r1=331538&r2=331539&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/clang-doc/mapper-method.cpp (original)
+++ clang-tools-extra/trunk/test/clang-doc/mapper-method.cpp Fri May  4 10:02:13 2018
@@ -13,31 +13,47 @@ public:
 
 // CHECK-G: <BLOCKINFO_BLOCK/>
 // CHECK-G-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-  // CHECK-G-NEXT: <Version abbrevid=4 op0=1/>
+  // CHECK-G-NEXT: <Version abbrevid=4 op0=2/>
 // CHECK-G-NEXT: </VersionBlock>
 // CHECK-G-NEXT: <RecordBlock NumWords={{[0-9]*}} BlockCodeSize=4>
   // CHECK-G-NEXT: <USR abbrevid=4 op0=20 op1=66 op2=2 op3=232 op4=191 op5=14 op6=203 op7=18 op8=174 op9=53 op10=76 op11=132 op12=153 op13=197 op14=39 op15=37 op16=176 op17=238 op18=48 op19=174 op20=213/>
   // CHECK-G-NEXT: <Name abbrevid=5 op0=1/> blob data = 'G'
-  // CHECK-G-NEXT: <DefLocation abbrevid=7 op0=9 op1={{[0-9]*}}/> blob data = '{{.*}}'
-  // CHECK-G-NEXT: <TagType abbrevid=9 op0=3/>
+  // CHECK-G-NEXT: <DefLocation abbrevid=6 op0=9 op1={{[0-9]*}}/> blob data = '{{.*}}'
+  // CHECK-G-NEXT: <TagType abbrevid=8 op0=3/>
 // CHECK-G-NEXT: </RecordBlock>
 
 // CHECK-G-F: <BLOCKINFO_BLOCK/>
 // CHECK-G-F-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-  // CHECK-G-F-NEXT: <Version abbrevid=4 op0=1/>
+  // CHECK-G-F-NEXT: <Version abbrevid=4 op0=2/>
 // CHECK-G-F-NEXT: </VersionBlock>
 // CHECK-G-F-NEXT: <FunctionBlock NumWords={{[0-9]*}} BlockCodeSize=4>
   // CHECK-G-F-NEXT: <USR abbrevid=4 op0=20 op1=240 op2=249 op3=252 op4=101 op5=252 op6=144 op7=245 op8=79 op9=105 op10=1 op11=68 op12=167 op13=175 op14=177 op15=93 op16=252 op17=61 op18=105 op19=182 op20=230/>
   // CHECK-G-F-NEXT: <Name abbrevid=5 op0=6/> blob data = 'Method'
-  // CHECK-G-F-NEXT: <Namespace abbrevid=6 op0=1 op1=40/> blob data = '4202E8BF0ECB12AE354C8499C52725B0EE30AED5'
-  // CHECK-G-F-NEXT: <IsMethod abbrevid=11 op0=1/>
-  // CHECK-G-F-NEXT: <DefLocation abbrevid=7 op0=11 op1={{[0-9]*}}/> blob data = '{{.*}}'
-  // CHECK-G-F-NEXT: <Parent abbrevid=9 op0=1 op1=40/> blob data = '4202E8BF0ECB12AE354C8499C52725B0EE30AED5'
-  // CHECK-G-F-NEXT: <TypeBlock NumWords=4 BlockCodeSize=4>
-    // CHECK-G-F-NEXT: <Type abbrevid=4 op0=4 op1=3/> blob data = 'int'
+  // CHECK-G-F-NEXT: <ReferenceBlock NumWords={{[0-9]*}} BlockCodeSize=4>
+    // CHECK-G-F-NEXT: <USR abbrevid=4 op0=20 op1=66 op2=2 op3=232 op4=191 op5=14 op6=203 op7=18 op8=174 op9=53 op10=76 op11=132 op12=153 op13=197 op14=39 op15=37 op16=176 op17=238 op18=48 op19=174 op20=213/>
+    // CHECK-G-F-NEXT: <Name abbrevid=5 op0=1/> blob data = 'G'
+    // CHECK-G-F-NEXT: <RefType abbrevid=6 op0=2/>
+    // CHECK-G-F-NEXT: <Field abbrevid=7 op0=1/>
+  // CHECK-G-F-NEXT: </ReferenceBlock>
+  // CHECK-G-F-NEXT: <IsMethod abbrevid=9 op0=1/>
+  // CHECK-G-F-NEXT: <DefLocation abbrevid=6 op0=11 op1={{[0-9]*}}/> blob data = '{{.*}}'
+  // CHECK-G-F-NEXT: <ReferenceBlock NumWords={{[0-9]*}} BlockCodeSize=4>
+    // CHECK-G-F-NEXT: <USR abbrevid=4 op0=20 op1=66 op2=2 op3=232 op4=191 op5=14 op6=203 op7=18 op8=174 op9=53 op10=76 op11=132 op12=153 op13=197 op14=39 op15=37 op16=176 op17=238 op18=48 op19=174 op20=213/>
+    // CHECK-G-F-NEXT: <Name abbrevid=5 op0=1/> blob data = 'G'
+    // CHECK-G-F-NEXT: <RefType abbrevid=6 op0=2/>
+    // CHECK-G-F-NEXT: <Field abbrevid=7 op0=2/>
+  // CHECK-G-F-NEXT: </ReferenceBlock>
+    // CHECK-G-F-NEXT: <TypeBlock NumWords={{[0-9]*}} BlockCodeSize=4>
+    // CHECK-G-F-NEXT: <ReferenceBlock NumWords={{[0-9]*}} BlockCodeSize=4>
+      // CHECK-G-F-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+      // CHECK-G-F-NEXT: <Field abbrevid=7 op0=4/>
+    // CHECK-G-F-NEXT: </ReferenceBlock>
   // CHECK-G-F-NEXT: </TypeBlock>
-  // CHECK-G-F-NEXT: <FieldTypeBlock NumWords=7 BlockCodeSize=4>
-    // CHECK-G-F-NEXT: <Type abbrevid=4 op0=4 op1=3/> blob data = 'int'
-    // CHECK-G-F-NEXT: <Name abbrevid=5 op0=5/> blob data = 'param'
+  // CHECK-G-F-NEXT: <FieldTypeBlock NumWords={{[0-9]*}} BlockCodeSize=4>
+    // CHECK-G-F-NEXT: <ReferenceBlock NumWords={{[0-9]*}} BlockCodeSize=4>
+      // CHECK-G-F-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+      // CHECK-G-F-NEXT: <Field abbrevid=7 op0=4/>
+    // CHECK-G-F-NEXT: </ReferenceBlock>
+    // CHECK-G-F-NEXT: <Name abbrevid=4 op0=5/> blob data = 'param'
   // CHECK-G-F-NEXT: </FieldTypeBlock>
 // CHECK-G-F-NEXT: </FunctionBlock>

Modified: clang-tools-extra/trunk/test/clang-doc/mapper-namespace.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-doc/mapper-namespace.cpp?rev=331539&r1=331538&r2=331539&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/clang-doc/mapper-namespace.cpp (original)
+++ clang-tools-extra/trunk/test/clang-doc/mapper-namespace.cpp Fri May  4 10:02:13 2018
@@ -9,7 +9,7 @@ namespace A {}
 
 // CHECK: <BLOCKINFO_BLOCK/>
 // CHECK-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-  // CHECK-NEXT: <Version abbrevid=4 op0=1/>
+  // CHECK-NEXT: <Version abbrevid=4 op0=2/>
 // CHECK-NEXT: </VersionBlock>
 // CHECK-NEXT: <NamespaceBlock NumWords={{[0-9]*}} BlockCodeSize=4>
   // CHECK-NEXT: <USR abbrevid=4 op0=20 op1=141 op2=4 op3=46 op4=255 op5=201 op6=139 op7=55 op8=52 op9=80 op10=188 op11=107 op12=91 op13=144 op14=163 op15=48 op16=194 op17=90 op18=21 op19=14 op20=156/>

Modified: clang-tools-extra/trunk/test/clang-doc/mapper-struct.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-doc/mapper-struct.cpp?rev=331539&r1=331538&r2=331539&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/clang-doc/mapper-struct.cpp (original)
+++ clang-tools-extra/trunk/test/clang-doc/mapper-struct.cpp Fri May  4 10:02:13 2018
@@ -9,15 +9,17 @@ struct C { int i; };
 
 // CHECK: <BLOCKINFO_BLOCK/>
 // CHECK-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-  // CHECK-NEXT: <Version abbrevid=4 op0=1/>
+  // CHECK-NEXT: <Version abbrevid=4 op0=2/>
 // CHECK-NEXT: </VersionBlock>
 // CHECK-NEXT: <RecordBlock NumWords={{[0-9]*}} BlockCodeSize=4>
   // CHECK-NEXT: <USR abbrevid=4 op0=20 op1=6 op2=181 op3=246 op4=161 op5=155 op6=169 op7=246 op8=168 op9=50 op10=225 op11=39 op12=201 op13=150 op14=130 op15=130 op16=185 op17=70 op18=25 op19=178 op20=16/>
   // CHECK-NEXT: <Name abbrevid=5 op0=1/> blob data = 'C'
-  // CHECK-NEXT: <DefLocation abbrevid=7 op0=8 op1={{[0-9]*}}/> blob data = '{{.*}}'
-  // CHECK-NEXT: <MemberTypeBlock NumWords=6 BlockCodeSize=4>
-    // CHECK-NEXT: <Type abbrevid=4 op0=4 op1=3/> blob data = 'int'
-    // CHECK-NEXT: <Name abbrevid=5 op0=4/> blob data = 'C::i'
-    // CHECK-NEXT: <Access abbrevid=6 op0=3/>
+  // CHECK-NEXT: <DefLocation abbrevid=6 op0=8 op1={{[0-9]*}}/> blob data = '{{.*}}'
+  // CHECK-NEXT: <MemberTypeBlock NumWords={{[0-9]*}} BlockCodeSize=4>
+    // CHECK-NEXT: <ReferenceBlock NumWords={{[0-9]*}} BlockCodeSize=4>
+      // CHECK-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+      // CHECK-NEXT: <Field abbrevid=7 op0=4/>
+    // CHECK-NEXT: </ReferenceBlock>
+    // CHECK-NEXT: <Name abbrevid=4 op0=1/> blob data = 'i'
   // CHECK-NEXT: </MemberTypeBlock>
 // CHECK-NEXT: </RecordBlock>

Modified: clang-tools-extra/trunk/test/clang-doc/mapper-union.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-doc/mapper-union.cpp?rev=331539&r1=331538&r2=331539&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/clang-doc/mapper-union.cpp (original)
+++ clang-tools-extra/trunk/test/clang-doc/mapper-union.cpp Fri May  4 10:02:13 2018
@@ -9,21 +9,25 @@ union D { int X; int Y; };
 
 // CHECK: <BLOCKINFO_BLOCK/>
 // CHECK-NEXT: <VersionBlock NumWords=1 BlockCodeSize=4>
-  // CHECK-NEXT: <Version abbrevid=4 op0=1/>
+  // CHECK-NEXT: <Version abbrevid=4 op0=2/>
 // CHECK-NEXT: </VersionBlock>
 // CHECK-NEXT: <RecordBlock NumWords={{[0-9]*}} BlockCodeSize=4>
   // CHECK-NEXT: <USR abbrevid=4 op0=20 op1=11 op2=138 op3=107 op4=147 op5=139 op6=147 op7=155 op8=119 op9=198 op10=50 op11=92 op12=204 op13=200 op14=170 op15=62 op16=147 op17=139 op18=249 op19=226 op20=232/>
   // CHECK-NEXT: <Name abbrevid=5 op0=1/> blob data = 'D'
-  // CHECK-NEXT: <DefLocation abbrevid=7 op0=8 op1={{[0-9]*}}/> blob data = '{{.*}}'
-  // CHECK-NEXT: <TagType abbrevid=9 op0=2/>
-  // CHECK-NEXT: <MemberTypeBlock NumWords=6 BlockCodeSize=4>
-    // CHECK-NEXT: <Type abbrevid=4 op0=4 op1=3/> blob data = 'int'
-    // CHECK-NEXT: <Name abbrevid=5 op0=4/> blob data = 'D::X'
-    // CHECK-NEXT: <Access abbrevid=6 op0=3/>
+  // CHECK-NEXT: <DefLocation abbrevid=6 op0=8 op1={{[0-9]*}}/> blob data = '{{.*}}'
+  // CHECK-NEXT: <TagType abbrevid=8 op0=2/>
+  // CHECK-NEXT: <MemberTypeBlock NumWords={{[0-9]*}} BlockCodeSize=4>
+    // CHECK-NEXT: <ReferenceBlock NumWords={{[0-9]*}} BlockCodeSize=4>
+      // CHECK-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+      // CHECK-NEXT: <Field abbrevid=7 op0=4/>
+    // CHECK-NEXT: </ReferenceBlock>
+    // CHECK-NEXT: <Name abbrevid=4 op0=1/> blob data = 'X'
   // CHECK-NEXT: </MemberTypeBlock>
-  // CHECK-NEXT: <MemberTypeBlock NumWords=6 BlockCodeSize=4>
-    // CHECK-NEXT: <Type abbrevid=4 op0=4 op1=3/> blob data = 'int'
-    // CHECK-NEXT: <Name abbrevid=5 op0=4/> blob data = 'D::Y'
-    // CHECK-NEXT: <Access abbrevid=6 op0=3/>
+  // CHECK-NEXT: <MemberTypeBlock NumWords={{[0-9]*}} BlockCodeSize=4>
+    // CHECK-NEXT: <ReferenceBlock NumWords={{[0-9]*}} BlockCodeSize=4>
+      // CHECK-NEXT: <Name abbrevid=5 op0=3/> blob data = 'int'
+      // CHECK-NEXT: <Field abbrevid=7 op0=4/>
+    // CHECK-NEXT: </ReferenceBlock>
+    // CHECK-NEXT: <Name abbrevid=4 op0=1/> blob data = 'Y'
   // CHECK-NEXT: </MemberTypeBlock>
 // CHECK-NEXT: </RecordBlock>




More information about the cfe-commits mailing list