From: Georgii Rymar Date: Thu, 14 May 2020 19:46:58 +0000 (+0300) Subject: [yaml2obj] - Move "repeated section/fill name" check earlier. X-Git-Tag: llvmorg-12-init~5289 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=304b0ed40392830e6f833c56b38cdc8296f58ce4;p=platform%2Fupstream%2Fllvm.git [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 --- 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;