<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>