From f32cc293fa88fb43a68140b902af48841627101a Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Thu, 14 Apr 2016 19:45:19 +0000 Subject: [PATCH] Make this code less brittle. The benefits of a fixed-size array aren't worth the maintenance cost. llvm-svn: 266359 --- clang/include/clang/Serialization/ASTWriter.h | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/clang/include/clang/Serialization/ASTWriter.h b/clang/include/clang/Serialization/ASTWriter.h index a5915e7..c1ec38c 100644 --- a/clang/include/clang/Serialization/ASTWriter.h +++ b/clang/include/clang/Serialization/ASTWriter.h @@ -704,13 +704,10 @@ class ASTRecordWriter { /// declaration or type. SmallVector StmtsToEmit; - /// Worst case: bases, vbases, visible and lexical contents, local redecls. - static const int MaxOffsetIndices = 5; /// \brief Indices of record elements that describe offsets within the /// bitcode. These will be converted to offsets relative to the current /// record when emitted. - unsigned OffsetIndices[MaxOffsetIndices]; - unsigned NumOffsetIndices = 0; + SmallVector OffsetIndices; /// \brief Flush all of the statements and expressions that have /// been added to the queue via AddStmt(). @@ -719,13 +716,13 @@ class ASTRecordWriter { void PrepareToEmit(uint64_t MyOffset) { // Convert offsets into relative form. - for (unsigned I = 0; I != NumOffsetIndices; ++I) { - auto &StoredOffset = (*Record)[OffsetIndices[I]]; + for (unsigned I : OffsetIndices) { + auto &StoredOffset = (*Record)[I]; assert(StoredOffset < MyOffset && "invalid offset"); if (StoredOffset) StoredOffset = MyOffset - StoredOffset; } - NumOffsetIndices = 0; + OffsetIndices.clear(); } public: @@ -779,8 +776,7 @@ public: /// \brief Add a bit offset into the record. This will be converted into an /// offset relative to the current record when emitted. void AddOffset(uint64_t BitOffset) { - assert(NumOffsetIndices != MaxOffsetIndices && "too many offset indices"); - OffsetIndices[NumOffsetIndices++] = Record->size(); + OffsetIndices.push_back(Record->size()); Record->push_back(BitOffset); } -- 2.7.4