Uploaded image for project: 'Qt Creator'
  1. Qt Creator
  2. QTCREATORBUG-32466

QtC hangs at 100% CPU while trying to execute "move definition to x.cpp" on a hidden friend operator

    XMLWordPrintable

Details

    • Bug
    • Resolution: Unresolved
    • P3: Somewhat important
    • None
    • Qt Creator 14.0.2
    • C/C++/Obj-C++ Support
    • None
    • Linux/X11

    Description

      GIVEN qt5.git project open with qtactiveqt at 6.9 beta 2 (ie. pre https://codereview.qt-project.org/c/qt/qtactiveqt/+/620466), qaxwidget.h open in the editor

      WHEN copying the #ifndef QT_NO_DATASTREAM block from outside the class to just before the }; of the class, hitting CTRL-I to re-indent, replacing inline with friend, placing the cursor on the operator>>, hitting ATL-Enter and selecting "Move defintition to qaxwidget.cpp".

      THEN QtC hangs with 100% CPU for a few minutes. Attaching gdb to get a backtrace gives

      x00007f2d01d465d8 in CPlusPlus::ClassOrNamespace::lookupType_helper(CPlusPlus::Name const*, QSet<CPlusPlus::ClassOrNamespace*>*, bool, CPlusPlus::ClassOrNamespace*) ()
         from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      (gdb) where
      #0  0x00007f2d01d465d8 in CPlusPlus::ClassOrNamespace::lookupType_helper(CPlusPlus::Name const*, QSet<CPlusPlus::ClassOrNamespace*>*, bool, CPlusPlus::ClassOrNamespace*) ()
         from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #1  0x00007f2d01d46ab1 in CPlusPlus::ClassOrNamespace::lookupType(CPlusPlus::Name const*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #2  0x00007f2d01d48bbb in CPlusPlus::CreateBindings::lookupType(QList<CPlusPlus::Name const*> const&, CPlusPlus::ClassOrNamespace*) ()
         from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #3  0x00007f2d01d48c6a in CPlusPlus::CreateBindings::lookupType(CPlusPlus::Symbol*, CPlusPlus::ClassOrNamespace*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #4  0x00007f2d01d4a58d in CPlusPlus::CreateBindings::visit(CPlusPlus::Function*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #5  0x00007f2d01d0c6a0 in CPlusPlus::Function::visitSymbol0(CPlusPlus::SymbolVisitor*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #6  0x00007f2d01d0b780 in CPlusPlus::Symbol::visitSymbol(CPlusPlus::SymbolVisitor*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #7  0x00007f2d01d3fa2c in CPlusPlus::CreateBindings::visit(CPlusPlus::Template*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #8  0x00007f2d01d0c7f0 in CPlusPlus::Template::visitSymbol0(CPlusPlus::SymbolVisitor*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #9  0x00007f2d01d0b780 in CPlusPlus::Symbol::visitSymbol(CPlusPlus::SymbolVisitor*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #10 0x00007f2d01d407f1 in CPlusPlus::CreateBindings::process(CPlusPlus::Symbol*, CPlusPlus::ClassOrNamespace*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #11 0x00007f2d01d40887 in CPlusPlus::ClassOrNamespace::flush() () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #12 0x00007f2d01d465a8 in CPlusPlus::ClassOrNamespace::lookupType_helper(CPlusPlus::Name const*, QSet<CPlusPlus::ClassOrNamespace*>*, bool, CPlusPlus::ClassOrNamespace*) ()
         from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #13 0x00007f2d01d46ab1 in CPlusPlus::ClassOrNamespace::lookupType(CPlusPlus::Name const*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #14 0x00007f2d01d48be8 in CPlusPlus::CreateBindings::lookupType(QList<CPlusPlus::Name const*> const&, CPlusPlus::ClassOrNamespace*) ()
         from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #15 0x00007f2d01d48c6a in CPlusPlus::CreateBindings::lookupType(CPlusPlus::Symbol*, CPlusPlus::ClassOrNamespace*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #16 0x00007f2d01d49a9f in CPlusPlus::LookupContext::lookupType(CPlusPlus::Symbol*, CPlusPlus::ClassOrNamespace*) const () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #17 0x00007f2d021622c0 in CppEditor::SymbolFinder::findMatchingDefinition(CPlusPlus::Symbol*, CPlusPlus::Snapshot const&, bool) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/libCppEditor.so
      #18 0x00007f2d020b4080 in CppEditor::InsertionPointLocator::methodDefinition(CPlusPlus::Symbol*, bool, Utils::FilePath const&) const () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/libCppEditor.so
      #19 0x00007f2d020b53a1 in CppEditor::insertLocationForMethodDefinition(CPlusPlus::Symbol*, bool, CppEditor::NamespaceHandling, CppEditor::CppRefactoringChanges const&, Utils::FilePath const&, QList<QString>*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/libCppEditor.so
      #20 0x00007f2d02136d7b in ?? () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/libCppEditor.so
      #21 0x00007f2d02137ed8 in ?? () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/libCppEditor.so
      #22 0x00007f2d0c591b51 in TextEditor::AssistProposalItem::applyQuickFix(TextEditor::TextDocumentManipulatorInterface&, int) const () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/libTextEditor.so
      #23 0x00007f2d0c595859 in ?? () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/libTextEditor.so
      #24 0x00007f2d19ac666a in ?? () from /d/Qt/Tools/QtCreator/bin/../lib/Qt/lib/libQt6Core.so.6
      #25 0x00007f2d0c55cf32 in TextEditor::IAssistProposalWidget::proposalItemActivated(TextEditor::AssistProposalItemInterface*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/libTextEditor.so
      #26 0x00007f2d0c5a2261 in TextEditor::GenericProposalWidget::activateCurrentProposalItem() () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/libTextEditor.so
      #27 0x00007f2d0c5a2a83 in TextEditor::GenericProposalWidget::eventFilter(QObject*, QEvent*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/libTextEditor.so
      #28 0x00007f2d19a67aaa in QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) () from /d/Qt/Tools/QtCreator/bin/../lib/Qt/lib/libQt6Core.so.6
      #29 0x00007f2d1adb5621 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /d/Qt/Tools/QtCreator/bin/../lib/Qt/lib/libQt6Widgets.so.6
      #30 0x00007f2d1adbe1a3 in QApplication::notify(QObject*, QEvent*) () from /d/Qt/Tools/QtCreator/bin/../lib/Qt/lib/libQt6Widgets.so.6
      #31 0x00007f2d19a67d3a in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /d/Qt/Tools/QtCreator/bin/../lib/Qt/lib/libQt6Core.so.6
      #32 0x00007f2d1ae224c3 in ?? () from /d/Qt/Tools/QtCreator/bin/../lib/Qt/lib/libQt6Widgets.so.6
      #33 0x00007f2d1adb5632 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /d/Qt/Tools/QtCreator/bin/../lib/Qt/lib/libQt6Widgets.so.6
      #34 0x00007f2d19a67d3a in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /d/Qt/Tools/QtCreator/bin/../lib/Qt/lib/libQt6Core.so.6
      #35 0x00007f2d1a3f822b in QGuiApplicationPrivate::processKeyEvent(QWindowSystemInterfacePrivate::KeyEvent*) () from /d/Qt/Tools/QtCreator/bin/../lib/Qt/lib/libQt6Gui.so.6
      #36 0x00007f2d1a455d5c in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /d/Qt/Tools/QtCreator/bin/../lib/Qt/lib/libQt6Gui.so.6
      #37 0x00007f2d1573f04a in ?? () from /d/Qt/Tools/QtCreator/lib/Qt/lib/libQt6XcbQpa.so.6
      #38 0x00007f2d1667217d in g_main_context_dispatch () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
      #39 0x00007f2d16672400 in ?? () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
      #40 0x00007f2d166724a3 in g_main_context_iteration () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
      #41 0x00007f2d19d20afa in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /d/Qt/Tools/QtCreator/bin/../lib/Qt/lib/libQt6Core.so.6
      #42 0x00007f2d19a73573 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /d/Qt/Tools/QtCreator/bin/../lib/Qt/lib/libQt6Core.so.6
      #43 0x00007f2d19a7000e in QCoreApplication::exec() () from /d/Qt/Tools/QtCreator/bin/../lib/Qt/lib/libQt6Core.so.6
      #44 0x000000000040f3f8 in ?? ()
      #45 0x00007f2d193c7083 in __libc_start_main (main=0x40b3d0, argc=4, argv=0x7fffd0f19c28, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffd0f19c18)
          at ../csu/libc-start.c:308
      #46 0x000000000040fb2e in ?? ()
      (gdb) 
      #0  0x00007f2d01d465d8 in CPlusPlus::ClassOrNamespace::lookupType_helper(CPlusPlus::Name const*, QSet<CPlusPlus::ClassOrNamespace*>*, bool, CPlusPlus::ClassOrNamespace*) ()
         from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #1  0x00007f2d01d46ab1 in CPlusPlus::ClassOrNamespace::lookupType(CPlusPlus::Name const*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #2  0x00007f2d01d48bbb in CPlusPlus::CreateBindings::lookupType(QList<CPlusPlus::Name const*> const&, CPlusPlus::ClassOrNamespace*) ()
         from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #3  0x00007f2d01d48c6a in CPlusPlus::CreateBindings::lookupType(CPlusPlus::Symbol*, CPlusPlus::ClassOrNamespace*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #4  0x00007f2d01d4a58d in CPlusPlus::CreateBindings::visit(CPlusPlus::Function*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #5  0x00007f2d01d0c6a0 in CPlusPlus::Function::visitSymbol0(CPlusPlus::SymbolVisitor*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #6  0x00007f2d01d0b780 in CPlusPlus::Symbol::visitSymbol(CPlusPlus::SymbolVisitor*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #7  0x00007f2d01d3fa2c in CPlusPlus::CreateBindings::visit(CPlusPlus::Template*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #8  0x00007f2d01d0c7f0 in CPlusPlus::Template::visitSymbol0(CPlusPlus::SymbolVisitor*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #9  0x00007f2d01d0b780 in CPlusPlus::Symbol::visitSymbol(CPlusPlus::SymbolVisitor*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #10 0x00007f2d01d407f1 in CPlusPlus::CreateBindings::process(CPlusPlus::Symbol*, CPlusPlus::ClassOrNamespace*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #11 0x00007f2d01d40887 in CPlusPlus::ClassOrNamespace::flush() () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #12 0x00007f2d01d465a8 in CPlusPlus::ClassOrNamespace::lookupType_helper(CPlusPlus::Name const*, QSet<CPlusPlus::ClassOrNamespace*>*, bool, CPlusPlus::ClassOrNamespace*) ()
         from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #13 0x00007f2d01d46ab1 in CPlusPlus::ClassOrNamespace::lookupType(CPlusPlus::Name const*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #14 0x00007f2d01d48be8 in CPlusPlus::CreateBindings::lookupType(QList<CPlusPlus::Name const*> const&, CPlusPlus::ClassOrNamespace*) ()
         from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #15 0x00007f2d01d48c6a in CPlusPlus::CreateBindings::lookupType(CPlusPlus::Symbol*, CPlusPlus::ClassOrNamespace*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #16 0x00007f2d01d49a9f in CPlusPlus::LookupContext::lookupType(CPlusPlus::Symbol*, CPlusPlus::ClassOrNamespace*) const () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/../libCPlusPlus.so.14
      #17 0x00007f2d021622c0 in CppEditor::SymbolFinder::findMatchingDefinition(CPlusPlus::Symbol*, CPlusPlus::Snapshot const&, bool) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/libCppEditor.so
      #18 0x00007f2d020b4080 in CppEditor::InsertionPointLocator::methodDefinition(CPlusPlus::Symbol*, bool, Utils::FilePath const&) const () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/libCppEditor.so
      #19 0x00007f2d020b53a1 in CppEditor::insertLocationForMethodDefinition(CPlusPlus::Symbol*, bool, CppEditor::NamespaceHandling, CppEditor::CppRefactoringChanges const&, Utils::FilePath const&, QList<QString>*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/libCppEditor.so
      #20 0x00007f2d02136d7b in ?? () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/libCppEditor.so
      #21 0x00007f2d02137ed8 in ?? () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/libCppEditor.so
      #22 0x00007f2d0c591b51 in TextEditor::AssistProposalItem::applyQuickFix(TextEditor::TextDocumentManipulatorInterface&, int) const () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/libTextEditor.so
      #23 0x00007f2d0c595859 in ?? () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/libTextEditor.so
      #24 0x00007f2d19ac666a in ?? () from /d/Qt/Tools/QtCreator/bin/../lib/Qt/lib/libQt6Core.so.6
      #25 0x00007f2d0c55cf32 in TextEditor::IAssistProposalWidget::proposalItemActivated(TextEditor::AssistProposalItemInterface*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/libTextEditor.so
      #26 0x00007f2d0c5a2261 in TextEditor::GenericProposalWidget::activateCurrentProposalItem() () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/libTextEditor.so
      #27 0x00007f2d0c5a2a83 in TextEditor::GenericProposalWidget::eventFilter(QObject*, QEvent*) () from /d/Qt/Tools/QtCreator/lib/qtcreator/plugins/libTextEditor.so
      #28 0x00007f2d19a67aaa in QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) () from /d/Qt/Tools/QtCreator/bin/../lib/Qt/lib/libQt6Core.so.6
      #29 0x00007f2d1adb5621 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /d/Qt/Tools/QtCreator/bin/../lib/Qt/lib/libQt6Widgets.so.6
      #30 0x00007f2d1adbe1a3 in QApplication::notify(QObject*, QEvent*) () from /d/Qt/Tools/QtCreator/bin/../lib/Qt/lib/libQt6Widgets.so.6
      #31 0x00007f2d19a67d3a in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /d/Qt/Tools/QtCreator/bin/../lib/Qt/lib/libQt6Core.so.6
      #32 0x00007f2d1ae224c3 in ?? () from /d/Qt/Tools/QtCreator/bin/../lib/Qt/lib/libQt6Widgets.so.6
      #33 0x00007f2d1adb5632 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /d/Qt/Tools/QtCreator/bin/../lib/Qt/lib/libQt6Widgets.so.6
      #34 0x00007f2d19a67d3a in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /d/Qt/Tools/QtCreator/bin/../lib/Qt/lib/libQt6Core.so.6
      #35 0x00007f2d1a3f822b in QGuiApplicationPrivate::processKeyEvent(QWindowSystemInterfacePrivate::KeyEvent*) () from /d/Qt/Tools/QtCreator/bin/../lib/Qt/lib/libQt6Gui.so.6
      #36 0x00007f2d1a455d5c in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /d/Qt/Tools/QtCreator/bin/../lib/Qt/lib/libQt6Gui.so.6
      #37 0x00007f2d1573f04a in ?? () from /d/Qt/Tools/QtCreator/lib/Qt/lib/libQt6XcbQpa.so.6
      #38 0x00007f2d1667217d in g_main_context_dispatch () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
      #39 0x00007f2d16672400 in ?? () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
      #40 0x00007f2d166724a3 in g_main_context_iteration () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
      #41 0x00007f2d19d20afa in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /d/Qt/Tools/QtCreator/bin/../lib/Qt/lib/libQt6Core.so.6
      #42 0x00007f2d19a73573 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /d/Qt/Tools/QtCreator/bin/../lib/Qt/lib/libQt6Core.so.6
      #43 0x00007f2d19a7000e in QCoreApplication::exec() () from /d/Qt/Tools/QtCreator/bin/../lib/Qt/lib/libQt6Core.so.6
      #44 0x000000000040f3f8 in ?? ()
      #45 0x00007f2d193c7083 in __libc_start_main (main=0x40b3d0, argc=4, argv=0x7fffd0f19c28, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffd0f19c18)
      

      It eventually completes, but the function has (incorrectly) the class scope in front, even though it's a friend.

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            kandeler Christian Kandeler
            mmutz Marc Mutz
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:

              Gerrit Reviews

                There are no open Gerrit changes