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