diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index 89e9e0a507a81a7312504e9600cebec5d04cb49f..27db60f0ab66d2ad4cdb27a0857bfb9f87be7f78 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -162,10 +162,11 @@ struct LldbOnly {}; struct Context { - Context() : qtVersion(0) {} + Context() : qtVersion(0), gccVersion(0) {} QByteArray nameSpace; int qtVersion; + int gccVersion; }; struct Name @@ -199,12 +200,16 @@ static QByteArray parentIName(const QByteArray &iname) struct ValueBase { - ValueBase() : hasPtrSuffix(false), isFloatValue(false), substituteNamespace(true), version(0) {} + ValueBase() + : hasPtrSuffix(false), isFloatValue(false), substituteNamespace(true), + qtVersion(0), minimalGccVersion(0) + {} bool hasPtrSuffix; bool isFloatValue; bool substituteNamespace; - int version; + int qtVersion; + int minimalGccVersion; }; struct Value : public ValueBase @@ -220,18 +225,24 @@ struct Value : public ValueBase return true; if (context.qtVersion) { - if (version == 4) { + if (qtVersion == 4) { if (context.qtVersion < 0x40000 || context.qtVersion >= 0x50000) { //QWARN("Qt 4 specific case skipped"); return true; } - } else if (version == 5) { + } else if (qtVersion == 5) { if (context.qtVersion < 0x50000 || context.qtVersion >= 0x60000) { //QWARN("Qt 5 specific case skipped"); return true; } } } + if (minimalGccVersion && context.gccVersion) { + if (minimalGccVersion >= context.gccVersion) { + //QWARN("Current GCC is too old for this test.") + return true; + } + } QString actualValue = actualValue0; if (actualValue == QLatin1String(" ")) actualValue.clear(); // FIXME: Remove later. @@ -257,6 +268,8 @@ struct Value : public ValueBase return actualValue == expectedValue; } + void setMinimalGccVersion(int version) { minimalGccVersion = version; } + QString value; }; @@ -274,12 +287,12 @@ struct FloatValue : Value struct Value4 : Value { - Value4(const QByteArray &value) : Value(value) { version = 4; } + Value4(const QByteArray &value) : Value(value) { qtVersion = 4; } }; struct Value5 : Value { - Value5(const QByteArray &value) : Value(value) { version = 5; } + Value5(const QByteArray &value) : Value(value) { qtVersion = 5; } }; struct UnsubstitutedValue : Value @@ -289,19 +302,19 @@ struct UnsubstitutedValue : Value struct Type { - Type() : version(0) {} - Type(const char *str) : type(str), version(0) {} - Type(const QByteArray &ba) : type(ba), version(0) {} + Type() : qtVersion(0) {} + Type(const char *str) : type(str), qtVersion(0) {} + Type(const QByteArray &ba) : type(ba), qtVersion(0) {} bool matches(const QByteArray &actualType0, const Context &context) const { if (context.qtVersion) { - if (version == 4) { + if (qtVersion == 4) { if (context.qtVersion < 0x40000 || context.qtVersion >= 0x50000) { //QWARN("Qt 4 specific case skipped"); return true; } - } else if (version == 5) { + } else if (qtVersion == 5) { if (context.qtVersion < 0x50000 || context.qtVersion >= 0x60000) { //QWARN("Qt 5 specific case skipped"); return true; @@ -319,17 +332,17 @@ struct Type return actualType == expectedType; } QByteArray type; - int version; + int qtVersion; }; struct Type4 : Type { - Type4(const QByteArray &ba) : Type(ba) { version = 4; } + Type4(const QByteArray &ba) : Type(ba) { qtVersion = 4; } }; struct Type5 : Type { - Type5(const QByteArray &ba) : Type(ba) { version = 5; } + Type5(const QByteArray &ba) : Type(ba) { qtVersion = 5; } }; enum DebuggerEngine @@ -825,11 +838,16 @@ void tst_Dumpers::dumper() "\n\nint main(int argc, char *argv[])" "\n{" "\n int qtversion = " + (data.useQt ? "QT_VERSION" : "0") + ";" + "\n#ifdef __GNUC__" + "\n int gccversion = 0x10000 * __GNUC__ + 0x100 * __GNUC_MINOR__;" + "\n#else" + "\n int gccversion = 0;" + "\n#endif" "\n" + (data.useQHash ? "\n#if QT_VERSION >= 0x050000" "\nqt_qhash_seed.testAndSetRelaxed(-1, 0);" "\n#endif\n" : "") + - "\n unused(&argc, &argv, &qtversion);\n" + "\n unused(&argc, &argv, &qtversion, &gccversion);\n" "\n" + data.code + "\n breakHere();" "\n return 0;" @@ -1049,6 +1067,8 @@ void tst_Dumpers::dumper() dummy.name = QLatin1String(child["name"].data()); if (dummy.iname == "local.qtversion") context.qtVersion = child["value"].toInt(); + else if (dummy.iname == "local.gccversion") + context.gccVersion = child["value"].toInt(); else parseWatchData(expandedINames, dummy, child, &list); } @@ -1097,7 +1117,7 @@ void tst_Dumpers::dumper() qDebug() << "SOME TESTS NOT EXECUTED: "; foreach (const Check &check, data.checks) { qDebug() << " TEST NOT FOUND FOR INAME: " << check.iname; - if (!fail && check.expectedValue.version != 0) + if (!fail && check.expectedValue.qtVersion != 0) fail = true; } qDebug() << "SEEN INAMES " << seenINames; @@ -1110,6 +1130,8 @@ void tst_Dumpers::dumper() qDebug() << "CONTENTS : " << contents; qDebug() << "Qt VERSION : " << qPrintable(QString::number(context.qtVersion, 16)); + qDebug() << "GCC VERSION : " + << qPrintable(QString::number(context.gccVersion, 16)); qDebug() << "BUILD DIR : " << qPrintable(t->buildPath); } QVERIFY(ok);