-
Bug
-
Resolution: Done
-
Not Evaluated
-
Qt Creator 4.14.0-beta1
-
None
-
96474eecc7ac3cdab7f1f3772de8181f1702bc39 (qt-creator/qt-creator/master)
Commit: 242af33430d6f48aa73fe7195457fc178ee0ac03
Steps to reproduce:
- Open a project with multiple configurations (mine's a Makefile, each configuration is a single step [make] with different flags)
- Click on the button on the left showing the project name and configuration
- Select another configuration (for example, switch from Debug to Release or vice-versa)
Creator crashes at this point with a null-pointer dereference.
Backtrace:
#0 0x00007f5564e2bfa1 in operator() (__closure=0x3e16120) at /home/tjmaciei/src/qt/qt-creator/src/plugins/projectexplorer/makestep.cpp:473
#1 QtPrivate::FunctorCall<QtPrivate::IndexesList<>, QtPrivate::List<>, void, ProjectExplorer::MakeStep::createConfigWidget()::<lambda()> >::call (arg=<optimized out>, f=...) at ../../../../installed/include/QtCore/qobjectdefs_impl.h:146
#2 QtPrivate::Functor<ProjectExplorer::MakeStep::createConfigWidget()::<lambda()>, 0>::call<QtPrivate::List<>, void> (arg=<optimized out>,
f=...) at ../../../../installed/include/QtCore/qobjectdefs_impl.h:260
#3 QtPrivate::QFunctorSlotObject<ProjectExplorer::MakeStep::createConfigWidget()::<lambda()>, 0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (which=<optimized out>, this_=0x3e16110, r=<optimized out>, a=<optimized out>,
ret=<optimized out>) at ../../../../installed/include/QtCore/qobjectdefs_impl.h:447
#4 0x00007f55714385a2 in QtPrivate::QSlotObjectBase::call ()
at ../../include/QtCore/../../../../../../src/qt/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:402
#5 doActivate<false> () at /home/tjmaciei/src/qt/qt5/qtbase/src/corelib/kernel/qobject.cpp:3882
#6 0x00007f5564e4078b in ProjectExplorer::Target::parsingFinished (this=<optimized out>, _t1=<optimized out>)
at .moc/release-shared/moc_target.cpp:363
#7 0x00007f5564c45103 in ProjectExplorer::BuildSystem::emitParsingFinished (this=0x3585320, success=<optimized out>)
at /home/tjmaciei/src/qt/qt-creator/src/plugins/projectexplorer/buildsystem.cpp:124
#8 0x00007f5564c4521f in ProjectExplorer::BuildSystem::ParseGuard::release (this=0x7ffe7b8b5f90)
at /home/tjmaciei/src/qt/qt-creator/src/plugins/projectexplorer/buildsystem.cpp:284
#9 0x00007f5556d5442a in ?? () from /home/tjmaciei/obj/qt/installed/lib64/qtcreator/plugins/libGenericProjectManager.so
#10 0x00007f55714385a2 in QtPrivate::QSlotObjectBase::call ()
at ../../include/QtCore/../../../../../../src/qt/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:402
#11 doActivate<false> () at /home/tjmaciei/src/qt/qt5/qtbase/src/corelib/kernel/qobject.cpp:3882
#12 0x00007f5564e4094b in ProjectExplorer::Target::activeBuildConfigurationChanged (this=<optimized out>, _t1=<optimized out>)
at .moc/release-shared/moc_target.cpp:412
#13 0x00007f5564ce2e1f in ProjectExplorer::Target::setActiveBuildConfiguration (this=0x2c6cc60, bc=<optimized out>)
at /usr/include/c++/10/bits/atomic_base.h:420
#14 0x00007f5564d098eb in ProjectExplorer::SessionManager::setActiveBuildConfiguration (target=0x2c6cc60, bc=0x29839d0,
cascade=ProjectExplorer::SetActive::Cascade) at /home/tjmaciei/src/qt/qt-creator/src/plugins/projectexplorer/session.cpp:310
#15 0x00007f5564dada4f in operator() (pc=0x29839d0, __closure=<optimized out>)
at /home/tjmaciei/src/qt/qt-creator/src/plugins/projectexplorer/miniprojecttargetselector.cpp:740
#16 QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<QObject*>, void, ProjectExplorer::Internal::MiniProjectTargetSelector::MiniProjectTargetSelector(QAction*, QWidget*)::<lambda(QObject*)> >::call (arg=<optimized out>, f=...)
at ../../../../installed/include/QtCore/qobjectdefs_impl.h:146
#17 QtPrivate::Functor<ProjectExplorer::Internal::MiniProjectTargetSelector::MiniProjectTargetSelector(QAction*, QWidget*)::<lambda(QObject*)>, 1>::call<QtPrivate::List<QObject*>, void> (arg=<optimized out>, f=...) at ../../../../installed/include/QtCore/qobjectdefs_impl.h:260
#18 QtPrivate::QFunctorSlotObject<ProjectExplorer::Internal::MiniProjectTargetSelector::MiniProjectTargetSelector(QAction*, QWidget*)::<lambda(QObject*)>, 1, QtPrivate::List<QObject*>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void **, bool *) (which=<optimized out>,
this_=<optimized out>, r=<optimized out>, a=<optimized out>, ret=<optimized out>)
at ../../../../installed/include/QtCore/qobjectdefs_impl.h:447
#19 0x00007f55714385a2 in QtPrivate::QSlotObjectBase::call ()
at ../../include/QtCore/../../../../../../src/qt/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:402
#20 doActivate<false> () at /home/tjmaciei/src/qt/qt5/qtbase/src/corelib/kernel/qobject.cpp:3882
#21 0x00007f5564da937d in ProjectExplorer::Internal::GenericListWidget::changeActiveProjectConfiguration (this=<optimized out>,
_t1=<optimized out>) at .moc/release-shared/miniprojecttargetselector.moc:338
#22 0x00007f5564da44ea in ProjectExplorer::Internal::GenericListWidget::rowChanged (this=0x184d060, index=...)
at /home/tjmaciei/src/qt/qt-creator/src/plugins/projectexplorer/miniprojecttargetselector.cpp:102
#23 0x00007f5564da9247 in QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<QModelIndex const&>, void, void (ProjectExplorer::Internal::GenericListWidget::*)(QModelIndex const&)>::call (arg=<optimized out>, o=<optimized out>, f=<optimized out>)
at ../../../../installed/include/QtCore/qobjectdefs_impl.h:185
#24 QtPrivate::FunctionPointer<void (ProjectExplorer::Internal::GenericListWidget::*)(QModelIndex const&)>::call<QtPrivate::List<QModelIndex const&>, void> (arg=<optimized out>, o=<optimized out>, f=<optimized out>) at ../../../../installed/include/QtCore/qobjectdefs_impl.h:186
#25 QtPrivate::QSlotObject<void (ProjectExplorer::Internal::GenericListWidget::*)(QModelIndex const&), QtPrivate::List<QModelIndex const&>, void>::impl (which=<optimized out>, this_=<optimized out>, r=<optimized out>, a=<optimized out>, ret=<optimized out>)
at ../../../../installed/include/QtCore/qobjectdefs_impl.h:422
#26 0x00007f55714385a2 in QtPrivate::QSlotObjectBase::call ()
at ../../include/QtCore/../../../../../../src/qt/qt5/qtbase/src/corelib/kernel/qobjectdefs_impl.h:402
#27 doActivate<false> () at /home/tjmaciei/src/qt/qt5/qtbase/src/corelib/kernel/qobject.cpp:3882
#28 0x00007f557139bad2 in QItemSelectionModel::currentChanged () at .moc/moc_qitemselectionmodel.cpp:471
#29 QItemSelectionModel::setCurrentIndex () at /home/tjmaciei/src/qt/qt5/qtbase/src/corelib/itemmodels/qitemselectionmodel.cpp:1414
#30 0x00007f55724826f1 in QAbstractItemView::mousePressEvent ()
at /home/tjmaciei/src/qt/qt5/qtbase/src/widgets/itemviews/qabstractitemview.cpp:1785
#31 0x00007f5564da086a in ProjectExplorer::Internal::GenericListWidget::mousePressEvent (this=0x184d060, event=0x7ffe7b8b6ed0)
at /home/tjmaciei/src/qt/qt-creator/src/plugins/projectexplorer/miniprojecttargetselector.cpp:382
#32 0x00007f55721f6ca8 in QWidget::event () at /home/tjmaciei/src/qt/qt5/qtbase/src/widgets/kernel/qwidget.cpp:9020
#33 0x00007f55722c007e in QFrame::event () at /home/tjmaciei/src/qt/qt5/qtbase/src/widgets/widgets/qframe.cpp:550
#34 0x00007f55713f60a2 in QCoreApplicationPrivate::sendThroughObjectEventFilters ()
at /home/tjmaciei/src/qt/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1221
#35 0x00007f55721a49ee in QApplicationPrivate::notify_helper () at /home/tjmaciei/src/qt/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3676
#36 0x00007f55721ac669 in QApplication::notify () at /home/tjmaciei/src/qt/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3126
#37 0x00007f5571400f58 in QCoreApplication::notifyInternal2 () at /home/tjmaciei/src/qt/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1095
#38 QCoreApplication::sendSpontaneousEvent () at /home/tjmaciei/src/qt/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1502
#39 0x00007f55721ab6d0 in QApplicationPrivate::sendMouseEvent () at /home/tjmaciei/src/qt/qt5/qtbase/src/widgets/kernel/qapplication.cpp:2614
#40 0x00007f5572217dc5 in QWidgetWindow::handleMouseEvent () at /home/tjmaciei/src/qt/qt5/qtbase/src/widgets/kernel/qwidgetwindow.cpp:580
#41 0x00007f557221a550 in QWidgetWindow::event () at /home/tjmaciei/src/qt/qt5/qtbase/src/widgets/kernel/qwidgetwindow.cpp:300
#42 QWidgetWindow::event () at /home/tjmaciei/src/qt/qt5/qtbase/src/widgets/kernel/qwidgetwindow.cpp:239
#43 0x00007f55721a49ff in QApplicationPrivate::notify_helper () at /home/tjmaciei/src/qt/qt5/qtbase/src/widgets/kernel/qapplication.cpp:3682
#44 0x00007f5571400f58 in QCoreApplication::notifyInternal2 () at /home/tjmaciei/src/qt/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1095
#45 QCoreApplication::sendSpontaneousEvent () at /home/tjmaciei/src/qt/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1502
#46 0x00007f5571a2b28b in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) ()
from /home/tjmaciei/obj/qt/installed/lib64/libQt5Gui.t.so.5
#47 0x00007f55719f8b0b in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) ()
from /home/tjmaciei/obj/qt/installed/lib64/libQt5Gui.t.so.5
#48 0x00007f556d53052a in ?? () from /home/tjmaciei/obj/qt/installed/lib64/qt5/plugins/platforms/../../../libQt5XcbQpa.t.so.5
#49 0x00007f556fcd32b7 in g_main_context_dispatch () from /usr/lib64/libglib-2.0.so.0
#50 0x00007f556fcd3638 in ?? () from /usr/lib64/libglib-2.0.so.0
#51 0x00007f556fcd36ef in g_main_context_iteration () from /usr/lib64/libglib-2.0.so.0
#52 0x00007f557145b4c1 in QEventDispatcherGlib::processEvents ()
at /home/tjmaciei/src/qt/qt5/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:422
#53 0x00007f55713f581d in QEventLoop::processEvents () at /home/tjmaciei/src/qt/qt5/qtbase/src/corelib/kernel/qeventloop.cpp:139
#54 QEventLoop::exec () at /home/tjmaciei/src/qt/qt5/qtbase/src/corelib/kernel/qeventloop.cpp:232
#55 0x00007f5571400918 in QCoreApplication::exec () at /home/tjmaciei/src/qt/qt5/qtbase/src/corelib/kernel/qcoreapplication.cpp:1403
#56 0x000000000040bc6f in ?? ()
#57 0x00007f5570d15cca in __libc_start_main (main=0x408d30, argc=1, argv=0x7ffe7b8b7c98, init=<optimized out>, fini=<optimized out>,
rtld_fini=<optimized out>, stack_end=0x7ffe7b8b7c88) at ../csu/libc-start.c:308
#58 0x000000000040c90a in ?? ()
Valgrind log (happens slightly earlier):
==285205== Invalid read of size 8
==285205== at 0x1065FFA1: QtPrivate::QFunctorSlotObject<ProjectExplorer::MakeStep::createConfigWidget()::{lambda()#2}, 0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (makestep.cpp:474)
==285205== by 0x5EF15A1: call (qobjectdefs_impl.h:402)
==285205== by 0x5EF15A1: void doActivate<false>(QObject*, int, void**) (qobject.cpp:3882)
==285205== by 0x1067478A: ProjectExplorer::Target::parsingFinished(bool) (moc_target.cpp:363)
==285205== by 0x10479102: ProjectExplorer::BuildSystem::emitParsingFinished(bool) (buildsystem.cpp:124)
==285205== by 0x1047921E: ProjectExplorer::BuildSystem::ParseGuard::release() (buildsystem.cpp:284)
==285205== by 0x124FC429: ??? (in /home/tjmaciei/obj/qt/installed/lib64/qtcreator/plugins/libGenericProjectManager.so)
==285205== by 0x5EF15A1: call (qobjectdefs_impl.h:402)
==285205== by 0x5EF15A1: void doActivate<false>(QObject*, int, void**) (qobject.cpp:3882)
==285205== by 0x1067494A: ProjectExplorer::Target::activeBuildConfigurationChanged(ProjectExplorer::BuildConfiguration*) (moc_target.cpp:412)
==285205== by 0x10516E1E: ProjectExplorer::Target::setActiveBuildConfiguration(ProjectExplorer::BuildConfiguration*) (target.cpp:344)
==285205== by 0x1053D8EA: ProjectExplorer::SessionManager::setActiveBuildConfiguration(ProjectExplorer::Target*, ProjectExplorer::BuildConfiguration*, ProjectExplorer::SetActive) (session.cpp:310)
==285205== by 0x105E1A4E: QtPrivate::QFunctorSlotObject<ProjectExplorer::Internal::MiniProjectTargetSelector::MiniProjectTargetSelector(QAction*, QWidget*)::{lambda(QObject*)#2}, 1, QtPrivate::List<QObject*>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (miniprojecttargetselector.cpp:740)
==285205== by 0x5EF15A1: call (qobjectdefs_impl.h:402)
==285205== by 0x5EF15A1: void doActivate<false>(QObject*, int, void**) (qobject.cpp:3882)
==285205== Address 0x1811d7c8 is 24 bytes before a block of size 56 free'd
==285205== at 0x483A08B: operator delete(void*, unsigned long) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==285205== by 0x105BB083: ProjectExplorer::Internal::WrapperNode::~WrapperNode() (projectmodels.h:50)
==285205== by 0x4A02368: Utils::TreeItem::clear() (in /home/tjmaciei/obj/qt/installed/lib64/qtcreator/libUtils.so.4.13.82)
==285205== by 0x4A06407: Utils::TreeItem::~TreeItem() (in /home/tjmaciei/obj/qt/installed/lib64/qtcreator/libUtils.so.4.13.82)
==285205== by 0x105BB076: ProjectExplorer::Internal::WrapperNode::~WrapperNode() (treemodel.h:110)
==285205== by 0x4A02368: Utils::TreeItem::clear() (in /home/tjmaciei/obj/qt/installed/lib64/qtcreator/libUtils.so.4.13.82)
==285205== by 0x4A06407: Utils::TreeItem::~TreeItem() (in /home/tjmaciei/obj/qt/installed/lib64/qtcreator/libUtils.so.4.13.82)
==285205== by 0x105BB076: ProjectExplorer::Internal::WrapperNode::~WrapperNode() (treemodel.h:110)
==285205== by 0x4A02368: Utils::TreeItem::clear() (in /home/tjmaciei/obj/qt/installed/lib64/qtcreator/libUtils.so.4.13.82)
==285205== by 0x4A06407: Utils::TreeItem::~TreeItem() (in /home/tjmaciei/obj/qt/installed/lib64/qtcreator/libUtils.so.4.13.82)
==285205== by 0x105BB076: ProjectExplorer::Internal::WrapperNode::~WrapperNode() (treemodel.h:110)
==285205== by 0x4A02368: Utils::TreeItem::clear() (in /home/tjmaciei/obj/qt/installed/lib64/qtcreator/libUtils.so.4.13.82)
==285205== Block was alloc'd at
==285205== at 0x4838DEF: operator new(unsigned long) (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==285205== by 0x105B86CC: ProjectExplorer::Internal::FlatModel::addFolderNode(ProjectExplorer::Internal::WrapperNode*, ProjectExplorer::FolderNode*, QSet<ProjectExplorer::Node*>*) (projectmodels.cpp:417)
==285205== by 0x105B8589: ProjectExplorer::Internal::FlatModel::addFolderNode(ProjectExplorer::Internal::WrapperNode*, ProjectExplorer::FolderNode*, QSet<ProjectExplorer::Node*>*) (projectmodels.cpp:409)
==285205== by 0x105B8589: ProjectExplorer::Internal::FlatModel::addFolderNode(ProjectExplorer::Internal::WrapperNode*, ProjectExplorer::FolderNode*, QSet<ProjectExplorer::Node*>*) (projectmodels.cpp:409)
==285205== by 0x105B8589: ProjectExplorer::Internal::FlatModel::addFolderNode(ProjectExplorer::Internal::WrapperNode*, ProjectExplorer::FolderNode*, QSet<ProjectExplorer::Node*>*) (projectmodels.cpp:409)
==285205== by 0x105B8589: ProjectExplorer::Internal::FlatModel::addFolderNode(ProjectExplorer::Internal::WrapperNode*, ProjectExplorer::FolderNode*, QSet<ProjectExplorer::Node*>*) (projectmodels.cpp:409)
==285205== by 0x105B8984: ProjectExplorer::Internal::FlatModel::addOrRebuildProjectModel(ProjectExplorer::Project*) (projectmodels.cpp:271)
==285205== by 0x105B91D8: ProjectExplorer::Internal::FlatModel::updateSubtree(ProjectExplorer::FolderNode*) (projectmodels.cpp:321)
==285205== by 0x105BA353: QtPrivate::QSlotObject<void (ProjectExplorer::Internal::FlatModel::*)(ProjectExplorer::FolderNode*), QtPrivate::List<ProjectExplorer::FolderNode*>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (qobjectdefs_impl.h:152)
==285205== by 0x5EF15A1: call (qobjectdefs_impl.h:402)
==285205== by 0x5EF15A1: void doActivate<false>(QObject*, int, void**) (qobject.cpp:3882)
==285205== by 0x1067DCDA: ProjectExplorer::ProjectTree::subtreeChanged(ProjectExplorer::FolderNode*) (moc_projecttree.cpp:205)
==285205== by 0x1064EF76: ProjectExplorer::ProjectTree::emitSubtreeChanged(ProjectExplorer::FolderNode*) (projecttree.cpp:279)
==285205==
==285205== Jump to the invalid address stated on the next line
==285205== at 0x0: ???
==285205== by 0x1065FFB9: QtPrivate::QFunctorSlotObject<ProjectExplorer::MakeStep::createConfigWidget()::{lambda()#2}, 0, QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (makestep.cpp:473)
==285205== by 0x5EF15A1: call (qobjectdefs_impl.h:402)
==285205== by 0x5EF15A1: void doActivate<false>(QObject*, int, void**) (qobject.cpp:3882)
==285205== by 0x1067478A: ProjectExplorer::Target::parsingFinished(bool) (moc_target.cpp:363)
==285205== by 0x10479102: ProjectExplorer::BuildSystem::emitParsingFinished(bool) (buildsystem.cpp:124)
==285205== by 0x1047921E: ProjectExplorer::BuildSystem::ParseGuard::release() (buildsystem.cpp:284)
==285205== by 0x124FC429: ??? (in /home/tjmaciei/obj/qt/installed/lib64/qtcreator/plugins/libGenericProjectManager.so)
==285205== by 0x5EF15A1: call (qobjectdefs_impl.h:402)
==285205== by 0x5EF15A1: void doActivate<false>(QObject*, int, void**) (qobject.cpp:3882)
==285205== by 0x1067494A: ProjectExplorer::Target::activeBuildConfigurationChanged(ProjectExplorer::BuildConfiguration*) (moc_target.cpp:412)
==285205== by 0x10516E1E: ProjectExplorer::Target::setActiveBuildConfiguration(ProjectExplorer::BuildConfiguration*) (target.cpp:344)
==285205== by 0x1053D8EA: ProjectExplorer::SessionManager::setActiveBuildConfiguration(ProjectExplorer::Target*, ProjectExplorer::BuildConfiguration*, ProjectExplorer::SetActive) (session.cpp:310)
==285205== by 0x105E1A4E: QtPrivate::QFunctorSlotObject<ProjectExplorer::Internal::MiniProjectTargetSelector::MiniProjectTargetSelector(QAction*, QWidget*)::{lambda(QObject*)#2}, 1, QtPrivate::List<QObject*>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) (miniprojecttargetselector.cpp:740)
==285205== Address 0x0 is not stack'd, malloc'd or (recently) free'd
It's crashing here:
464 auto updateDetails = [this, widget] { 465 const bool jobCountVisible = isJobCountSupported(); 466 m_userJobCountAspect->setVisible(jobCountVisible); 467 m_overrideMakeflagsAspect->setVisible(jobCountVisible); 468 469 const bool jobCountEnabled = !userArgsContainsJobCount(); 470 m_userJobCountAspect->setEnabled(jobCountEnabled); 471 m_overrideMakeflagsAspect->setEnabled(jobCountEnabled); 472 473 m_overrideMakeflagsAspect->m_nonOverrideWarning->setVisible( 474 makeflagsJobCountMismatch() && !jobCountOverridesMakeflags()); 475 widget->m_disableInSubDirsCheckBox->setChecked(!enabledForSubDirs()); 476 477 widget->recreateSummary(); 478 };
The disassembly shows the crash happens while trying to load the address of a virtual function, called after ProjectExplorer::MakeStep::makeflagsJobCountMismatch() and ProjectExplorer::MakeStep::jobCountOverridesMakeflags(), so I'm guessing it's the setVisible one.
Indeed m_overrideMakeflagsAspect->m_nonOverrideWarning makes no sense:
(gdb) p m_overrideMakeflagsAspect->m_nonOverrideWarning
$1 = (QLabel *) 0x262f350
(gdb) p *m_overrideMakeflagsAspect->m_nonOverrideWarning
$2 = {<QFrame> = {<QWidget> = {<QObject> = {<No data fields>}, <QPaintDevice> = {<No data fields>}, data = 0x73007700650069}, }, }
The other fields in m_overrideMakeflagsAspect look correct, except maybe for m_configWidgetCreator. That's a std::function and I wouldn't know how to interpret its internals to see if it's valid or not.