[lldb-dev] [Bug 40062] New: lldb cannot deduce dynamic most derived type for types with lambda type as template argument

via lldb-dev lldb-dev at lists.llvm.org
Tue Dec 18 00:32:18 PST 2018


https://bugs.llvm.org/show_bug.cgi?id=40062

            Bug ID: 40062
           Summary: lldb cannot deduce dynamic most derived type for types
                    with lambda type as template argument
           Product: lldb
           Version: unspecified
          Hardware: PC
                OS: MacOS X
            Status: NEW
          Severity: normal
          Priority: P
         Component: All Bugs
          Assignee: lldb-dev at lists.llvm.org
          Reporter: erik at olofsson.info
                CC: llvm-bugs at lists.llvm.org

main.cpp:

struct CStoreFunctor
{
        virtual ~CStoreFunctor() = default;
};

template <typename t_CFunctor>
struct TCStoreFunctor : public CStoreFunctor
{
        TCStoreFunctor(t_CFunctor _fFunctor)
                : m_fFunctor(_fFunctor)
        {
        }

        t_CFunctor m_fFunctor;
};

struct CTestFunctor
{
        void operator() () const
        {
        }
};


int main()
{
        TCStoreFunctor<CTestFunctor> Test0{{}};

        CStoreFunctor *pTest0 = &Test0;

        auto fTest = []
                {
                }
        ;

        TCStoreFunctor<decltype(fTest)> Test1{fTest};
        CStoreFunctor *pTest1 = &Test1;

        return 0;
}

# clang++ testdebug.cpp -g -o test -std=c++17
# lldb test
(lldb) break set --file main.cpp --line 39
(lldb) run
(lldb) p pTest0
(TCStoreFunctor<CTestFunctor> *) $0 = 0x00007ffeefbff7a8
(lldb) p pTest1
(CStoreFunctor *) $1 = 0x00007ffeefbff780

I tracked this down to ItaniumABILanguageRuntime::GetTypeInfoFromVTableAddress
where the type name is:
0x00007ffeefbff780: static-type = 'CStoreFunctor *' has vtable symbol 'vtable
for TCStoreFunctor<main::$_0>'

It's then using this name 'TCStoreFunctor<main::$_0>' to lookup the type with  
            FindTypes. The problem is that the dwarf info has another name for
this type:

(lldb) script
>>> for type in lldb.target.GetModuleAtIndex(0).GetTypes():
...     print type.GetName()
...
TCStoreFunctor<(lambda at main.cpp:31:15)>
TCStoreFunctor<(anonymous class)> *

-- 
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20181218/f0ecdfad/attachment.html>


More information about the lldb-dev mailing list