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

moc crashes after 'Warning: Macro argument mismatch'

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • P2: Important
    • None
    • 5.4.0 Alpha
    • Build tools: moc
    • None
    • MSVC 2013 32 bit, debug build

    Description

      Following code will let moc crash:

      void f(int, int, int) {}
      
      #define PP_CAT(a, b) a##b
      
      #define pp(m, args) PP_CAT((m##args),)
      #define M1(A) pp(A, (2,1,5))
      
      void f()
      {
          pp(f, (2,1,5));
      }
      

      Output before crash:

      D:\dev\tmp\qtbug-29331\main.cpp(14): Warning: Macro argument mismatch.
      

      Crash:

      ASSERT failure in QList<T>::at: "index out of range", file d:\dev\qt\5.4\msvc-2013-32\qtbase\include\qtcore\../../../../src/qtbase/src/corelib/tools/qlist.h, line 483
      moc!qt_message_fatal(QtMsgType __formal = QtFatalMsg (0n3), class QMessageLogContext * context = 0x002ff2bc, class QString * message = 0x002ff298)+0xa1 [d:\dev\qt\5.4\src\qtbase\src\corelib\global\qlogging.cpp @ 1420]
      moc!QMessageLogger::fatal(char * msg = 0x0134fc48 "ASSERT failure in %s: "%s", file %s, line %d")+0x48 [d:\dev\qt\5.4\src\qtbase\src\corelib\global\qlogging.cpp @ 614]
      moc!qt_assert_x(char * where = 0x0133a41c "QList<T>::at", char * what = 0x0133a404 "index out of range", char * file = 0x0133a318 "d:\dev\qt\5.4\msvc-2013-32\qtbase\include\qtcore\../../../../src/qtbase/src/corelib/tools/qlist.h", int line = 0n483)+0x38 [d:\dev\qt\5.4\src\qtbase\src\corelib\global\qglobal.cpp @ 2824]
      moc!QList<QVector<Symbol> >::at(int i = 0n1)+0x43 [d:\dev\qt\5.4\src\qtbase\src\corelib\tools\qlist.h @ 483]
      moc!Preprocessor::macroExpandIdentifier(class Preprocessor * that = 0x002ff6b0, class SymbolStack * symbols = 0x002ff474, int lineNum = 0n14, class QByteArray * macroName = 0x002ff470)+0x6f3 [d:\dev\qt\5.4\src\qtbase\src\tools\moc\preprocessor.cpp @ 698]
      moc!Preprocessor::macroExpand(class Preprocessor * that = 0x002ff6b0, class QVector<Symbol> * toExpand = 0x002ff6b0, int * index = 0x002ff6b4, int lineNum = 0n14, bool one = true, class QSet<QByteArray> * excludeSymbols = 0x002ff540)+0xa6 [d:\dev\qt\5.4\src\qtbase\src\tools\moc\preprocessor.cpp @ 555]
      moc!Preprocessor::preprocess(class QByteArray * filename = 0x002ff728, class QVector<Symbol> * preprocessed = 0x002ff5f8)+0x90b [d:\dev\qt\5.4\src\qtbase\src\tools\moc\preprocessor.cpp @ 1128]
      moc!Preprocessor::preprocessed(class QByteArray * filename = 0x002ff728, class QIODevice * file = 0x002ff990)+0xaa [d:\dev\qt\5.4\src\qtbase\src\tools\moc\preprocessor.cpp @ 1206]
      moc!runMoc(int argc = 0n2, char ** argv = 0x006ce770)+0x1a2c [d:\dev\qt\5.4\src\qtbase\src\tools\moc\main.cpp @ 417]
      moc!main(int _argc = 0n2, char ** _argv = 0x006ce770)+0x10 [d:\dev\qt\5.4\src\qtbase\src\tools\moc\main.cpp @ 460]
      

      Attachments

        Issue Links

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

          Activity

            People

              Unassigned Unassigned
              kkohne Kai Köhne
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Gerrit Reviews

                  There are no open Gerrit changes