From 304b0ed40392830e6f833c56b38cdc8296f58ce4 Mon Sep 17 00:00:00 2001 From: Georgii Rymar Date: Thu, 14 May 2020 22:46:58 +0300 Subject: [PATCH] [yaml2obj] - Move "repeated section/fill name" check earlier. This allows to simplify the code. Doing checks early is generally useful. Differential revision: https://reviews.llvm.org/D79985 --- llvm/lib/ObjectYAML/ELFEmitter.cpp | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/llvm/lib/ObjectYAML/ELFEmitter.cpp b/llvm/lib/ObjectYAML/ELFEmitter.cpp index 1ca1dfe..95d74ee 100644 --- a/llvm/lib/ObjectYAML/ELFEmitter.cpp +++ b/llvm/lib/ObjectYAML/ELFEmitter.cpp @@ -261,7 +261,10 @@ ELFState::ELFState(ELFYAML::Object &D, yaml::ErrorHandler EH) C->Name = StringRef(NewName).copy(StringAlloc); assert(ELFYAML::dropUniqueSuffix(C->Name).empty()); } - DocSections.insert(C->Name); + + if (!DocSections.insert(C->Name).second) + reportError("repeated section/fill name: '" + C->Name + + "' at YAML section/fill number " + Twine(I)); } std::vector ImplicitSections; @@ -1435,18 +1438,10 @@ void ELFState::writeFill(ELFYAML::Fill &Fill, template void ELFState::buildSectionIndex() { size_t SecNdx = -1; - StringSet<> Seen; - for (size_t I = 0; I < Doc.Chunks.size(); ++I) { - const std::unique_ptr &C = Doc.Chunks[I]; - bool IsSection = isa(C.get()); - if (IsSection) - ++SecNdx; - - if (!Seen.insert(C->Name).second) - reportError("repeated section/fill name: '" + C->Name + - "' at YAML section/fill number " + Twine(I)); - if (!IsSection || HasError) + for (const std::unique_ptr &C : Doc.Chunks) { + if (!isa(C.get())) continue; + ++SecNdx; if (!SN2I.addName(C->Name, SecNdx)) llvm_unreachable("buildSectionIndex() failed"); @@ -1509,6 +1504,8 @@ template bool ELFState::writeELF(raw_ostream &OS, ELFYAML::Object &Doc, yaml::ErrorHandler EH) { ELFState State(Doc, EH); + if (State.HasError) + return false; // Finalize .strtab and .dynstr sections. We do that early because want to // finalize the string table builders before writing the content of the @@ -1516,9 +1513,6 @@ bool ELFState::writeELF(raw_ostream &OS, ELFYAML::Object &Doc, State.finalizeStrings(); State.buildSectionIndex(); - if (State.HasError) - return false; - State.buildSymbolIndexes(); std::vector PHeaders; -- 2.7.4