[llvm] r359829 - lld-link: Add /force:multipleres extension to make dupe resource diag non-fatal
Nico Weber via llvm-commits
llvm-commits at lists.llvm.org
Thu May 2 14:21:55 PDT 2019
Author: nico
Date: Thu May 2 14:21:55 2019
New Revision: 359829
URL: http://llvm.org/viewvc/llvm-project?rev=359829&view=rev
Log:
lld-link: Add /force:multipleres extension to make dupe resource diag non-fatal
As a side benefit, lld-link now reports more than one duplicate resource
entry before exiting with an error even if the new flag is not passed.
Modified:
llvm/trunk/include/llvm/Object/WindowsResource.h
llvm/trunk/lib/Object/WindowsResource.cpp
llvm/trunk/tools/llvm-cvtres/llvm-cvtres.cpp
Modified: llvm/trunk/include/llvm/Object/WindowsResource.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/WindowsResource.h?rev=359829&r1=359828&r2=359829&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Object/WindowsResource.h (original)
+++ llvm/trunk/include/llvm/Object/WindowsResource.h Thu May 2 14:21:55 2019
@@ -152,7 +152,7 @@ class WindowsResourceParser {
public:
class TreeNode;
WindowsResourceParser();
- Error parse(WindowsResource *WR);
+ Error parse(WindowsResource *WR, std::vector<std::string> &Duplicates);
void printTree(raw_ostream &OS) const;
const TreeNode &getTree() const { return Root; }
const ArrayRef<std::vector<uint8_t>> getData() const { return Data; }
Modified: llvm/trunk/lib/Object/WindowsResource.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/WindowsResource.cpp?rev=359829&r1=359828&r2=359829&view=diff
==============================================================================
--- llvm/trunk/lib/Object/WindowsResource.cpp (original)
+++ llvm/trunk/lib/Object/WindowsResource.cpp Thu May 2 14:21:55 2019
@@ -168,8 +168,8 @@ static bool convertUTF16LEToUTF8String(A
return convertUTF16ToUTF8String(makeArrayRef(EndianCorrectedSrc), Out);
}
-static Error makeDuplicateResourceError(const ResourceEntryRef &Entry,
- StringRef File1, StringRef File2) {
+static std::string makeDuplicateResourceError(
+ const ResourceEntryRef &Entry, StringRef File1, StringRef File2) {
std::string Ret;
raw_string_ostream OS(Ret);
@@ -197,10 +197,11 @@ static Error makeDuplicateResourceError(
OS << "/language " << Entry.getLanguage() << ", in " << File1 << " and in "
<< File2;
- return make_error<GenericBinaryError>(OS.str(), object_error::parse_failed);
+ return OS.str();
}
-Error WindowsResourceParser::parse(WindowsResource *WR) {
+Error WindowsResourceParser::parse(WindowsResource *WR,
+ std::vector<std::string> &Duplicates) {
auto EntryOrErr = WR->getHeadEntry();
if (!EntryOrErr) {
auto E = EntryOrErr.takeError();
@@ -229,9 +230,10 @@ Error WindowsResourceParser::parse(Windo
bool IsNewNode = Root.addEntry(Entry, InputFilenames.size(),
IsNewTypeString, IsNewNameString, Node);
InputFilenames.push_back(WR->getFileName());
- if (!IsNewNode)
- return makeDuplicateResourceError(Entry, InputFilenames[Node->Origin],
- WR->getFileName());
+ if (!IsNewNode) {
+ Duplicates.push_back(makeDuplicateResourceError(
+ Entry, InputFilenames[Node->Origin], WR->getFileName()));
+ }
if (IsNewTypeString)
StringTable.push_back(Entry.getTypeString());
Modified: llvm/trunk/tools/llvm-cvtres/llvm-cvtres.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-cvtres/llvm-cvtres.cpp?rev=359829&r1=359828&r2=359829&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-cvtres/llvm-cvtres.cpp (original)
+++ llvm/trunk/tools/llvm-cvtres/llvm-cvtres.cpp Thu May 2 14:21:55 2019
@@ -183,7 +183,10 @@ int main(int Argc, const char **Argv) {
outs() << "Number of resources: " << EntryNumber << "\n";
}
- error(Parser.parse(RF));
+ std::vector<std::string> Duplicates;
+ error(Parser.parse(RF, Duplicates));
+ for (const auto& DupeDiag : Duplicates)
+ reportError(DupeDiag);
}
if (Verbose) {
More information about the llvm-commits
mailing list