diff options
| author | Olivier Goffart <ogoffart@woboq.com> | 2016-09-10 14:23:39 +0200 | 
|---|---|---|
| committer | Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com> | 2016-09-16 07:47:29 +0000 | 
| commit | 97710f429fb06914b5cb86fdd3aa333eb8a90dff (patch) | |
| tree | f1c78e15ae2c5c15539d6bf0c3371a8a6ec2019e | |
| parent | 001efe14f2a0af25d10179fd6c06e4a7113ec83d (diff) | |
| download | qtbase-97710f429fb06914b5cb86fdd3aa333eb8a90dff.tar.gz | |
moc: Fix asserts on moc on empty token preceding ## operator
Regression introduced in c32ef0a725c7ac9d8a9ab053407389ef2fddc64e
The expansion vector can be empty, in that case it is not allowed to
call constLast()
Task-number: QTBUG-55853
Change-Id: I47aa8eb7507ee91662215df42b4a66eebaa32bb5
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@theqtcompany.com>
| -rw-r--r-- | src/tools/moc/preprocessor.cpp | 6 | ||||
| -rw-r--r-- | tests/auto/tools/moc/parse-defines.h | 3 | ||||
| -rw-r--r-- | tests/auto/tools/moc/tst_moc.cpp | 3 | 
3 files changed, 9 insertions, 3 deletions
diff --git a/src/tools/moc/preprocessor.cpp b/src/tools/moc/preprocessor.cpp index 5ce28d931b..11bf8d7937 100644 --- a/src/tools/moc/preprocessor.cpp +++ b/src/tools/moc/preprocessor.cpp @@ -696,9 +696,9 @@ Symbols Preprocessor::macroExpandIdentifier(Preprocessor *that, SymbolStack &sym                      next = arg.at(0);                  } -                Symbol last = expansion.constLast(); -                if (!expansion.isEmpty() && last.token == s.token && last.token != STRING_LITERAL) { -                    expansion.pop_back(); +                if (!expansion.isEmpty() && expansion.constLast().token == s.token +                    && expansion.constLast().token != STRING_LITERAL) { +                    Symbol last = expansion.takeLast();                      QByteArray lexem = last.lexem() + next.lexem();                      expansion += Symbol(lineNum, last.token, lexem); diff --git a/tests/auto/tools/moc/parse-defines.h b/tests/auto/tools/moc/parse-defines.h index 9fb5da4b07..6100bf67ad 100644 --- a/tests/auto/tools/moc/parse-defines.h +++ b/tests/auto/tools/moc/parse-defines.h @@ -139,6 +139,9 @@ public slots:  signals:      DEFINE_CMDLINE_SIGNAL; +#define QTBUG55853(X) PD_DEFINE1(X, signalQTBUG55853) +#define PD_EMPTY /* empty */ +    void QTBUG55853(PD_EMPTY)();  };  #undef QString diff --git a/tests/auto/tools/moc/tst_moc.cpp b/tests/auto/tools/moc/tst_moc.cpp index a3648c95b6..601b1bb36b 100644 --- a/tests/auto/tools/moc/tst_moc.cpp +++ b/tests/auto/tools/moc/tst_moc.cpp @@ -3397,6 +3397,9 @@ void tst_Moc::parseDefines()      index = mo->indexOfSignal("cmdlineSignal(QMap<int,int>)");      QVERIFY(index != -1); + +    index = mo->indexOfSignal("signalQTBUG55853()"); +    QVERIFY(index != -1);  }  void tst_Moc::preprocessorOnly()  | 
