Add a virtual destructor to ContextPrivate
Kdevelop was crashing as soon as I tried to open a project. Asan reported the following issue:
object passed to delete has wrong type:
size of the allocated type: 8 bytes;
size of the deallocated type: 1 bytes.
#0 0x7fc9380e6009 in operator delete(void*, unsigned long) /build/gcc/src/gcc/libsanitizer/asan/asan_new_delete.cpp:172
#1 0x7fc9361ef3c8 in QScopedPointerDeleter<KDevelop::ContextPrivate>::cleanup(KDevelop::ContextPrivate*) /usr/include/qt/QtCore/qscopedpointer.h:60
#2 0x7fc9361ef3c8 in QScopedPointer<KDevelop::ContextPrivate, QScopedPointerDeleter<KDevelop::ContextPrivate> >::~QScopedPointer() /usr/include/qt/QtCore/qscopedpointer.h:107
#3 0x7fc9361ef3c8 in KDevelop::Context::~Context() /home/waqar/kde/src/kdevelop/kdevelop/kdevplatform/interfaces/context.cpp:50
#4 0x7fc9361ef546 in KDevelop::ProjectItemContext::~ProjectItemContext() /home/waqar/kde/src/kdevelop/kdevelop/kdevplatform/interfaces/context.cpp:99
#5 0x7fc8f9f629e8 in KDevelop::ProjectItemContextImpl::~ProjectItemContextImpl() /home/waqar/kde/src/kdevelop/kdevelop/kdevplatform/project/projectutils.h:40
#6 0x7fc8f9f629e8 in ProjectTreeView::popupContextMenu(QPoint const&) /home/waqar/kde/src/kdevelop/kdevelop/plugins/projectmanagerview/projecttreeview.cpp:339
#7 0x7fc8f9f65cd1 in QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<QPoint const&>, void, void (ProjectTreeView::*)(QPoint const&)>::call(void (ProjectTreeView::*)(QPoint const&), ProjectTreeView*, void**) /usr/include/qt/QtCore/qobjectdefs_impl.h:152
#8 0x7fc8f9f65cd1 in void QtPrivate::FunctionPointer<void (ProjectTreeView::*)(QPoint const&)>::call<QtPrivate::List<QPoint const&>, void>(void (ProjectTreeView::*)(QPoint const&), ProjectTreeView*, void**) /usr/include/qt/QtCore/qobjectdefs_impl.h:185
#9 0x7fc8f9f65cd1 in QtPrivate::QSlotObject<void (ProjectTreeView::*)(QPoint const&), QtPrivate::List<QPoint const&>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) /usr/include/qt/QtCore/qobjectdefs_impl.h:418
#10 0x7fc930d419e5 (/usr/lib/libQt5Core.so.5+0x2ed9e5)
#11 0x7fc93200bff5 in QWidget::customContextMenuRequested(QPoint const&) (/usr/lib/libQt5Widgets.so.5+0x180ff5)
#12 0x7fc9320279b6 in QWidget::event(QEvent*) (/usr/lib/libQt5Widgets.so.5+0x19c9b6)
#13 0x7fc9320d225e in QFrame::event(QEvent*) (/usr/lib/libQt5Widgets.so.5+0x24725e)
#14 0x7fc930d0a3f2 in QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) (/usr/lib/libQt5Core.so.5+0x2b63f2)
#15 0x7fc931fe5750 in QApplicationPrivate::notify_helper(QObject*, QEvent*) (/usr/lib/libQt5Widgets.so.5+0x15a750)
#16 0x7fc931fed534 in QApplication::notify(QObject*, QEvent*) (/usr/lib/libQt5Widgets.so.5+0x162534)
#17 0x7fc930d0a689 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (/usr/lib/libQt5Core.so.5+0x2b6689)
#18 0x7fc93203fe80 (/usr/lib/libQt5Widgets.so.5+0x1b4e80)
#19 0x7fc93204270e (/usr/lib/libQt5Widgets.so.5+0x1b770e)
#20 0x7fc931fe5761 in QApplicationPrivate::notify_helper(QObject*, QEvent*) (/usr/lib/libQt5Widgets.so.5+0x15a761)
#21 0x7fc930d0a689 in QCoreApplication::notifyInternal2(QObject*, QEvent*) (/usr/lib/libQt5Core.so.5+0x2b6689)
#22 0x7fc9316c5593 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) (/usr/lib/libQt5Gui.so.5+0x13a593)
#23 0x7fc93169abb4 in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) (/usr/lib/libQt5Gui.so.5+0x10fbb4)
#24 0x7fc91aaf019b (/usr/lib/libQt5XcbQpa.so.5+0x5f19b)
#25 0x7fc92df2b02b in g_main_context_dispatch (/usr/lib/libglib-2.0.so.0+0x5402b)
#26 0x7fc92df7eb58 (/usr/lib/libglib-2.0.so.0+0xa7b58)
#27 0x7fc92df28780 in g_main_context_iteration (/usr/lib/libglib-2.0.so.0+0x51780)
#28 0x7fc930d63190 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (/usr/lib/libQt5Core.so.5+0x30f190)
#29 0x7fc930d08feb in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) (/usr/lib/libQt5Core.so.5+0x2b4feb)
#30 0x7fc930d114a3 in QCoreApplication::exec() (/usr/lib/libQt5Core.so.5+0x2bd4a3)
#31 0x55558c363ae4 in main /home/waqar/kde/src/kdevelop/kdevelop/app/main.cpp:855
#32 0x7fc930572b24 in __libc_start_main (/usr/lib/libc.so.6+0x27b24)
#33 0x55558c3681ed in _start (/home/waqar/kde/kdevelop/bin/kdevelop+0x291ed)
0x602000246710 is located 0 bytes inside of 8-byte region [0x602000246710,0x602000246718)
allocated by thread T0 here:
#0 0x7fc9380e4f41 in operator new(unsigned long) /build/gcc/src/gcc/libsanitizer/asan/asan_new_delete.cpp:99
#1 0x7fc9361ef74d in KDevelop::ProjectItemContext::ProjectItemContext(QList<KDevelop::ProjectBaseItem*> const&) /home/waqar/kde/src/kdevelop/kdevelop/kdevplatform/interfaces/context.cpp:96
#2 0x7fc93039bf21 in KDevelop::ProjectItemContextImpl::ProjectItemContextImpl(QList<KDevelop::ProjectBaseItem*> const&) /home/waqar/kde/src/kdevelop/kdevelop/kdevplatform/project/projectutils.cpp:29
#3 0x7fc8f9f6221f in ProjectTreeView::popupContextMenu(QPoint const&) /home/waqar/kde/src/kdevelop/kdevelop/plugins/projectmanagerview/projecttreeview.cpp:339
#4 0x7fc8f9f65cd1 in QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<QPoint const&>, void, void (ProjectTreeView::*)(QPoint const&)>::call(void (ProjectTreeView::*)(QPoint const&), ProjectTreeView*, void**) /usr/include/qt/QtCore/qobjectdefs_impl.h:152
#5 0x7fc8f9f65cd1 in void QtPrivate::FunctionPointer<void (ProjectTreeView::*)(QPoint const&)>::call<QtPrivate::List<QPoint const&>, void>(void (ProjectTreeView::*)(QPoint const&), ProjectTreeView*, void**) /usr/include/qt/QtCore/qobjectdefs_impl.h:185
#6 0x7fc8f9f65cd1 in QtPrivate::QSlotObject<void (ProjectTreeView::*)(QPoint const&), QtPrivate::List<QPoint const&>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) /usr/include/qt/QtCore/qobjectdefs_impl.h:418
#7 0x7fc930d419e5 (/usr/lib/libQt5Core.so.5+0x2ed9e5)
#8 0x7fc93200bff5 in QWidget::customContextMenuRequested(QPoint const&) (/usr/lib/libQt5Widgets.so.5+0x180ff5)