diff --git a/clang-tools-extra/clang-doc/BitcodeReader.cpp b/clang-tools-extra/clang-doc/BitcodeReader.cpp index b9b23c48d42d..6cd0cb06871d 100644 --- a/clang-tools-extra/clang-doc/BitcodeReader.cpp +++ b/clang-tools-extra/clang-doc/BitcodeReader.cpp @@ -1111,9 +1111,8 @@ ClangDocBitcodeReader::readBlockToInfo(unsigned ID) { } // Entry point -llvm::Expected>> -ClangDocBitcodeReader::readBitcode() { - std::vector> Infos; +llvm::Expected> ClangDocBitcodeReader::readBitcode() { + OwningPtrArray Infos; if (auto Err = validateStream()) return std::move(Err); diff --git a/clang-tools-extra/clang-doc/BitcodeReader.h b/clang-tools-extra/clang-doc/BitcodeReader.h index 025203acb543..7516081e3f84 100644 --- a/clang-tools-extra/clang-doc/BitcodeReader.h +++ b/clang-tools-extra/clang-doc/BitcodeReader.h @@ -31,7 +31,7 @@ public: : Stream(Stream), Diags(Diags) {} // Main entry point, calls readBlock to read each block in the given stream. - llvm::Expected>> readBitcode(); + llvm::Expected> readBitcode(); private: enum class Cursor { BadBlock = 1, Record, BlockEnd, BlockBegin }; diff --git a/clang-tools-extra/clang-doc/Representation.cpp b/clang-tools-extra/clang-doc/Representation.cpp index 0ee10e63e702..6eea8c8eba74 100644 --- a/clang-tools-extra/clang-doc/Representation.cpp +++ b/clang-tools-extra/clang-doc/Representation.cpp @@ -85,8 +85,7 @@ llvm::StringRef commentKindToString(CommentKind Kind) { const SymbolID EmptySID = SymbolID(); template -static llvm::Expected> -reduce(std::vector> &Values) { +static llvm::Expected> reduce(OwningPtrArray &Values) { if (Values.empty() || !Values[0]) return llvm::createStringError(llvm::inconvertibleErrorCode(), "no value to reduce"); @@ -122,7 +121,7 @@ static void reduceChildren(OwningVec &Children, } // Dispatch function. -llvm::Expected> mergeInfos(std::vector> &Values) { +llvm::Expected> mergeInfos(OwningPtrArray &Values) { if (Values.empty() || !Values[0]) return llvm::createStringError(llvm::inconvertibleErrorCode(), "no info values to merge"); diff --git a/clang-tools-extra/clang-doc/Representation.h b/clang-tools-extra/clang-doc/Representation.h index 3a785d1a4f6d..60d63236c443 100644 --- a/clang-tools-extra/clang-doc/Representation.h +++ b/clang-tools-extra/clang-doc/Representation.h @@ -40,6 +40,14 @@ template using OwningArray = std::vector; // To be eventually transitioned to llvm::simple_ilist. template using OwningVec = std::vector; +// An abstraction for dynamic lists of owned pointers. +// To be eventually transitioned to llvm::simple_ilist or similar. +template using OwningPtrVec = std::vector>; + +// An abstraction for arrays of owned pointers. +// To be eventually transitioned to arena-allocated arrays of bare pointers. +template using OwningPtrArray = std::vector>; + // SHA1'd hash of a USR. using SymbolID = std::array; @@ -102,7 +110,7 @@ struct CommentInfo { // the vector. bool operator<(const CommentInfo &Other) const; - OwningVec> + OwningPtrVec Children; // List of child comments for this CommentInfo. SmallString<8> Direction; // Parameter direction (for (T)ParamCommand). SmallString<16> Name; // Name of the comment (for Verbatim and HTML). @@ -637,7 +645,7 @@ struct Index : public Reference { // A standalone function to call to merge a vector of infos into one. // This assumes that all infos in the vector are of the same type, and will fail // if they are different. -llvm::Expected> mergeInfos(std::vector> &Values); +llvm::Expected> mergeInfos(OwningPtrArray &Values); struct ClangDocContext { ClangDocContext(tooling::ExecutionContext *ECtx, StringRef ProjectName, diff --git a/clang-tools-extra/clang-doc/benchmarks/ClangDocBenchmark.cpp b/clang-tools-extra/clang-doc/benchmarks/ClangDocBenchmark.cpp index d033d676184f..18e15de8129a 100644 --- a/clang-tools-extra/clang-doc/benchmarks/ClangDocBenchmark.cpp +++ b/clang-tools-extra/clang-doc/benchmarks/ClangDocBenchmark.cpp @@ -116,7 +116,7 @@ static void BM_MergeInfos_Scale(benchmark::State &State) { for (auto _ : State) { State.PauseTiming(); - std::vector> Input; + OwningPtrArray Input; Input.reserve(State.range(0)); for (int i = 0; i < State.range(0); ++i) { auto I = std::make_unique(); diff --git a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp index 3d904b48c1dc..c189a414324c 100644 --- a/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp +++ b/clang-tools-extra/clang-doc/tool/ClangDocMain.cpp @@ -361,7 +361,7 @@ Example usage for a project using a compile commands database: if (FTimeTrace) llvm::timeTraceProfilerInitialize(200, "clang-doc"); - std::vector> Infos; + doc::OwningPtrVec Infos; { llvm::TimeTraceScope Red("decoding bitcode"); for (auto &Bitcode : Group.getValue()) { diff --git a/clang-tools-extra/unittests/clang-doc/BitcodeTest.cpp b/clang-tools-extra/unittests/clang-doc/BitcodeTest.cpp index 5f2a7d9b4017..85ec01e5bd34 100644 --- a/clang-tools-extra/unittests/clang-doc/BitcodeTest.cpp +++ b/clang-tools-extra/unittests/clang-doc/BitcodeTest.cpp @@ -51,8 +51,8 @@ static std::string writeInfo(Info *I, DiagnosticsEngine &Diags) { } } -static std::vector> readInfo(StringRef Bitcode, size_t NumInfos, - DiagnosticsEngine &Diags) { +static OwningPtrVec readInfo(StringRef Bitcode, size_t NumInfos, + DiagnosticsEngine &Diags) { llvm::BitstreamCursor Stream(Bitcode); doc::ClangDocBitcodeReader Reader(Stream, Diags); auto Infos = Reader.readBitcode(); @@ -78,8 +78,7 @@ TEST_F(BitcodeTest, emitNamespaceInfoBitcode) { std::string WriteResult = writeInfo(&I, this->Diags); EXPECT_TRUE(WriteResult.size() > 0); - std::vector> ReadResults = - readInfo(WriteResult, 1, this->Diags); + OwningPtrVec ReadResults = readInfo(WriteResult, 1, this->Diags); CheckNamespaceInfo(&I, InfoAsNamespace(ReadResults[0].get())); } @@ -121,8 +120,7 @@ TEST_F(BitcodeTest, emitRecordInfoBitcode) { std::string WriteResult = writeInfo(&I, this->Diags); EXPECT_TRUE(WriteResult.size() > 0); - std::vector> ReadResults = - readInfo(WriteResult, 1, this->Diags); + OwningPtrVec ReadResults = readInfo(WriteResult, 1, this->Diags); CheckRecordInfo(&I, InfoAsRecord(ReadResults[0].get())); } @@ -142,8 +140,7 @@ TEST_F(BitcodeTest, emitFunctionInfoBitcode) { std::string WriteResult = writeInfo(&I, this->Diags); EXPECT_TRUE(WriteResult.size() > 0); - std::vector> ReadResults = - readInfo(WriteResult, 1, this->Diags); + OwningPtrVec ReadResults = readInfo(WriteResult, 1, this->Diags); CheckFunctionInfo(&I, InfoAsFunction(ReadResults[0].get())); } @@ -165,8 +162,7 @@ TEST_F(BitcodeTest, emitMethodInfoBitcode) { std::string WriteResult = writeInfo(&I, this->Diags); EXPECT_TRUE(WriteResult.size() > 0); - std::vector> ReadResults = - readInfo(WriteResult, 1, this->Diags); + OwningPtrVec ReadResults = readInfo(WriteResult, 1, this->Diags); CheckFunctionInfo(&I, InfoAsFunction(ReadResults[0].get())); } @@ -184,8 +180,7 @@ TEST_F(BitcodeTest, emitEnumInfoBitcode) { std::string WriteResult = writeInfo(&I, this->Diags); EXPECT_TRUE(WriteResult.size() > 0); - std::vector> ReadResults = - readInfo(WriteResult, 1, this->Diags); + OwningPtrVec ReadResults = readInfo(WriteResult, 1, this->Diags); CheckEnumInfo(&I, InfoAsEnum(ReadResults[0].get())); } @@ -212,8 +207,7 @@ TEST_F(BitcodeTest, emitTypedefInfoBitcode) { std::string WriteResult = writeInfo(&I, this->Diags); EXPECT_TRUE(WriteResult.size() > 0); - std::vector> ReadResults = - readInfo(WriteResult, 1, this->Diags); + OwningPtrVec ReadResults = readInfo(WriteResult, 1, this->Diags); CheckTypedefInfo(&I, InfoAsTypedef(ReadResults[0].get())); @@ -342,8 +336,7 @@ TEST_F(BitcodeTest, emitInfoWithCommentBitcode) { std::string WriteResult = writeInfo(&F, this->Diags); EXPECT_TRUE(WriteResult.size() > 0); - std::vector> ReadResults = - readInfo(WriteResult, 1, this->Diags); + OwningPtrVec ReadResults = readInfo(WriteResult, 1, this->Diags); CheckFunctionInfo(&F, InfoAsFunction(ReadResults[0].get())); } diff --git a/clang-tools-extra/unittests/clang-doc/ClangDocTest.h b/clang-tools-extra/unittests/clang-doc/ClangDocTest.h index 74027f866948..9b1a26af0cdf 100644 --- a/clang-tools-extra/unittests/clang-doc/ClangDocTest.h +++ b/clang-tools-extra/unittests/clang-doc/ClangDocTest.h @@ -19,7 +19,7 @@ namespace clang { namespace doc { -using EmittedInfoList = std::vector>; +using EmittedInfoList = OwningPtrVec; static const SymbolID EmptySID = SymbolID(); static const SymbolID NonEmptySID = diff --git a/clang-tools-extra/unittests/clang-doc/MergeTest.cpp b/clang-tools-extra/unittests/clang-doc/MergeTest.cpp index 408bb7b865ef..d6f210475780 100644 --- a/clang-tools-extra/unittests/clang-doc/MergeTest.cpp +++ b/clang-tools-extra/unittests/clang-doc/MergeTest.cpp @@ -44,7 +44,7 @@ TEST_F(MergeTest, mergeNamespaceInfos) { Two.Children.Enums.emplace_back(); Two.Children.Enums.back().Name = "TwoEnum"; - std::vector> Infos; + OwningPtrVec Infos; Infos.emplace_back(std::make_unique(std::move(One))); Infos.emplace_back(std::make_unique(std::move(Two))); @@ -116,7 +116,7 @@ TEST_F(MergeTest, mergeRecordInfos) { Two.Children.Enums.emplace_back(); Two.Children.Enums.back().Name = "TwoEnum"; - std::vector> Infos; + OwningPtrVec Infos; Infos.emplace_back(std::make_unique(std::move(One))); Infos.emplace_back(std::make_unique(std::move(Two))); @@ -197,7 +197,7 @@ TEST_F(MergeTest, mergeFunctionInfos) { TwoParagraphComment->Children.push_back(std::move(TwoTextComment)); TwoFullComment->Children.push_back(std::move(TwoParagraphComment)); - std::vector> Infos; + OwningPtrVec Infos; Infos.emplace_back(std::make_unique(std::move(One))); Infos.emplace_back(std::make_unique(std::move(Two))); @@ -249,7 +249,7 @@ TEST_F(MergeTest, mergeEnumInfos) { Two.Members.emplace_back("X"); Two.Members.emplace_back("Y"); - std::vector> Infos; + OwningPtrVec Infos; Infos.emplace_back(std::make_unique(std::move(One))); Infos.emplace_back(std::make_unique(std::move(Two)));