compnerd created this revision.
compnerd added reviewers: bulbazord, sgraenitz, labath.
compnerd added a project: LLDB.
Herald added a subscriber: JDevlieghere.
Herald added a project: All.
compnerd requested review of this revision.

Ensure that we explicitly indicate that we would like the move semantics
in the assignment.  With MSVC 14.35.32215, the assignment would not
trigger a NVRO and copy constructor would be invoked, which resulted in
a check failure under `LLVM_ENABLE_ABI_BREAKING_CHANGES`.  The error
path is meant to log and continue on the failure but would instead abort
when built with assertions.

Secondary to the assignment cast check, we would not ensure that the
error is consumed in the case that logging is disabled.  Ensure that we
properly drop the error on the floor or we would re-trigger the checked
failure.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D147669

Files:
  lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp


Index: lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp
===================================================================
--- lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp
+++ lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp
@@ -865,11 +865,12 @@
   // Read each export table entry, ordered by ordinal instead of by name.
   for (const auto &entry : m_binary->export_directories()) {
     llvm::StringRef sym_name;
-    if (auto err = entry.getSymbolName(sym_name)) {
+    if (auto err = std::move(entry.getSymbolName(sym_name))) {
       LLDB_LOG(log,
                "ObjectFilePECOFF::AppendFromExportTable - failed to get export 
"
                "table entry name: {0}",
                llvm::fmt_consume(std::move(err)));
+      llvm::consumeError(std::move(err));
       continue;
     }
     Symbol symbol;
@@ -886,11 +887,12 @@
       // Forwarder exports are redirected by the loader transparently, but keep
       // it in symtab and make a note using the symbol name.
       llvm::StringRef forwarder_name;
-      if (auto err = entry.getForwardTo(forwarder_name)) {
+      if (auto err = std::move(entry.getForwardTo(forwarder_name))) {
         LLDB_LOG(log,
                  "ObjectFilePECOFF::AppendFromExportTable - failed to get "
                  "forwarder name of forwarder export '{0}': {1}",
                  sym_name, llvm::fmt_consume(std::move(err)));
+        llvm::consumeError(std::move(err));
         continue;
       }
       llvm::SmallString<256> new_name = 
{symbol.GetDisplayName().GetStringRef(),
@@ -901,11 +903,12 @@
     }
 
     uint32_t function_rva;
-    if (auto err = entry.getExportRVA(function_rva)) {
+    if (auto err = std::move(entry.getExportRVA(function_rva))) {
       LLDB_LOG(log,
                "ObjectFilePECOFF::AppendFromExportTable - failed to get "
                "address of export entry '{0}': {1}",
                sym_name, llvm::fmt_consume(std::move(err)));
+      llvm::consumeError(std::move(err));
       continue;
     }
     // Skip the symbol if it doesn't look valid.


Index: lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp
===================================================================
--- lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp
+++ lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp
@@ -865,11 +865,12 @@
   // Read each export table entry, ordered by ordinal instead of by name.
   for (const auto &entry : m_binary->export_directories()) {
     llvm::StringRef sym_name;
-    if (auto err = entry.getSymbolName(sym_name)) {
+    if (auto err = std::move(entry.getSymbolName(sym_name))) {
       LLDB_LOG(log,
                "ObjectFilePECOFF::AppendFromExportTable - failed to get export "
                "table entry name: {0}",
                llvm::fmt_consume(std::move(err)));
+      llvm::consumeError(std::move(err));
       continue;
     }
     Symbol symbol;
@@ -886,11 +887,12 @@
       // Forwarder exports are redirected by the loader transparently, but keep
       // it in symtab and make a note using the symbol name.
       llvm::StringRef forwarder_name;
-      if (auto err = entry.getForwardTo(forwarder_name)) {
+      if (auto err = std::move(entry.getForwardTo(forwarder_name))) {
         LLDB_LOG(log,
                  "ObjectFilePECOFF::AppendFromExportTable - failed to get "
                  "forwarder name of forwarder export '{0}': {1}",
                  sym_name, llvm::fmt_consume(std::move(err)));
+        llvm::consumeError(std::move(err));
         continue;
       }
       llvm::SmallString<256> new_name = {symbol.GetDisplayName().GetStringRef(),
@@ -901,11 +903,12 @@
     }
 
     uint32_t function_rva;
-    if (auto err = entry.getExportRVA(function_rva)) {
+    if (auto err = std::move(entry.getExportRVA(function_rva))) {
       LLDB_LOG(log,
                "ObjectFilePECOFF::AppendFromExportTable - failed to get "
                "address of export entry '{0}': {1}",
                sym_name, llvm::fmt_consume(std::move(err)));
+      llvm::consumeError(std::move(err));
       continue;
     }
     // Skip the symbol if it doesn't look valid.
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to