Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-135885

qmlcachegen crash on Qt 6.9

    XMLWordPrintable

Details

    • Bug
    • Resolution: Duplicate
    • P1: Critical
    • 6.9.1
    • 6.9.0
    • QML: Compiler
    • None
    • Linux/Wayland, Linux/X11

    Description

      qmlcachegen crashes here during compiling dde-shell after updating Qt to 6.9.0. The same command and file doesn't trigger the crash on Qt 6.8.2.

      The qml file is: https://github.com/linuxdeepin/dde-shell/blob/1.0.10/panels/dock/OverflowContainer.qml

      Command to reproduce: /usr/lib/qt6/qmlcachegen --bare --resource-path /org/deepin/ds/dock/OverflowContainer.qml -I /usr/lib/qt6/qml -o /tmp/out.cpp OverflowContainer.qml

      System: Arch Linux x86_64

      gdb:

      Program terminated with signal SIGSEGV, Segmentation fault.
      #0  QQmlJSCodeGenerator::convertStored (this=this@entry=0x7fff28f50500, from=..., to=..., variable=...) at /usr/src/debug/qt6-declarative/qtdeclarative/src/qmlcompiler/qqmljsscope_p.h:433
      {{433         AccessSemantics accessSemantics() const

      { return m_semantics; }

      }}
      (gdb) bt
      #0  QQmlJSCodeGenerator::convertStored (this=this@entry=0x7fff28f50500, from=..., to=..., variable=...) at /usr/src/debug/qt6-declarative/qtdeclarative/src/qmlcompiler/qqmljsscope_p.h:433
      #1  0x00007c4e0098d0e5 in QQmlJSCodeGenerator::conversion (this=0x7fff28f50500, from=..., to=..., variable=...) at /usr/src/debug/qt6-declarative/qtdeclarative/src/qmlcompiler/qqmljscodegenerator.cpp:4016
      #2  0x00007c4e009722d1 in QQmlJSCodeGenerator::generate_IteratorNext (this=0x7fff28f50500, value=<optimized out>, offset=34) at /usr/src/debug/qt6-declarative/qtdeclarative/src/qmlcompiler/qqmljscodegenerator.cpp:2676
      #3  0x00007c4e002f4059 in QV4::Moth::ByteCodeHandler::decode (this=this@entry=0x7fff28f50500, code=0x5a9e1947abdc "\001\002\n\001\026\t\030\n\026\a\302&\030\r\026", <incomplete sequence \302>, len=<optimized out>)
          at /usr/src/debug/qt6-declarative/qtdeclarative/src/qml/compiler/qv4bytecodehandler.cpp:41
      #4  0x00007c4e0095250a in QQmlJSCodeGenerator::run (this=<optimized out>, function=0x7fff28f50b80, basicBlocksValidationFailed=false) at /usr/src/debug/qt6-declarative/qtdeclarative/src/qmlcompiler/qqmljscodegenerator.cpp:185
      #5  0x00007c4e009acbe2 in QQmlJSAotCompiler::doCompile (this=0x7fff28f51a00, context=<optimized out>, function=function@entry=0x7fff28f50b80, errors=<optimized out>, errors@entry=0x7fff28f50a90)
          at /usr/src/debug/qt6-declarative/qtdeclarative/src/qmlcompiler/qqmljscompiler.cpp:812
      #6  0x00007c4e009acd95 in QQmlJSAotCompiler::doCompileAndRecordAotStats (this=<optimized out>, context=<optimized out>, function=0x7fff28f50b80, errors=0x7fff28f50a90, name=..., location=...)
          at /usr/src/debug/qt6-declarative/qtdeclarative/src/qmlcompiler/qqmljscompiler.cpp:823
      #7  0x00007c4e0099eb74 in QQmlJSAotCompiler::compileBinding (this=0x7fff28f51a00, context=0x5a9e19495720, irBinding=<optimized out>, astNode=0x5a9e18ffd208) at /usr/src/debug/qt6-declarative/qtdeclarative/src/qmlcompiler/qqmljscompiler.cpp:695
      #8  0x00007c4e0099d618 in operator() (__closure=<synthetic pointer>, bindingOrFunction=<optimized out>) at /usr/src/debug/qt6-declarative/qtdeclarative/src/qmlcompiler/qqmljscompiler.cpp:331
      #9  std::for_each<{}gnu_cxx::{}normal_iterator<BindingOrFunction*, std::vector<BindingOrFunction> >, qCompileQmlFile(QmlIR::Document&, const QString&, QQmlJSSaveFunction, QQmlJSAotCompiler*, QQmlJSCompileError*, bool, QV4::Compiler::CodegenWarningInterface*, const QString*)::<lambda(const BindingOrFunction&)> > ({_}_first=Python Exception <class 'gdb.error'>: value has been optimized out
      , __last=..., __f=...) at /usr/include/c++/14.2.1/bits/stl_algo.h:3786
      #10 qCompileQmlFile (irDocument=..., inputFileName=..., saveFunction=..., aotCompiler=aotCompiler@entry=0x7fff28f51a00, error=error@entry=0x7fff28f51780, storeSourceLocation=<optimized out>, interface=<optimized out>, fileContents=<optimized out>)
          at /usr/src/debug/qt6-declarative/qtdeclarative/src/qmlcompiler/qqmljscompiler.cpp:273
      #11 0x00007c4e0099e95e in qCompileQmlFile
          (inputFileName=..., saveFunction=..., aotCompiler=aotCompiler@entry=0x7fff28f51a00, error=error@entry=0x7fff28f51780, storeSourceLocation=storeSourceLocation@entry=true, interface=0x5a9deaf4a010 <QV4::Compiler::defaultCodegenWarningInterface()::iface>, fileContents=0x0) at /usr/src/debug/qt6-declarative/qtdeclarative/src/qmlcompiler/qqmljscompiler.cpp:189
      #12 0x00005a9deaf40a6e in main (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/qt6-declarative/qtdeclarative/tools/qmlcachegen/qmlcachegen.cpp:305
      (gdb) f 2
      Downloading 169.97 K source file /usr/src/debug/qt6-declarative/qtdeclarative/src/qmlcompiler/qqmljscodegenerator.cpp
      #2  0x00007c4e009722d1 in QQmlJSCodeGenerator::generate_IteratorNext (this=0x7fff28f50500, value=<optimized out>, offset=34) at /usr/src/debug/qt6-declarative/qtdeclarative/src/qmlcompiler/qqmljscodegenerator.cpp:2676
      2676                + conversion(
      (gdb) p iteratorValue
      $1 = {d = 0x5a9e19d952a0}
      (gdb) p m_state.changedRegister()
      Cannot evaluate function – may be inlined
      (gdb) p m_state
      $2 = {<QQmlJSCompilePass::State> = {registers = {<QFlatMapValueCompare<int, QQmlJSCompilePass::VirtualRegister, std::less<int> >> = {<std::less<int>> = {<std::binary_function<int, int, bool>> ={{{}

      {<No data fields>}, <No data fields>}, <No data fields>}, c = }
      {{{}        keys = {<QListSpecialMethods<int>> = {<QListSpecialMethodsBase<int>> = {<No data fields>}

      {}}}, <No data fields>}, d = {d = 0x5a9e197a5560, ptr = 0x5a9e197a5574, size = 10,{}}}
              values = {<QListSpecialMethods<QQmlJSCompilePass::VirtualRegister>> = {<QListSpecialMethodsBase<QQmlJSCompilePass::VirtualRegister>> ={{{}

      {<No data fields>}, <No data fields>}, d = {d = 0x5a9e19d87900, ptr = 0x5a9e19d87930, size = 10}}}},{}}}
      {{{}    lookups = {<QFlatMapValueCompare<int, QQmlJSCompilePass::VirtualRegister, std::less<int> >> = {<std::less<int>> = {<std::binary_function<int, int, bool>> = {<No data fields>}

      {}}}, <No data fields>}, <No data fields>}, c = {
              keys = {<QListSpecialMethods<int>> = {<QListSpecialMethodsBase<int>> ={{{}

      {<No data fields>}, <No data fields>}, d = {d = 0x5a9e197a4ee0, ptr = 0x5a9e197a4ef0, size = 3}},{}}}
      {{{}        values = {<QListSpecialMethods<QQmlJSCompilePass::VirtualRegister>> = {<QListSpecialMethodsBase<QQmlJSCompilePass::VirtualRegister>> = {<No data fields>}

      {}}}, <No data fields>}, d = {d = 0x5a9e197a6af0, ptr = 0x5a9e197a6b00, size = 3}},{}}}
          m_readRegisters = {<QFlatMapValueCompare<int, QQmlJSCompilePass::VirtualRegister, std::less<int> >> = {<std::less<int>> = {<std::binary_function<int, int, bool>> ={{{}

      {<No data fields>}, <No data fields>}, <No data fields>}, c = }
      {{{}        keys = {<QListSpecialMethods<int>> = {<QListSpecialMethodsBase<int>> = {<No data fields>}

      {}}}, <No data fields>}, d = {d = 0x5a9e194959d0, ptr = 0x5a9e194959e0, size = 1,{}}}
              values = {<QListSpecialMethods<QQmlJSCompilePass::VirtualRegister>> = {<QListSpecialMethodsBase<QQmlJSCompilePass::VirtualRegister>> ={{{}

      {<No data fields>}

      {}}}, <No data fields>}, d = {d = 0x5a9e19d7df00, ptr = 0x5a9e19d7df10, size = 1}}, m_changedRegister ={}}}{{{}

      {       d = 0x5a9e194d9970}

      {}}}, m_changedRegisterIndex = 9, m_hasSideEffects = true, m_isRename = false, m_isShadowable = false}, accumulatorVariableIn = {d ={{{}

      {d = 0x5a9e19409660, ptr = 0x5a9e19409670 u"r2_4", size = 4}

      {}}}, static _empty = 0 u'\000'}, accumulatorVariableOut ={{{}{     d =

      {d = 0x0, ptr = 0x0, size = 0}

      {}}}, static _empty = 0 u'\000'{}}}
      (gdb) p qjsList
      $3 = {d ={{{}

      {d = 0x5a9e19d7aad0, ptr = 0x5a9e19d7aae0 u"QJSList(&r2_4List17, aotContext->engine)", size = 40}

      {}}}, static _empty = 0 u'\000'}{}

      Attachments

        Issue Links

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

          Activity

            People

              ulherman Ulf Hermann
              felixonmars Felix Yan
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Gerrit Reviews

                  There are no open Gerrit changes