<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">This may actually be a gcc bug: <a href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85282" class="">https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85282</a><div class=""><br class=""></div><div class="">Not much we can do now but worth knowing in case it is fixed.</div><div class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Sep 3, 2021, at 3:19 PM, Med Ismail Bennani via lldb-commits <<a href="mailto:lldb-commits@lists.llvm.org" class="">lldb-commits@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class=""><br class="">Author: Med Ismail Bennani<br class="">Date: 2021-09-03T22:18:55Z<br class="">New Revision: 5f6f33da9ee6cbaef5f10b4a7be34a91d5185b2b<br class=""><br class="">URL: <a href="https://github.com/llvm/llvm-project/commit/5f6f33da9ee6cbaef5f10b4a7be34a91d5185b2b" class="">https://github.com/llvm/llvm-project/commit/5f6f33da9ee6cbaef5f10b4a7be34a91d5185b2b</a><br class="">DIFF: <a href="https://github.com/llvm/llvm-project/commit/5f6f33da9ee6cbaef5f10b4a7be34a91d5185b2b.diff" class="">https://github.com/llvm/llvm-project/commit/5f6f33da9ee6cbaef5f10b4a7be34a91d5185b2b.diff</a><br class=""><br class="">LOG: [lldb/Plugins] Move member template specialization out of class<br class=""><br class="">This patch should fix the build failure that surfaced when build llvm<br class="">with GCC: <a href="https://lab.llvm.org/staging/#/builders/16/builds/10450" class="">https://lab.llvm.org/staging/#/builders/16/builds/10450</a><br class=""><br class="">GCC complained that I explicitely specialized<br class=""> `ScriptedPythonInterface::ExtractValueFromPythonObject` in a<br class="">in non-namespace scope, which is tolerated by Clang.<br class=""><br class="">To solve this issue, the specialization were declared out of the class<br class="">and implemented in the source file.<br class=""><br class="">Signed-off-by: Med Ismail Bennani <<a href="mailto:medismail.bennani@gmail.com" class="">medismail.bennani@gmail.com</a>><br class=""><br class="">Added: <br class=""><br class=""><br class="">Modified: <br class="">    lldb/source/Plugins/ScriptInterpreter/Python/ScriptedPythonInterface.cpp<br class="">    lldb/source/Plugins/ScriptInterpreter/Python/ScriptedPythonInterface.h<br class=""><br class="">Removed: <br class=""><br class=""><br class=""><br class="">################################################################################<br class="">diff  --git a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptedPythonInterface.cpp b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptedPythonInterface.cpp<br class="">index 097cbbdb6fc7e..a38cb104c0c63 100644<br class="">--- a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptedPythonInterface.cpp<br class="">+++ b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptedPythonInterface.cpp<br class="">@@ -35,4 +35,31 @@ ScriptedPythonInterface::GetStatusFromMethod(llvm::StringRef method_name) {<br class="">   return error;<br class=""> }<br class=""><br class="">+template <><br class="">+Status ScriptedPythonInterface::ExtractValueFromPythonObject<Status>(<br class="">+    python::PythonObject &p, Status &error) {<br class="">+  if (lldb::SBError *sb_error = reinterpret_cast<lldb::SBError *>(<br class="">+          LLDBSWIGPython_CastPyObjectToSBError(p.get())))<br class="">+    error = m_interpreter.GetStatusFromSBError(*sb_error);<br class="">+  else<br class="">+    error.SetErrorString("Couldn't cast lldb::SBError to lldb::Status.");<br class="">+<br class="">+  return error;<br class="">+}<br class="">+<br class="">+template <><br class="">+lldb::DataExtractorSP<br class="">+ScriptedPythonInterface::ExtractValueFromPythonObject<lldb::DataExtractorSP>(<br class="">+    python::PythonObject &p, Status &error) {<br class="">+  lldb::SBData *sb_data = reinterpret_cast<lldb::SBData *>(<br class="">+      LLDBSWIGPython_CastPyObjectToSBData(p.get()));<br class="">+<br class="">+  if (!sb_data) {<br class="">+    error.SetErrorString("Couldn't cast lldb::SBError to lldb::Status.");<br class="">+    return nullptr;<br class="">+  }<br class="">+<br class="">+  return m_interpreter.GetDataExtractorFromSBData(*sb_data);<br class="">+}<br class="">+<br class=""> #endif<br class=""><br class="">diff  --git a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptedPythonInterface.h b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptedPythonInterface.h<br class="">index 85ec167e1463f..bac4efbe76d8d 100644<br class="">--- a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptedPythonInterface.h<br class="">+++ b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptedPythonInterface.h<br class="">@@ -33,33 +33,6 @@ class ScriptedPythonInterface : virtual public ScriptedInterface {<br class="">     return p.CreateStructuredObject();<br class="">   }<br class=""><br class="">-  template <><br class="">-  Status ExtractValueFromPythonObject<Status>(python::PythonObject &p,<br class="">-                                              Status &error) {<br class="">-    if (lldb::SBError *sb_error = reinterpret_cast<lldb::SBError *>(<br class="">-            LLDBSWIGPython_CastPyObjectToSBError(p.get())))<br class="">-      error = m_interpreter.GetStatusFromSBError(*sb_error);<br class="">-    else<br class="">-      error.SetErrorString("Couldn't cast lldb::SBError to lldb::Status.");<br class="">-<br class="">-    return error;<br class="">-  }<br class="">-<br class="">-  template <><br class="">-  lldb::DataExtractorSP<br class="">-  ExtractValueFromPythonObject<lldb::DataExtractorSP>(python::PythonObject &p,<br class="">-                                                      Status &error) {<br class="">-    lldb::SBData *sb_data = reinterpret_cast<lldb::SBData *>(<br class="">-        LLDBSWIGPython_CastPyObjectToSBData(p.get()));<br class="">-<br class="">-    if (!sb_data) {<br class="">-      error.SetErrorString("Couldn't cast lldb::SBError to lldb::Status.");<br class="">-      return nullptr;<br class="">-    }<br class="">-<br class="">-    return m_interpreter.GetDataExtractorFromSBData(*sb_data);<br class="">-  }<br class="">-<br class="">   template <typename T = StructuredData::ObjectSP, typename... Args><br class="">   T Dispatch(llvm::StringRef method_name, Status &error, Args... args) {<br class="">     using namespace python;<br class="">@@ -149,6 +122,16 @@ class ScriptedPythonInterface : virtual public ScriptedInterface {<br class="">   // The lifetime is managed by the ScriptInterpreter<br class="">   ScriptInterpreterPythonImpl &m_interpreter;<br class=""> };<br class="">+<br class="">+template <><br class="">+Status ScriptedPythonInterface::ExtractValueFromPythonObject<Status>(<br class="">+    python::PythonObject &p, Status &error);<br class="">+<br class="">+template <><br class="">+lldb::DataExtractorSP<br class="">+ScriptedPythonInterface::ExtractValueFromPythonObject<lldb::DataExtractorSP>(<br class="">+    python::PythonObject &p, Status &error);<br class="">+<br class=""> } // namespace lldb_private<br class=""><br class=""> #endif // LLDB_ENABLE_PYTHON<br class=""><br class=""><br class=""><br class="">_______________________________________________<br class="">lldb-commits mailing list<br class=""><a href="mailto:lldb-commits@lists.llvm.org" class="">lldb-commits@lists.llvm.org</a><br class="">https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits<br class=""></div></div></blockquote></div><br class=""></div></body></html>