summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2019-11-18 18:43:24 +0100
committerhjk <hjk@qt.io>2019-11-20 11:31:57 +0000
commite8fe082bf95005e3d5b79d433c36df88b32433f0 (patch)
treeb9429b961c43b1121e3ccef65ff49a339dd8bf7a
parent15b2765dff1cbba30b41da2bc48cd15bfce7f2a7 (diff)
downloadqt-creator-e8fe082bf95005e3d5b79d433c36df88b32433f0.tar.gz
Debugger: Swap BREAK and unused() in most dumper test
To avoid optimizing. Change-Id: I43b39746811a822a0b5677920f9dc2f149291bc0 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
-rw-r--r--tests/auto/debugger/tst_dumpers.cpp1438
1 files changed, 908 insertions, 530 deletions
diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp
index 76c67e69d1..be539035e5 100644
--- a/tests/auto/debugger/tst_dumpers.cpp
+++ b/tests/auto/debugger/tst_dumpers.cpp
@@ -707,8 +707,8 @@ class Data
public:
Data() {}
- Data(const QString &includes, const QString &code)
- : includes(includes), code(code)
+ Data(const QString &includes, const QString &code, const QString &unused)
+ : includes(includes), code(code), unused(unused)
{}
const Data &operator+(const Check &check) const
@@ -974,6 +974,7 @@ public:
mutable QString profileExtra;
mutable QString includes;
mutable QString code;
+ mutable QString unused;
mutable QList<Check> checks;
mutable QList<CheckSet> checksets;
@@ -1326,6 +1327,11 @@ void tst_Dumpers::dumper()
QFile source(t->buildPath + '/' + data.mainFile);
QVERIFY(source.open(QIODevice::ReadWrite));
+
+ QString unused;
+ if (!data.unused.isEmpty())
+ unused = "unused(" + data.unused + ");";
+
QString fullCode = QString() +
"\n\n#ifdef _WIN32" + (data.useQt ?
"\n#include <qt_windows.h>" :
@@ -1372,28 +1378,29 @@ void tst_Dumpers::dumper()
"\n#endif" : "") +
"\n\nint main(int argc, char *argv[])"
"\n{"
- "\n unused(&argc, &argv);\n"
- "\n int skipall = 0; unused(&skipall);\n"
- "\n int qtversion = " + (data.useQt ? "QT_VERSION" : "0") + "; unused(&qtversion);"
+ "\n int skipall = 0;"
+ "\n int qtversion = " + (data.useQt ? "QT_VERSION" : "0") + ";"
"\n#ifdef __GNUC__"
- "\n int gccversion = 10000 * __GNUC__ + 100 * __GNUC_MINOR__; unused(&gccversion);"
+ "\n int gccversion = 10000 * __GNUC__ + 100 * __GNUC_MINOR__;"
"\n#else"
- "\n int gccversion = 0; unused(&gccversion);"
+ "\n int gccversion = 0;"
"\n#endif"
"\n#ifdef __clang__"
- "\n int clangversion = 10000 * __clang_major__ + 100 * __clang_minor__; unused(&clangversion);"
+ "\n int clangversion = 10000 * __clang_major__ + 100 * __clang_minor__;"
"\n gccversion = 0;"
"\n#else"
- "\n int clangversion = 0; unused(&clangversion);"
+ "\n int clangversion = 0;"
"\n#endif"
"\n#ifdef BOOST_VERSION"
- "\n int boostversion = BOOST_VERSION; unused(&boostversion);"
+ "\n int boostversion = BOOST_VERSION;"
"\n#else"
- "\n int boostversion = 0; unused(&boostversion);"
+ "\n int boostversion = 0;"
"\n#endif"
"\n" + (data.useQHash ? "initHashSeed();" : "") +
"\n" + data.code +
- "\n BREAK;"
+ "\n BREAK;" +
+ "\n" + unused +
+ "\n unused(&argc, &argv, &skipall, &qtversion, &gccversion, &clangversion, &boostversion);"
"\n return 0;"
"\n}\n";
if (!data.allCode.isEmpty())
@@ -1898,15 +1905,17 @@ void tst_Dumpers::dumper_data()
" } // namespace nsB\n"
" } // namespace nsA\n";
+
QTest::newRow("QBitArray")
- << Data("#include <QBitArray>\n",
+ << Data("#include <QBitArray>",
+
"QBitArray ba0;\n"
- "unused(&ba0);\n"
"QBitArray ba1(20, true);\n"
"ba1.setBit(1, false);\n"
"ba1.setBit(3, false);\n"
- "ba1.setBit(16, false);\n"
- "unused(&ba1);\n")
+ "ba1.setBit(16, false);",
+
+ "&ba0, &ba1")
+ CoreProfile()
@@ -1921,6 +1930,7 @@ void tst_Dumpers::dumper_data()
+ Check("ba1.16", "[16]", "0", "bool")
+ Check("ba1.17", "[17]", "1", "bool");
+
QTest::newRow("QByteArray")
<< Data("#include <QByteArray>\n"
"#include <QString>\n"
@@ -1948,12 +1958,13 @@ void tst_Dumpers::dumper_data()
"char data[] = { 'H', 'e', 'l', 'l', 'o' };\n"
"QByteArray ba4 = QByteArray::fromRawData(data, 4);\n"
- "QByteArray ba5 = QByteArray::fromRawData(data + 1, 4);\n\n"
+ "QByteArray ba5 = QByteArray::fromRawData(data + 1, 4);",
- "unused(&buf1, &buf2, &buf3);\n"
- "unused(&ba0, &ba1, &ba2, &ba4, &ba5, &s, &ss);\n")
+ "&ba0, &ba1, &ba2, &s, &ss, &str1, &str2, &str3, &data, &ba4, &ba5, "
+ "&buf1, &buf2, &buf3, &ba4, &ba5")
+ CoreProfile()
+
+ Check("ba0", "ba0", "\"\"", "@QByteArray")
+ Check("ba1", Value(QString("\"Hello\"World")
@@ -1977,10 +1988,12 @@ void tst_Dumpers::dumper_data()
QTest::newRow("QChar")
- << Data("#include <QString>\n",
+ << Data("#include <QString>",
+
"QString s = QLatin1String(\"x\");\n"
- "QChar c = s.at(0);\n"
- "unused(&c);\n")
+ "QChar c = s.at(0);",
+
+ "&s, &c")
+ CoreProfile()
@@ -1992,28 +2005,33 @@ void tst_Dumpers::dumper_data()
"enum Foo { a = 0x1, b = 0x2 };\n"
"Q_DECLARE_FLAGS(FooFlags, Foo)\n"
"Q_DECLARE_OPERATORS_FOR_FLAGS(FooFlags)\n",
+
"FooFlags f1(a);\n"
- "FooFlags f2(a | b);\n")
+ "FooFlags f2(a | b);\n",
+
+ "&f1, &f2")
+
+ CoreProfile()
+
+ Check("f1", "a (1)", TypeDef("@QFlags<enum Foo>", "FooFlags")) % CdbEngine
+ Check("f1", "a (0x0001)", "FooFlags") % NoCdbEngine
+ Check("f2", "(a | b) (0x0003)", "FooFlags") % GdbEngine;
+
QTest::newRow("QDateTime")
- << Data("#include <QDateTime>\n",
+ << Data("#include <QDateTime>",
"QDate d0;\n"
"QDate d1;\n"
"d1.setDate(1980, 1, 1);\n"
- "unused(&d0, &d1);\n"
"QTime t0;\n"
"QTime t1(13, 15, 32);\n"
- "unused(&t0, &t1);\n\n"
"QDateTime dt0;\n"
- "QDateTime dt1(QDate(1980, 1, 1), QTime(13, 15, 32), Qt::UTC);\n"
- "unused(&dt0, &dt1);\n")
+ "QDateTime dt1(QDate(1980, 1, 1), QTime(13, 15, 32), Qt::UTC);",
+
+ "&d0, &d1, &t0, &t1, &dt0, &dt1")
+ CoreProfile()
@@ -2047,6 +2065,7 @@ void tst_Dumpers::dumper_data()
//+ Check("dt1.toUTC",
// Value5("Tue Jan 1 13:15:32 1980 GMT"), "@QDateTime") % Optional();
+
#ifdef Q_OS_WIN
QString tempDir = "C:/Program Files";
#else
@@ -2056,11 +2075,13 @@ void tst_Dumpers::dumper_data()
QTest::newRow("QDir")
<< Data("#include <QDir>\n",
+
"QDir dir(" + quoted(tempDir) + ");\n"
"QString s = dir.absolutePath();\n"
"QFileInfoList fil = dir.entryInfoList();\n"
- "QFileInfo fi = fil.first();\n"
- "unused(&dir, &s, &fi);\n")
+ "QFileInfo fi = fil.first();",
+
+ "&dir, &s, &fi")
+ CoreProfile()
+ QtVersion(0x50300)
@@ -2078,22 +2099,32 @@ void tst_Dumpers::dumper_data()
#ifdef Q_OS_WIN
<< Data("#include <QFile>\n"
"#include <QFileInfo>\n",
+
"QFile file(\"C:\\\\Program Files\\\\t\");\n"
"file.setObjectName(\"A QFile instance\");\n"
"QFileInfo fi(\"C:\\\\Program Files\\\\tt\");\n"
- "QString s = fi.absoluteFilePath();\n")
+ "QString s = fi.absoluteFilePath();",
+
+ "&s")
+
+ CoreProfile()
+
+ Check("fi", "\"C:/Program Files/tt\"", "@QFileInfo")
+ Check("file", "\"C:\\Program Files\\t\"", "@QFile")
+ Check("s", "\"C:/Program Files/tt\"", "@QString");
#else
<< Data("#include <QFile>\n"
"#include <QFileInfo>\n",
+
"QFile file(\"/tmp/t\");\n"
"file.setObjectName(\"A QFile instance\");\n"
"QFileInfo fi(\"/tmp/tt\");\n"
- "QString s = fi.absoluteFilePath();\n")
+ "QString s = fi.absoluteFilePath();\n",
+
+ "&s")
+
+ CoreProfile()
+
+ Check("fi", "\"/tmp/tt\"", "@QFileInfo")
+ Check("file", "\"/tmp/t\"", "@QFile")
+ Check("s", "\"/tmp/tt\"", "@QString");
@@ -2102,7 +2133,8 @@ void tst_Dumpers::dumper_data()
QTest::newRow("QFixed")
<< Data("#include <private/qfixed_p.h>\n",
- "QFixed f(1234);\n")
+ "QFixed f(1234);",
+ "&f")
+ Qt5
+ GuiPrivateProfile()
+ Check("f", "78976/64 = 1234.0", "@QFixed");
@@ -2150,7 +2182,9 @@ void tst_Dumpers::dumper_data()
"h8[33] = 33.0;\n"
"Hash::iterator it1 = h8.begin();\n"
"Hash::iterator it2 = it1; ++it2;\n"
- "Hash::iterator it3 = it2; ++it3;\n\n")
+ "Hash::iterator it3 = it2; ++it3;",
+
+ "&it1, &it2, &it3")
+ CoreProfile()
@@ -2209,6 +2243,7 @@ void tst_Dumpers::dumper_data()
QTest::newRow("QHostAddress")
<< Data("#include <QHostAddress>\n",
+
"QHostAddress ha1(129u * 256u * 256u * 256u + 130u);\n\n"
"QHostAddress ha2;\n"
"ha2.setAddress(\"127.0.0.1\");\n\n"
@@ -2229,8 +2264,9 @@ void tst_Dumpers::dumper_data()
"addr.c[13] = 0;\n"
"addr.c[14] = 0;\n"
"addr.c[15] = 0;\n"
- "QHostAddress ha3(addr);\n"
- "unused(&ha1, &ha2, &ha3);\n")
+ "QHostAddress ha3(addr);",
+
+ "&ha1, &ha2, &ha3")
+ NetworkProfile()
@@ -2252,8 +2288,8 @@ void tst_Dumpers::dumper_data()
"pain.begin(&im);\n"
"pain.drawLine(2, 2, 130, 130);\n"
"pain.end();\n"
- "QPixmap pm = QPixmap::fromImage(im);\n"
- "unused(&app, &pm);\n")
+ "QPixmap pm = QPixmap::fromImage(im);",
+ "&app, &pm")
+ GuiProfile()
@@ -2267,39 +2303,34 @@ void tst_Dumpers::dumper_data()
"#include <string>\n"
+ fooData,
- "QLinkedList<float> l0;\n"
- "unused(&l0);\n\n"
+ "QLinkedList<float> l0;\n\n"
"QLinkedList<int> l1;\n"
"l1.append(101);\n"
- "l1.append(102);\n"
- "unused(&l1);\n\n"
+ "l1.append(102);\n\n"
"QLinkedList<uint> l2;\n"
"l2.append(103);\n"
- "l2.append(104);\n"
- "unused(&l2);\n\n"
+ "l2.append(104);\n\n"
"QLinkedList<Foo *> l3;\n"
"l3.append(new Foo(1));\n"
"l3.append(0);\n"
- "l3.append(new Foo(3));\n"
- "unused(&l3);\n\n"
+ "l3.append(new Foo(3));\n\n"
"QLinkedList<qulonglong> l4;\n"
"l4.append(42);\n"
- "l4.append(43);\n"
- "unused(&l4);\n\n"
+ "l4.append(43);\n\n"
"QLinkedList<Foo> l5;\n"
"l5.append(Foo(1));\n"
- "l5.append(Foo(2));\n"
- "unused(&l5);\n\n"
+ "l5.append(Foo(2));\n\n"
"QLinkedList<std::string> l6;\n"
"l6.push_back(\"aa\");\n"
- "l6.push_back(\"bb\");\n"
- "unused(&l6);\n\n")
+ "l6.push_back(\"bb\");\n\n",
+
+ "&l1, &l2, &l3, &l4, &l5, &l6")
+ CoreProfile()
@@ -2344,79 +2375,69 @@ void tst_Dumpers::dumper_data()
"#include <string>\n",
"QList<int> l0;\n"
- "unused(&l0);\n\n"
"QList<int> l1;\n"
"for (int i = 0; i < 10; ++i)\n"
" l1.push_back(i);\n"
- "unused(&l1);\n\n"
"QList<int> l2;\n"
"l2.append(0);\n"
"l2.append(1);\n"
"l2.append(2);\n"
"l2.takeFirst();\n"
- "unused(&l2);\n\n"
"QList<QString> l3;\n"
"l3.append(\"0\");\n"
"l3.append(\"1\");\n"
"l3.append(\"2\");\n"
"l3.takeFirst();\n"
- "unused(&l3);\n\n"
"QStringList l4;\n"
"l4.append(\"0\");\n"
"l4.append(\"1\");\n"
"l4.append(\"2\");\n"
"l4.takeFirst();\n"
- "unused(&l4);\n\n"
"QList<int *> l5;\n"
"l5.append(new int(1));\n"
"l5.append(new int(2));\n"
"l5.append(0);\n"
- "unused(&l5);\n\n"
"QList<int *> l6;\n"
- "unused(&l6);\n\n"
"QList<uint> l7;\n"
"l7.append(101);\n"
"l7.append(102);\n"
"l7.append(102);\n"
- "unused(&l7);\n\n"
"QStringList sl;\n"
"sl.append(\"aaa\");\n"
"QList<QStringList> l8;\n"
"l8.append(sl);\n"
"l8.append(sl);\n"
- "unused(&l8, &sl);\n\n"
"QList<ushort> l9;\n"
"l9.append(101);\n"
"l9.append(102);\n"
"l9.append(102);\n"
- "unused(&l9);\n\n"
"QList<QChar> l10;\n"
"l10.append(QChar('a'));\n"
"l10.append(QChar('b'));\n"
"l10.append(QChar('c'));\n"
- "unused(&l10);\n\n"
"QList<qulonglong> l11;\n"
"l11.append(100);\n"
"l11.append(101);\n"
"l11.append(102);\n"
- "unused(&l11);\n\n"
"QList<std::string> l12, l13;\n"
"l13.push_back(\"aa\");\n"
"l13.push_back(\"bb\");\n"
"l13.push_back(\"cc\");\n"
- "l13.push_back(\"dd\");")
+ "l13.push_back(\"dd\");",
+
+ "&l1, &l2, &l3, &l4, &l5, &l6, &l7, &l8, &l9, &l10, &l11, &l12, &l13, &sl")
+ CoreProfile()
@@ -2486,7 +2507,9 @@ void tst_Dumpers::dumper_data()
"Reverse rend(l.begin());\n"
"QList<int> r;\n"
"while (rit != rend)\n"
- " r.append(*rit++);\n")
+ " r.append(*rit++);\n",
+
+ "&r, &l0, &l1, &l")
+ CoreProfile()
@@ -2509,14 +2532,18 @@ void tst_Dumpers::dumper_data()
QTest::newRow("QLocale")
<< Data("#include <QLocale>\n",
+
"QLocale loc0;\n"
"QLocale loc = QLocale::system();\n"
"QLocale::MeasurementSystem m = loc.measurementSystem();\n"
"QLocale loc1(\"en_US\");\n"
- "QLocale::MeasurementSystem m1 = loc1.measurementSystem();\n"
- "unused(&loc0, &loc, &m, &loc1, &m1);\n")
+ "QLocale::MeasurementSystem m1 = loc1.measurementSystem();",
+
+ "&loc0, &loc, &m, &loc1, &m1")
+
+ CoreProfile()
+ NoCdbEngine
+
+ CheckType("loc", "@QLocale")
+ CheckType("m", "@QLocale::MeasurementSystem")
+ Check("loc1", "\"en_US\"", "@QLocale")
@@ -2542,7 +2569,6 @@ void tst_Dumpers::dumper_data()
"#include <QStringList>\n" + fooData + nsData,
"QMap<uint, QStringList> m0;\n"
- "unused(&m0);\n\n"
"QMap<uint, QStringList> m1;\n"
"m1[11] = QStringList() << \"11\";\n"
@@ -2581,7 +2607,9 @@ void tst_Dumpers::dumper_data()
"m8[\"foo\"] = x;\n"
"m8[\"bar\"] = x;\n"
"m8[\"1\"] = x;\n"
- "m8[\"2\"] = x;\n\n")
+ "m8[\"2\"] = x;\n\n",
+
+ "&m0, &m1, &m2, &m3, &m4, &m5, &m6, &m7, &m8")
+ CoreProfile()
@@ -2648,7 +2676,6 @@ void tst_Dumpers::dumper_data()
"#include <QString>\n" + fooData,
"QMultiMap<int, int> m0;\n"
- "unused(&m0);\n\n"
"QMultiMap<uint, float> m1;\n"
"m1.insert(11, 11.0);\n"
@@ -2674,7 +2701,9 @@ void tst_Dumpers::dumper_data()
"m5.insert(\"Hallo\", QPointer<QObject>(&ob));\n"
"m5.insert(\"Welt\", QPointer<QObject>(&ob));\n"
"m5.insert(\".\", QPointer<QObject>(&ob));\n"
- "m5.insert(\".\", QPointer<QObject>(&ob));\n\n")
+ "m5.insert(\".\", QPointer<QObject>(&ob));",
+
+ "&m0, &m1, &m2, &m3, &m4, &m5, &ob")
+ CoreProfile()
@@ -2709,13 +2738,16 @@ void tst_Dumpers::dumper_data()
QTest::newRow("QObject1")
<< Data("#include <QObject>\n",
+
"QObject parent;\n"
"parent.setObjectName(\"A Parent\");\n"
"QObject child(&parent);\n"
"child.setObjectName(\"A Child\");\n"
"QObject::connect(&child, SIGNAL(destroyed()), &parent, SLOT(deleteLater()));\n"
"QObject::disconnect(&child, SIGNAL(destroyed()), &parent, SLOT(deleteLater()));\n"
- "child.setObjectName(\"A renamed Child\");\n")
+ "child.setObjectName(\"A renamed Child\");",
+
+ "&parent, &child")
+ CoreProfile()
@@ -2758,8 +2790,8 @@ void tst_Dumpers::dumper_data()
" };\n"
"} // namespace Bar\n"
"#include <main.moc>\n",
- ""
- "QApplication app(argc, argv); unused(&app);\n"
+
+ "QApplication app(argc, argv);\n"
"Bar::TestObject test;\n"
"test.setObjectName(\"Name\");\n"
"test.setMyProp1(\"Hello\");\n"
@@ -2770,24 +2802,28 @@ void tst_Dumpers::dumper_data()
"s += QString::fromLatin1(test.myProp2());\n"
"\n"
"const QMetaObject *mo = test.metaObject();\n"
- "QMetaMethod mm0; unused(&mm0); \n"
+ "QMetaMethod mm0;\n"
"const QMetaObject smo = test.staticMetaObject;\n"
- "QMetaMethod mm = mo->method(0); unused(&mm);\n"
+ "QMetaMethod mm = mo->method(0);\n"
"\n"
"QMetaEnum me0;\n"
- "QMetaEnum me = mo->enumerator(0); unused(&me);\n"
+ "QMetaEnum me = mo->enumerator(0);\n"
"\n"
"QMetaProperty mp0;\n"
- "QMetaProperty mp = mo->property(0); unused(&mp);\n"
+ "QMetaProperty mp = mo->property(0);\n"
"\n"
"QMetaClassInfo mci0;\n"
- "QMetaClassInfo mci = mo->classInfo(0); unused(&mci);\n"
+ "QMetaClassInfo mci = mo->classInfo(0);\n"
"\n"
"int n = mo->methodCount();\n"
"QVector<QMetaMethod> v(n);\n"
"for (int i = 0; i < n; ++i)\n"
- " v[i] = mo->method(i);\n")
+ " v[i] = mo->method(i);\n",
+
+ "&app, &mm0, &mm, &me, &mp, &mci, &smo")
+
+ GuiProfile()
+
+ Check("s", "\"HelloWorld\"", "@QString")
+ Check("test", "\"Name\"", "Bar::TestObject")
+ Check("test.[properties]", "<6 items>", "")
@@ -2808,6 +2844,7 @@ void tst_Dumpers::dumper_data()
+ Check("mm.handle", "14", TypeDef("unsigned int", "uint"))
+ Check("mp", "objectName", "@QMetaProperty");
+
QTest::newRow("QObject3")
<< Data("#include <QWidget>\n"
"#include <QList>\n"
@@ -2832,8 +2869,8 @@ void tst_Dumpers::dumper_data()
"obs.append(&ob1);\n"
"obs.append(0);\n"
"obs.append(&app);\n"
- "ob2.setObjectName(\"A Subobject\");\n"
- "unused(&ob, &ob1, &ob2);\n")
+ "ob2.setObjectName(\"A Subobject\");",
+ "&ob, &ob1, &ob2")
+ GuiProfile()
@@ -2951,8 +2988,12 @@ void tst_Dumpers::dumper_data()
" d->m_extraZ = z;\n"
" }\n"
"#include \"main.moc\"\n",
+
"DerivedObject ob;\n"
- "ob.setX(26);\n")
+ "ob.setX(26);",
+
+ "&ob")
+
+ CoreProfile()
+ CorePrivateProfile();
// FIXME:
@@ -2962,13 +3003,18 @@ void tst_Dumpers::dumper_data()
QTest::newRow("QRegExp")
<< Data("#include <QRegExp>\n"
"#include <QStringList>\n",
+
"QRegExp re(QString(\"a(.*)b(.*)c\"));\n"
"QString str1 = \"a1121b344c\";\n"
"QString str2 = \"Xa1121b344c\";\n"
- "int pos1 = re.indexIn(str1); unused(&pos1);\n"
- "int pos2 = re.indexIn(str2); unused(&pos2);\n"
- "QStringList caps = re.capturedTexts(); unused(&caps);\n")
+ "int pos1 = re.indexIn(str1);\n"
+ "int pos2 = re.indexIn(str2);\n"
+ "QStringList caps = re.capturedTexts();",
+
+ "&pos1, &pos2, &caps")
+
+ CoreProfile()
+
+ Check("re", "\"a(.*)b(.*)c\"", "@QRegExp")
+ Check("re.captures.0", "[0]", "\"a1121b344c\"", "@QString")
+ Check("re.captures.1", "[1]", "\"1121\"", "@QString")
@@ -2989,25 +3035,23 @@ void tst_Dumpers::dumper_data()
"#include <QString> // Dummy for namespace\n",
"QString dummy;\n"
- "unused(&dummy);\n"
"QRect rect0, rect;\n"
"rect = QRect(100, 100, 200, 200);\n"
"QRectF rectf0, rectf;\n"
"rectf = QRectF(100.25, 100.25, 200.5, 200.5);\n"
- "unused(&rect0, &rect);\n\n"
"QPoint p0, p;\n"
"p = QPoint(100, 200);\n"
"QPointF pf0, pf;\n"
"pf = QPointF(100.5, 200.5);\n"
- "unused(&p0, &p);\n"
"QSize s0, s;\n"
"QSizeF sf0, sf;\n"
"sf = QSizeF(100.5, 200.5);\n"
- "s = QSize(100, 200);\n"
- "unused(&s0, &s);\n")
+ "s = QSize(100, 200);",
+
+ "&s0, &s, &dummy, &rect0, &rect, &p0, &p")
+ CoreProfile()
@@ -3036,8 +3080,8 @@ void tst_Dumpers::dumper_data()
"region1 = region;\n"
"QVector<QRect> rects = region1.rects(); // Warm up internal cache.\n"
"region += QRect(300, 300, 400, 500);\n"
- "region2 = region;\n"
- "unused(&region0, &region1, &region2, &rects);\n")
+ "region2 = region;",
+ "&region0, &region1, &region2, &rects")
+ GuiProfile()
@@ -3061,11 +3105,15 @@ void tst_Dumpers::dumper_data()
<< Data("#include <QSettings>\n"
"#include <QCoreApplication>\n"
"#include <QVariant>\n",
+
"QCoreApplication app(argc, argv);\n"
"QSettings settings(\"/tmp/test.ini\", QSettings::IniFormat);\n"
- "QVariant value = settings.value(\"item1\", \"\").toString();\n"
- "unused(&value);\n")
+ "QVariant value = settings.value(\"item1\", \"\").toString();",
+
+ "&value, &app, &settings")
+
+ CoreProfile()
+
+ Check("settings", "", "@QSettings")
//+ Check("settings.@1", "[@QObject]", "", "@QObject")
+ Check("value", "\"\"", "@QVariant (QString)");
@@ -3095,9 +3143,12 @@ void tst_Dumpers::dumper_data()
"QPointer<QObject> ptr(&ob);\n"
"s3.insert(ptr);\n"
"s3.insert(ptr);\n"
- "s3.insert(ptr);\n")
+ "s3.insert(ptr);\n",
+
+ "&s1, &s2, &s3")
+ CoreProfile()
+
+ Check("s1", "<2 items>", "@QSet<int>")
+ Check("s1.0", "[0]", "22", "int")
+ Check("s1.1", "[1]", "11", "int")
@@ -3148,6 +3199,7 @@ void tst_Dumpers::dumper_data()
" QSharedDataPointer<EmployeeData> d;\n"
" };\n";
+
QTest::newRow("QAtomicPointer")
<< Data("#include <QAtomicPointer>\n"
"#include <QStringList>\n\n"
@@ -3163,13 +3215,17 @@ void tst_Dumpers::dumper_data()
"};\n\n"
"typedef Pointer<SomeStruct> SomeStructPointer;\n\n",
- "SomeStruct *s = new SomeStruct; unused(s);\n"
- "SomeStructPointer p(s); unused(p);\n"
- "Pointer<SomeStruct> pp(s); unused(pp);\n"
- "QAtomicPointer<SomeStruct> ppp(s); unused(ppp);\n")
+ "SomeStruct *s = new SomeStruct;\n"
+ "SomeStructPointer p(s);\n"
+ "Pointer<SomeStruct> pp(s);\n"
+ "QAtomicPointer<SomeStruct> ppp(s);",
+
+ "&s, &p, &pp, &ppp")
+
+ CoreProfile()
+ Cxx11Profile()
+ MsvcVersion(1900)
+
+ Check("p.@1.a", "1", "int")
+ Check("p.@1.e", "<2 items>", "@QList<@QString>")
+ Check("pp.@1.a", "1", "int")
@@ -3180,9 +3236,11 @@ void tst_Dumpers::dumper_data()
<< Data("#include <QPointer>\n"
"#include <QTimer>\n",
- "QTimer timer; unused(&timer);\n"
- "QPointer<QTimer> ptr0; unused(&ptr0);\n"
- "QPointer<QTimer> ptr1(&timer); unused(&ptr1);\n\n")
+ "QTimer timer;\n"
+ "QPointer<QTimer> ptr0;\n"
+ "QPointer<QTimer> ptr1(&timer);",
+
+ "&timer, &ptr0, &ptr1")
+ CoreProfile()
@@ -3194,11 +3252,13 @@ void tst_Dumpers::dumper_data()
<< Data("#include <QScopedPointer>\n"
"#include <QString>\n",
- "QScopedPointer<int> ptr10; unused(&ptr10);\n"
- "QScopedPointer<int> ptr11(new int(32)); unused(&ptr11);\n\n"
+ "QScopedPointer<int> ptr10;\n"
+ "QScopedPointer<int> ptr11(new int(32));\n\n"
+
+ "QScopedPointer<QString> ptr20;\n"
+ "QScopedPointer<QString> ptr21(new QString(\"ABC\"));",
- "QScopedPointer<QString> ptr20; unused(&ptr20);\n"
- "QScopedPointer<QString> ptr21(new QString(\"ABC\")); unused(&ptr21);\n\n")
+ "&ptr10, &ptr11, &ptr20, &ptr21")
+ CoreProfile()
@@ -3215,31 +3275,32 @@ void tst_Dumpers::dumper_data()
"QSharedPointer<int> ptr10;\n"
"QSharedPointer<int> ptr11 = ptr10;\n"
- "QSharedPointer<int> ptr12 = ptr10;\n"
- "unused(&ptr10, &ptr11, &ptr12);\n\n"
+ "QSharedPointer<int> ptr12 = ptr10;\n\n"
"QSharedPointer<QString> ptr20(new QString(\"hallo\"));\n"
"QSharedPointer<QString> ptr21 = ptr20;\n"
- "QSharedPointer<QString> ptr22 = ptr20;\n"
- "unused(&ptr20, &ptr21, &ptr22);\n\n"
+ "QSharedPointer<QString> ptr22 = ptr20;\n\n"
"QSharedPointer<int> ptr30(new int(43));\n"
"QWeakPointer<int> ptr31(ptr30);\n"
"QWeakPointer<int> ptr32 = ptr31;\n"
- "QWeakPointer<int> ptr33 = ptr32;\n"
- "unused(&ptr30, &ptr31, &ptr32);\n\n"
+ "QWeakPointer<int> ptr33 = ptr32;\n\n"
"QSharedPointer<QString> ptr40(new QString(\"hallo\"));\n"
"QWeakPointer<QString> ptr41(ptr40);\n"
"QWeakPointer<QString> ptr42 = ptr40;\n"
- "QWeakPointer<QString> ptr43 = ptr40;\n"
- "unused(&ptr40, &ptr41, &ptr42, &ptr43);\n\n"
+ "QWeakPointer<QString> ptr43 = ptr40;\n\n"
"QSharedPointer<Foo> ptr50(new Foo(1));\n"
"QWeakPointer<Foo> ptr51(ptr50);\n"
"QWeakPointer<Foo> ptr52 = ptr50;\n"
- "QWeakPointer<Foo> ptr53 = ptr50;\n"
- "unused(&ptr50, &ptr51, &ptr52, &ptr53);\n")
+ "QWeakPointer<Foo> ptr53 = ptr50;\n",
+
+ "&ptr10, &ptr11, &ptr12, "
+ "&ptr20, &ptr21, &ptr22, "
+ "&ptr30, &ptr31, &ptr32, &ptr33, "
+ "&ptr40, &ptr41, &ptr42, &ptr43, "
+ "&ptr50, &ptr51, &ptr52, &ptr53")
+ CoreProfile()
@@ -3273,9 +3334,14 @@ void tst_Dumpers::dumper_data()
QTest::newRow("QLazilyAllocated")
<< Data("#include <private/qlazilyallocated_p.h>\n"
"#include <QString>\n",
+
"QLazilyAllocated<QString> l;\n"
- "l.value() = \"Hi\";\n")
+ "l.value() = \"Hi\";\n",
+
+ "&l")
+
+ QmlPrivateProfile()
+
+ Check("l", "\"Hi\"", "@QLazilyAllocated<@QString>");
@@ -3310,10 +3376,11 @@ void tst_Dumpers::dumper_data()
"QFiniteStack<bool> s5;\n"
"s5.allocate(10);\n"
"s5.push(true);\n"
- "s5.push(false);\n\n")
+ "s5.push(false);",
- + QmlPrivateProfile()
+ "&s1, &s2, &s3, &s4, &s5")
+ + QmlPrivateProfile()
+ BigArrayProfile()
+ Check("s1", "<2 items>", "@QFiniteStack<int>")
@@ -3377,34 +3444,30 @@ void tst_Dumpers::dumper_data()
"QStack<int> s1;\n"
"s1.append(1);\n"
- "s1.append(2);\n"
- "unused(&s1);\n\n"
+ "s1.append(2);\n\n"
"QStack<int> s2;\n"
"for (int i = 0; i != 10000; ++i)\n"
" s2.append(i);\n"
- "unused(&s2);\n\n"
"QStack<Foo *> s3;\n"
"s3.append(new Foo(1));\n"
"s3.append(0);\n"
- "s3.append(new Foo(2));\n"
- "unused(&s3);\n\n"
+ "s3.append(new Foo(2));\n\n"
"QStack<Foo> s4;\n"
"s4.append(1);\n"
"s4.append(2);\n"
"s4.append(3);\n"
- "s4.append(4);\n"
- "unused(&s4);\n\n"
+ "s4.append(4);\n\n"
"QStack<bool> s5;\n"
"s5.append(true);\n"
- "s5.append(false);\n"
- "unused(&s5);\n\n")
+ "s5.append(false);",
- + CoreProfile()
+ "&s1, &s2, &s3, &s4, &s5")
+ + CoreProfile()
+ BigArrayProfile()
+ Check("s1", "<2 items>", "@QStack<int>")
@@ -3435,9 +3498,11 @@ void tst_Dumpers::dumper_data()
QTest::newRow("QTimeZone")
<< Data("#include <QTimeZone>\n",
+
"QTimeZone tz0;\n"
- "QTimeZone tz1(\"UTC+05:00\");\n"
- "unused(&tz0, &tz1);\n")
+ "QTimeZone tz1(\"UTC+05:00\");",
+
+ "&tz0, &tz1")
+ CoreProfile()
+ QtVersion(0x50200)
@@ -3448,11 +3513,13 @@ void tst_Dumpers::dumper_data()
QTest::newRow("QUrl")
<< Data("#include <QUrl>",
+
"QUrl url0;\n"
"QUrl url1 = QUrl::fromEncoded(\"http://foo@qt-project.org:10/have_fun\");\n"
"int port = url1.port();\n"
- "QString path = url1.path();\n"
- "unused(&url0, &url1, &port, &path);\n")
+ "QString path = url1.path();",
+
+ "&url0, &url1, &port, &path")
+ CoreProfile()
@@ -3471,11 +3538,15 @@ void tst_Dumpers::dumper_data()
QTest::newRow("QUuid")
<< Data("#include <QUuid>",
+
"QUuid uuid1(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);\n"
"QUuid uuid2(0xfffffffeu, 0xfffd, 0xfffc, 0xfb, "
- " 0xfa, 0xf9, 0xf8, 0xf7, 0xf6, 0xf5, 0xf4);\n"
- "unused(&uuid1, &uuid2);\n")
+ " 0xfa, 0xf9, 0xf8, 0xf7, 0xf6, 0xf5, 0xf4);",
+
+ "&uuid1, &uuid2")
+
+ CoreProfile()
+
+ Check("uuid1", "{00000001-0002-0003-0405-060708090a0b}", "@QUuid")
+ Check("uuid2", "{fffffffe-fffd-fffc-fbfa-f9f8f7f6f5f4}", "@QUuid");
@@ -3498,7 +3569,6 @@ void tst_Dumpers::dumper_data()
"QByteArray s0 = \"Hello\";\n"
"s0.prepend(\"Prefix: \");\n"
- "unused(&s0);\n\n"
"QByteArray s1 = \"AAA\";\n"
"s1 += '\\t';\n"
@@ -3507,17 +3577,14 @@ void tst_Dumpers::dumper_data()
"s1 += char(0);\n"
"s1 += char(1);\n"
"s1 += \"BBB\";\n"
- "unused(&s1);\n\n"
"QChar data[] = { 'H', 'e', 'l', 'l', 'o' };\n"
"QString s2 = QString::fromRawData(data, 4);\n"
"QString s3 = QString::fromRawData(data + 1, 4);\n"
- "unused(&data, &s2, &s3);\n\n"
"QString s4 = \"Hello \";\n"
"QString s5(\"String Test\");\n"
"QString *s6 = new QString(\"Pointer String Test\");\n"
- "unused(&s4, &s5, &s6);\n\n"
"const wchar_t *w = L\"aöa\";\n"
"QString s7;\n"
@@ -3525,12 +3592,10 @@ void tst_Dumpers::dumper_data()
" s7 = QString::fromUcs4((uint *)w);\n"
"else\n"
" s7 = QString::fromUtf16((ushort *)w);\n"
- "unused(&w, &s7);\n\n"
"QString str = \"Hello\";\n"
"QStringRef s8(&str, 1, 2);\n"
"QStringRef s9;\n"
- "unused(&s8, &s9);\n\n"
"QStringList l;\n"
"l << \"Hello \";\n"
@@ -3538,25 +3603,31 @@ void tst_Dumpers::dumper_data()
"l.takeFirst();\n"
"l << \" World \";\n\n"
- "QString str1(\"Hello Qt\"); unused(&str1);\n"
- "QString str2(\"Hello\\nQt\"); unused(&str2);\n"
- "QString str3(\"Hello\\rQt\"); unused(&str3);\n"
- "QString str4(\"Hello\\tQt\"); unused(&str4);\n\n"
+ "QString str1(\"Hello Qt\");\n"
+ "QString str2(\"Hello\\nQt\");\n"
+ "QString str3(\"Hello\\rQt\");\n"
+ "QString str4(\"Hello\\tQt\");\n\n"
"#if QT_VERSION > 0x50000\n"
"static const QStaticStringData<3> qstring_literal = {\n"
" Q_STATIC_STRING_DATA_HEADER_INITIALIZER(3),\n"
" QT_UNICODE_LITERAL(u\"ABC\") };\n"
"QStringDataPtr holder = { qstring_literal.data_ptr() };\n"
- "const QString qstring_literal_temp(holder); unused(&holder);\n\n"
+ "const QString qstring_literal_temp(holder);\n\n"
"QStaticStringData<1> sd;\n"
"sd.data[0] = 'Q';\n"
"sd.data[1] = 0;\n"
- "#endif\n")
+ "#else\n"
+ "int qstring_literal_temp, sd, holder;\n"
+ "#endif",
+
+ "&s0, &s1, &data, &s2, &s3, &s4, &s5, &s6, &w, &s7, &s8, &s9, "
+ "&l, &qstring_literal_temp, &sd, &str1, &str2, &str3, &str4, &holder")
+ CoreProfile()
+ MsvcVersion(1900)
+
+ Check("s0", "\"Prefix: Hello\"", "@QByteArray")
+ Check("s1", expected1, "@QByteArray")
+ Check("s2", "\"Hell\"", "@QString")
@@ -3595,7 +3666,10 @@ void tst_Dumpers::dumper_data()
" BREAK;\n"
" unused(&refstring);\n"
"}\n",
- "stringRefTest(QString(\"Ref String Test\"));\n")
+
+ "stringRefTest(QString(\"Ref String Test\"));\n",
+
+ "")
+ CoreProfile()
@@ -3607,20 +3681,25 @@ void tst_Dumpers::dumper_data()
<< Data("#include <QApplication>\n"
"#include <QTextCursor>\n"
"#include <QTextDocument>\n",
+
"QApplication app(argc, argv);\n"
"QTextDocument doc;\n"
"doc.setPlainText(\"Hallo\\nWorld\");\n"
"QTextCursor tc;\n"
"tc = doc.find(\"all\");\n"
"int pos = tc.position();\n"
- "int anc = tc.anchor();\n"
- "unused(&pos, &anc);\n")
+ "int anc = tc.anchor();",
+
+ "&pos, &anc")
+
+ GuiProfile()
+
+ CheckType("doc", "@QTextDocument")
+ Check("tc", "4", "@QTextCursor")
+ Check("pos", "4", "int")
+ Check("anc", "1", "int");
+
QTest::newRow("QThread")
<< Data("#include <QThread>\n"
"struct Thread : QThread\n"
@@ -3629,18 +3708,19 @@ void tst_Dumpers::dumper_data()
" {\n"
" auto mo = &QThread::metaObject;\n"
" auto mc = &QThread::qt_metacast;\n"
- " auto p0 = (*(void***)this)[0]; unused(&p0);\n"
- " auto p1 = (*(void***)this)[1]; unused(&p1);\n"
- " auto p2 = (*(void***)this)[2]; unused(&p2);\n"
- " auto p3 = (*(void***)this)[3]; unused(&p3);\n"
- " auto p4 = (*(void***)this)[4]; unused(&p4);\n"
- " auto p5 = (*(void***)this)[5]; unused(&p5);\n"
+ " auto p0 = (*(void***)this)[0];\n"
+ " auto p1 = (*(void***)this)[1];\n"
+ " auto p2 = (*(void***)this)[2];\n"
+ " auto p3 = (*(void***)this)[3];\n"
+ " auto p4 = (*(void***)this)[4];\n"
+ " auto p5 = (*(void***)this)[5];\n"
" if (m_id == 3) {\n"
" BREAK;\n"
" }\n"
+ " unused(&mo, &mc, &p0, &p1, &p2, &p3, &p4, &p5);\n"
" }\n"
" int m_id;\n"
- "};\n",
+ "};",
"const int N = 14;\n"
"Thread thread[N];\n"
@@ -3651,7 +3731,9 @@ void tst_Dumpers::dumper_data()
"}\n"
"for (int i = 0; i != N; ++i) {\n"
" thread[i].wait();\n"
- "}\n")
+ "}",
+
+ "&thread, &N")
+ CoreProfile()
@@ -3672,13 +3754,11 @@ void tst_Dumpers::dumper_data()
"Q_DECLARE_METATYPE(QList<int>)\n"
"#endif\n",
- "QVariant v0;\n"
- "unused(&v0);\n\n"
+ "QVariant v0;\n\n"
"QVariant::Type t1 = QVariant::String;\n"
"QVariant v1 = QVariant(t1, (void*)0);\n"
- //"*(QString*)v1.data() = QString(\"Some string\");\n"
- "unused(&v1);\n\n"
+ //"*(QString*)v1.data() = QString(\"Some string\");\n\n"
"MyType my;\n"
"my[1] = (QStringList() << \"Hello\");\n"
@@ -3686,13 +3766,13 @@ void tst_Dumpers::dumper_data()
"QVariant v2;\n"
"v2.setValue(my);\n"
"int t = QMetaType::type(\"MyType\");\n"
- "const char *s = QMetaType::typeName(t);\n"
- "unused(&v2, &t, &s);\n\n"
+ "const char *s = QMetaType::typeName(t);\n\n"
"QList<int> list;\n"
"list << 1 << 2 << 3;\n"
- "QVariant v3 = QVariant::fromValue(list);\n"
- "unused(&list, &v3);\n\n")
+ "QVariant v3 = QVariant::fromValue(list);",
+
+ "&my, &v0, &v1, &v2, &t, &s, &list, &v3, &t1")
+ CoreProfile()
@@ -3834,7 +3914,8 @@ void tst_Dumpers::dumper_data()
"QVariant var83 = QVector3D(); unused(&var83); // 83 QVector3D\n"
"QVariant var84 = QVector4D(); unused(&var84); // 84 QVector4D\n"
"QVariant var85 = QQuaternion(); unused(&var85); // 85 QQuaternion\n"
- "QVariant var86 = QVariant::fromValue<QPolygonF>(QPolygonF()); unused(&var86);\n"
+ "QVariant var86 = QVariant::fromValue<QPolygonF>(QPolygonF()); unused(&var86);\n",
+ ""
)
+ GuiProfile()
@@ -3906,12 +3987,14 @@ void tst_Dumpers::dumper_data()
<< Data("#include <QHostAddress>\n"
"#include <QVariant>\n"
"Q_DECLARE_METATYPE(QHostAddress)\n",
+
"QVariant var;\n"
"QHostAddress ha;\n"
"ha.setAddress(\"127.0.0.1\");\n"
"var.setValue(ha);\n"
- "QHostAddress ha1 = var.value<QHostAddress>();\n"
- "unused(&ha1);\n")
+ "QHostAddress ha1 = var.value<QHostAddress>();",
+
+ "&ha1, &var, &ha")
+ NetworkProfile()
@@ -3940,8 +4023,7 @@ void tst_Dumpers::dumper_data()
QTest::newRow("QVariantList")
<< Data("#include <QVariantList>\n",
- "QVariantList vl0;\n"
- "unused(&vl0);\n\n"
+ "QVariantList vl0;\n\n"
"QVariantList vl1;\n"
"vl1.append(QVariant(1));\n"
@@ -3949,13 +4031,13 @@ void tst_Dumpers::dumper_data()
"vl1.append(QVariant(\"Some String\"));\n"
"vl1.append(QVariant(21));\n"
"vl1.append(QVariant(22));\n"
- "vl1.append(QVariant(\"2Some String\"));\n"
- "unused(&vl1);\n\n"
+ "vl1.append(QVariant(\"2Some String\"));\n\n"
"QVariantList vl2;\n"
"vl2.append(\"one\");\n"
- "QVariant v = vl2;\n\n"
- "unused(&vl2, &v);\n\n")
+ "QVariant v = vl2;",
+
+ "&vl0, &vl1, &vl2, &v")
+ CoreProfile()
@@ -3973,7 +4055,6 @@ void tst_Dumpers::dumper_data()
<< Data("#include <QVariantMap>\n",
"QVariantMap vm0;\n\n"
- "unused(&vm0);\n\n"
"QVariantMap vm1;\n"
"vm1[\"a\"] = QVariant(1);\n"
@@ -3981,11 +4062,11 @@ void tst_Dumpers::dumper_data()
"vm1[\"c\"] = QVariant(\"Some String\");\n"
"vm1[\"d\"] = QVariant(21);\n"
"vm1[\"e\"] = QVariant(22);\n"
- "vm1[\"f\"] = QVariant(\"2Some String\");\n"
- "unused(&vm1);\n\n"
+ "vm1[\"f\"] = QVariant(\"2Some String\");\n\n"
+
+ "QVariant v = vm1;\n",
- "QVariant v = vm1;\n"
- "unused(&v);\n")
+ "&vm0, &vm1, &v")
+ CoreProfile()
@@ -4004,15 +4085,14 @@ void tst_Dumpers::dumper_data()
QTest::newRow("QVariantHash")
<< Data("#include <QVariant>\n",
- "QVariantHash h0;\n"
- "unused(&h0);\n\n"
+ "QVariantHash h0;\n\n"
"QVariantHash h1;\n"
"h1[\"one\"] = \"vone\";\n"
- "unused(&h1);\n\n"
- "QVariant v = h1;\n"
- "unused( &v);\n")
+ "QVariant v = h1;",
+
+ "&v, &h0, &h1")
+ CoreProfile()
@@ -4032,35 +4112,31 @@ void tst_Dumpers::dumper_data()
"QVector<int> v1(10000);\n"
"for (int i = 0; i != v1.size(); ++i)\n"
" v1[i] = i * i;\n\n"
- "unused(&v1);\n\n"
"QVector<Foo> v2;\n"
"v2.append(1);\n"
"v2.append(2);\n"
- "unused(&v2);\n\n"
"typedef QVector<Foo> FooVector;\n"
"FooVector v3;\n"
"v3.append(1);\n"
"v3.append(2);\n"
- "unused(&v3);\n\n"
"QVector<Foo *> v4;\n"
"v4.append(new Foo(1));\n"
"v4.append(0);\n"
"v4.append(new Foo(5));\n"
- "unused(&v4);\n\n"
"QVector<bool> v5;\n"
"v5.append(true);\n"
"v5.append(false);\n"
- "unused(&v5);\n\n"
"QVector<QList<int> > v6;\n"
"v6.append(QList<int>() << 1);\n"
"v6.append(QList<int>() << 2 << 3);\n"
- "QVector<QList<int> > *pv = &v6;\n"
- "unused(&v6, &pv);\n\n")
+ "QVector<QList<int> > *pv = &v6;\n",
+
+ "&v1, &v2, &v3, &v4, &v5, &v6, &pv")
+ CoreProfile()
@@ -4106,44 +4182,40 @@ void tst_Dumpers::dumper_data()
+ Check("v6.1.0", "[0]", "2", "int")
+ Check("v6.1.1", "[1]", "3", "int");
+
QTest::newRow("QVarLengthArray")
<< Data("#include <QVarLengthArray>\n" + fooData,
"QVarLengthArray<int> v1(10000);\n"
"for (int i = 0; i != v1.size(); ++i)\n"
" v1[i] = i * i;\n\n"
- "unused(&v1);\n\n"
"QVarLengthArray<Foo> v2;\n"
"v2.append(1);\n"
- "v2.append(2);\n"
- "unused(&v2);\n\n"
+ "v2.append(2);\n\n"
"typedef QVarLengthArray<Foo> FooVector;\n"
"FooVector v3;\n"
"v3.append(1);\n"
- "v3.append(2);\n"
- "unused(&v3);\n\n"
+ "v3.append(2);\n\n"
"QVarLengthArray<Foo *> v4;\n"
"v4.append(new Foo(1));\n"
"v4.append(0);\n"
- "v4.append(new Foo(5));\n"
- "unused(&v4);\n\n"
+ "v4.append(new Foo(5));\n\n"
"QVarLengthArray<bool> v5;\n"
"v5.append(true);\n"
- "v5.append(false);\n"
- "unused(&v5);\n\n"
+ "v5.append(false);\n\n"
"QVarLengthArray<QList<int> > v6;\n"
"v6.append(QList<int>() << 1);\n"
"v6.append(QList<int>() << 2 << 3);\n"
- "QVarLengthArray<QList<int> > *pv = &v6;\n"
- "unused(&v6, &pv);\n\n")
+ "QVarLengthArray<QList<int> > *pv = &v6;",
- + CoreProfile()
+ "&v1, &v2, &v3, &v4, &v5, &v6, &pv")
+ + CoreProfile()
+ BigArrayProfile()
+ Check("v1", "<10000 items>", "@QVarLengthArray<int, 256>")
@@ -4192,7 +4264,8 @@ void tst_Dumpers::dumper_data()
"QXmlAttributes atts;\n"
"atts.append(\"name1\", \"uri1\", \"localPart1\", \"value1\");\n"
"atts.append(\"name2\", \"uri2\", \"localPart2\", \"value2\");\n"
- "atts.append(\"name3\", \"uri3\", \"localPart3\", \"value3\");\n")
+ "atts.append(\"name3\", \"uri3\", \"localPart3\", \"value3\");",
+ "&atts")
+ CoreProfile()
+ Profile("QT += xml\n")
@@ -4218,9 +4291,11 @@ void tst_Dumpers::dumper_data()
QTest::newRow("StdArray")
<< Data("#include <array>\n"
"#include <QString>\n",
+
"std::array<int, 4> a = { { 1, 2, 3, 4} };\n"
- "std::array<QString, 4> b = { { \"1\", \"2\", \"3\", \"4\"} };\n"
- "unused(&a, &b);\n")
+ "std::array<QString, 4> b = { { \"1\", \"2\", \"3\", \"4\"} };",
+
+ "&a, &b")
+ CoreProfile()
+ Cxx11Profile()
@@ -4234,8 +4309,11 @@ void tst_Dumpers::dumper_data()
QTest::newRow("StdComplex")
<< Data("#include <complex>\n",
- "std::complex<double> c(1, 2);\n"
- "unused(&c);\n")
+
+ "std::complex<double> c(1, 2);",
+
+ "&c")
+
+ Check("c", "(1.0, 2.0)", "std::complex<double>")
+ Check("c.real", FloatValue("1.0"), "double")
+ Check("c.imag", FloatValue("2.0"), "double");
@@ -4243,10 +4321,12 @@ void tst_Dumpers::dumper_data()
QTest::newRow("CComplex")
<< Data("#include <complex.h>\n",
+
"// Doesn't work when compiled as C++.\n"
"double complex a = 0;\n"
- "double _Complex b = 0;\n"
- "unused(&a, &b);\n")
+ "double _Complex b = 0;\n",
+
+ "&a, &b")
+ ForceC()
+ GdbVersion(70500)
@@ -4257,14 +4337,19 @@ void tst_Dumpers::dumper_data()
+ Check("a", "0 + 0i", "_Complex double") % LldbEngine
+ Check("b", "0 + 0i", "_Complex double") % LldbEngine;
+
QTest::newRow("StdFunction")
<< Data("#include <functional>\n"
"void bar(int) {}",
"std::function<void(int)> x;\n"
"std::function<void(int)> y = bar;\n"
- "std::function<void(int)> z = [](int) {};\n")
+ "std::function<void(int)> z = [](int) {};",
+
+ "&x, &y, &z")
+
+ GdbEngine
+
+ Check("x", "(null)", "std::function<void(int)>")
+ Check("y", ValuePattern(".* <bar(int)>"), "std::function<void(int)>");
@@ -4284,7 +4369,9 @@ void tst_Dumpers::dumper_data()
"deque2.push_back(new int(2));\n"
"deque2.push_back(new int(3));\n"
"deque2.pop_back();\n"
- "deque2.pop_front();\n")
+ "deque2.pop_front();",
+
+ "&deque2")
+ Check("deque0", "<0 items>", "std::deque<int>")
@@ -4300,16 +4387,17 @@ void tst_Dumpers::dumper_data()
QTest::newRow("StdDequeQt")
<< Data("#include <deque>\n" + fooData,
- "std::deque<Foo> deque0;\n"
- "unused(&deque0);\n\n"
+ "std::deque<Foo> deque0;\n\n"
"std::deque<Foo> deque1;\n"
"deque1.push_back(1);\n"
- "deque1.push_front(2);\n"
+ "deque1.push_front(2);\n\n"
"std::deque<Foo *> deque2;\n"
"deque2.push_back(new Foo(1));\n"
- "deque2.push_back(new Foo(2));\n")
+ "deque2.push_back(new Foo(2));",
+
+ "&deque0, &deque1, &deque2")
+ CoreProfile()
@@ -4336,6 +4424,7 @@ void tst_Dumpers::dumper_data()
"};\n"
"}\n\n"
"using namespace __gnu_cxx;\n\n",
+
"hash_set<int> h;\n"
"h.insert(1);\n"
"h.insert(194);\n"
@@ -4345,7 +4434,9 @@ void tst_Dumpers::dumper_data()
"h2.insert(\"1\");\n"
"h2.insert(\"194\");\n"
"h2.insert(\"2\");\n"
- "h2.insert(\"3\");\n")
+ "h2.insert(\"3\");\n",
+
+ "&h, &h2")
+ GdbEngine
@@ -4370,7 +4461,6 @@ void tst_Dumpers::dumper_data()
"struct Derived : public std::list<T>, Base {};\n",
"std::list<int> l0;\n"
- "unused(&l0);\n\n"
"std::list<int> l1;\n"
"for (int i = 0; i < 10000; ++i)\n"
@@ -4379,18 +4469,17 @@ void tst_Dumpers::dumper_data()
"std::list<bool> l2;\n"
"l2.push_back(true);\n"
"l2.push_back(false);\n"
- "unused(&l2);\n\n"
"std::list<int *> l3;\n"
"l3.push_back(new int(1));\n"
"l3.push_back(0);\n"
"l3.push_back(new int(2));\n"
- "unused(&l3);\n\n"
"Derived<int> l4;\n"
"l4.push_back(1);\n"
- "l4.push_back(2);\n"
- "unused(&l4);\n\n")
+ "l4.push_back(2);\n",
+
+ "&l0, &l1, &l2, &l3, &l4")
+ BigArrayProfile()
@@ -4420,14 +4509,14 @@ void tst_Dumpers::dumper_data()
"std::list<Foo> l1;\n"
"l1.push_back(15);\n"
- "l1.push_back(16);\n"
- "unused(&l1);\n\n"
+ "l1.push_back(16);\n\n"
"std::list<Foo *> l2;\n"
"l2.push_back(new Foo(1));\n"
"l2.push_back(0);\n"
- "l2.push_back(new Foo(2));\n"
- "unused(&l2);\n")
+ "l2.push_back(new Foo(2));",
+
+ "&l1, &l2")
+ CoreProfile()
+ Check("l1", "<2 items>", "std::list<Foo>")
@@ -4450,12 +4539,11 @@ void tst_Dumpers::dumper_data()
"std::map<unsigned int, unsigned int> map1;\n"
"map1[11] = 1;\n"
- "map1[22] = 2;\n"
- "unused(&map1);\n\n"
+ "map1[22] = 2;\n\n"
"std::map<unsigned int, float> map2;\n"
"map2[11] = 11.0;\n"
- "map2[22] = 22.0;\n"
+ "map2[22] = 22.0;\n\n"
"typedef std::map<int, float> Map;\n"
"Map map3;\n"
@@ -4470,21 +4558,22 @@ void tst_Dumpers::dumper_data()
"Map::iterator it3 = it2; ++it3;\n"
"Map::iterator it4 = it3; ++it4;\n"
"Map::iterator it5 = it4; ++it5;\n"
- "Map::iterator it6 = it5; ++it6;\n"
- "unused(&it6);\n"
+ "Map::iterator it6 = it5; ++it6;\n\n"
"std::multimap<unsigned int, float> map4;\n"
"map4.insert(std::pair<unsigned int, float>(11, 11.0));\n"
"map4.insert(std::pair<unsigned int, float>(22, 22.0));\n"
"map4.insert(std::pair<unsigned int, float>(22, 23.0));\n"
"map4.insert(std::pair<unsigned int, float>(22, 24.0));\n"
- "map4.insert(std::pair<unsigned int, float>(22, 25.0));\n"
+ "map4.insert(std::pair<unsigned int, float>(22, 25.0));\n\n"
"std::map<short, long long> map5;\n"
- "map5[12] = 42;\n"
+ "map5[12] = 42;\n\n"
"std::map<short, std::string> map6;\n"
- "map6[12] = \"42\";\n")
+ "map6[12] = \"42\";",
+
+ "&map1, &map2, &map3, &map4, &map5, &map5, &it1, &it2, &it3, &it4, &it5, &it6")
+ Check("map1", "<2 items>", "std::map<unsigned int, unsigned int>")
+ Check("map1.0", "[0] 11", "1", "")
@@ -4526,40 +4615,35 @@ void tst_Dumpers::dumper_data()
"map1[\"22.0\"] = Foo(22);\n"
"map1[\"33.0\"] = Foo(33);\n"
"map1[\"44.0\"] = Foo(44);\n"
- "unused(&map1);\n\n"
"std::map<const char *, Foo> map2;\n"
"map2[\"22.0\"] = Foo(22);\n"
"map2[\"33.0\"] = Foo(33);\n"
- "unused(&map2);\n\n"
"std::map<uint, QStringList> map3;\n"
"map3[11] = QStringList() << \"11\";\n"
"map3[22] = QStringList() << \"22\";\n"
- "unused(&map3);\n\n"
"typedef std::map<uint, QStringList> T;\n"
"T map4;\n"
"map4[11] = QStringList() << \"11\";\n"
"map4[22] = QStringList() << \"22\";\n"
- "unused(&map4);\n\n"
"std::map<QString, float> map5;\n"
"map5[\"11.0\"] = 11.0;\n"
"map5[\"22.0\"] = 22.0;\n"
- "unused(&map5);\n\n"
"std::map<int, QString> map6;\n"
"map6[11] = \"11.0\";\n"
"map6[22] = \"22.0\";\n"
- "unused(&map6);\n\n"
"QObject ob;\n"
"std::map<QString, QPointer<QObject> > map7;\n"
"map7[\"Hallo\"] = QPointer<QObject>(&ob);\n"
"map7[\"Welt\"] = QPointer<QObject>(&ob);\n"
- "map7[\".\"] = QPointer<QObject>(&ob);\n"
- "unused(&map7);\n")
+ "map7[\".\"] = QPointer<QObject>(&ob);\n",
+
+ "&map1, &map2, &map3, &map4, &map5, &map6")
+ CoreProfile()
@@ -4623,10 +4707,13 @@ void tst_Dumpers::dumper_data()
QTest::newRow("StdUniquePtr")
<< Data("#include <memory>\n"
"#include <string>\n" + fooData,
- "std::unique_ptr<int> p0; unused(&p0);\n\n"
- "std::unique_ptr<int> p1(new int(32)); unused(&p1);\n\n"
- "std::unique_ptr<Foo> p2(new Foo); unused(&p2);\n\n"
- "std::unique_ptr<std::string> p3(new std::string(\"ABC\")); unused(&p3);\n\n")
+
+ "std::unique_ptr<int> p0;\n\n"
+ "std::unique_ptr<int> p1(new int(32));\n\n"
+ "std::unique_ptr<Foo> p2(new Foo);\n\n"
+ "std::unique_ptr<std::string> p3(new std::string(\"ABC\"));",
+
+ "&p0, &p1, &p2, &p3")
+ CoreProfile()
+ Cxx11Profile()
@@ -4640,21 +4727,28 @@ void tst_Dumpers::dumper_data()
QTest::newRow("StdOnce")
<< Data("#include <mutex>\n",
- "std::once_flag x; unused(&x);\n")
+
+ "std::once_flag x;",
+ "&x")
+
+ Cxx11Profile()
+
+ Check("x", "0", "std::once_flag");
QTest::newRow("StdSharedPtr")
<< Data("#include <memory>\n"
"#include <string>\n" + fooData,
- "std::shared_ptr<int> pi(new int(32)); unused(&pi);\n"
- "std::shared_ptr<Foo> pf(new Foo); unused(&pf);\n"
- "std::shared_ptr<std::string> ps(new std::string(\"ABC\")); "
- "unused(&ps);\n"
- "std::weak_ptr<int> wi = pi; unused(&wi);\n"
- "std::weak_ptr<Foo> wf = pf; unused(&wf);\n"
- "std::weak_ptr<std::string> ws = ps; unused(&ws);\n")
+
+ "std::shared_ptr<int> pi(new int(32));\n"
+ "std::shared_ptr<Foo> pf(new Foo);\n"
+ "std::shared_ptr<std::string> ps(new std::string(\"ABC\"));\n\n"
+
+ "std::weak_ptr<int> wi = pi;\n"
+ "std::weak_ptr<Foo> wf = pf;\n"
+ "std::weak_ptr<std::string> ws = ps;",
+
+ "&pi, &pf, &ps, &wi, &wf, &ws")
+ CoreProfile()
+ Cxx11Profile()
@@ -4668,6 +4762,7 @@ void tst_Dumpers::dumper_data()
+ Check("ws", "\"ABC\"", "std::weak_ptr<std::string>")
+ Check("ps", "\"ABC\"", "std::shared_ptr<std::string>");
+
QTest::newRow("StdSharedPtr2")
<< Data("#include <memory>\n"
"struct A {\n"
@@ -4677,9 +4772,14 @@ void tst_Dumpers::dumper_data()
" int *m_2 = (int *)2;\n"
" int x = 3;\n"
"};\n",
+
"std::shared_ptr<A> a(new A);\n"
- "A *inner = a.get(); unused(inner);\n")
+ "A *inner = a.get();",
+
+ "&inner, &a")
+
+ Cxx11Profile()
+
+ Check("inner.m_0", "0x0", "int *")
+ Check("inner.m_1", "0x1", "int *")
+ Check("inner.m_2", "0x2", "int *")
@@ -4689,14 +4789,13 @@ void tst_Dumpers::dumper_data()
+ Check("a.m_2", "0x2", "int *")
+ Check("a.x", "3", "int");
+
QTest::newRow("StdSet")
<< Data("#include <set>\n",
- "std::set<double> s0;\n"
- "unused(&s0);\n\n"
+ "std::set<double> s0;\n\n"
- "std::set<int> s1{11, 22, 33, 44, 55, 66, 77, 88};\n"
- "unused(&s1);\n\n"
+ "std::set<int> s1{11, 22, 33, 44, 55, 66, 77, 88};\n\n"
"typedef std::set<int> Set;\n"
"Set s2;\n"
@@ -4705,8 +4804,7 @@ void tst_Dumpers::dumper_data()
"s2.insert(33.0);\n"
"Set::iterator it1 = s2.begin();\n"
"Set::iterator it2 = it1; ++it2;\n"
- "Set::iterator it3 = it2; ++it3;\n"
- "unused(&it3);\n\n"
+ "Set::iterator it3 = it2; ++it3;\n\n"
"std::multiset<int> s3;\n"
"s3.insert(1);\n"
@@ -4714,7 +4812,9 @@ void tst_Dumpers::dumper_data()
"s3.insert(2);\n"
"s3.insert(3);\n"
"s3.insert(3);\n"
- "s3.insert(3);\n")
+ "s3.insert(3);",
+
+ "&s0, &s1, &s2, &s2, &it1, &it2, &it3")
+ Cxx11Profile()
+ Check("s0", "<0 items>", "std::set<double>")
@@ -4745,11 +4845,12 @@ void tst_Dumpers::dumper_data()
"QObject ob;\n"
"std::set<QPointer<QObject> > set2;\n"
"QPointer<QObject> ptr(&ob);\n"
- "set2.insert(ptr);\n"
+ "set2.insert(ptr);",
- "unused(&ptr, &ob, &set1, &set2);\n")
+ "&ptr, &ob, &set1, &set2")
+ CoreProfile()
+
+ Check("set1", "<1 items>", "std::set<@QString>")
+ Check("set1.0", "[0]", "\"22.0\"", "@QString")
@@ -4768,8 +4869,9 @@ void tst_Dumpers::dumper_data()
"std::stack<int> s2, s3;\n"
"s3.push(1);\n"
- "s3.push(2);\n"
- "unused(&s0, &s1, &s2, &s3);\n")
+ "s3.push(2);",
+
+ "&s0, &s1, &s2, &s3")
+ Check("s0", "<0 items>", "std::stack<int*>")
@@ -4787,14 +4889,18 @@ void tst_Dumpers::dumper_data()
QTest::newRow("StdStackQt")
<< Data("#include <stack>\n" + fooData,
+
"std::stack<Foo *> s0, s1;\n"
"std::stack<Foo> s2, s3;\n"
"s1.push(new Foo(1));\n"
"s1.push(new Foo(2));\n"
"s3.push(1);\n"
- "s3.push(2);\n"
- "unused(&s0, &s1, &s2, &s3);\n")
+ "s3.push(2);",
+
+ "&s0, &s1, &s2, &s3")
+
+ CoreProfile()
+
+ Check("s0", "<0 items>", "std::stack<Foo*>")
+ Check("s1", "<2 items>", "std::stack<Foo*>")
+ Check("s1.0", "[0]", "", "Foo")
@@ -4810,11 +4916,15 @@ void tst_Dumpers::dumper_data()
QTest::newRow("StdBasicString")
+
<< Data("#include <string>\n"
"template<class T>\n"
"class myallocator : public std::allocator<T> {};\n",
- "std::basic_string<char, std::char_traits<char>, myallocator<char>> str(\"hello\");\n"
- "unused(&str);\n")
+
+ "std::basic_string<char, std::char_traits<char>, myallocator<char>> str(\"hello\");",
+
+ "&str")
+
+ Check("str", "\"hello\"", "std::basic_string<char, std::char_traits<char>, myallocator<char> >")
+ Check("str.0", "[0]", "104", "char") // 104: ASCII 'h'
+ Check("str.1", "[1]", "101", "char"); // 101: ASCII 'e'
@@ -4822,6 +4932,7 @@ void tst_Dumpers::dumper_data()
QTest::newRow("StdString")
<< Data("#include <string>\n",
+
"std::string str0, str;\n"
"std::wstring wstr0, wstr;\n"
"str += \"b\";\n"
@@ -4834,8 +4945,10 @@ void tst_Dumpers::dumper_data()
"str += \"e\";\n"
"wstr += wchar_t('e');\n"
"wstr += wchar_t('e');\n"
- "str += \"e\";\n"
- "unused(&str0, &str, &wstr0, &wstr);\n")
+ "str += \"e\";\n",
+
+ "&str0, &str, &wstr0, &wstr")
+
+ Check("str0", "\"\"", "std::string")
+ Check("wstr0", "\"\"", "std::wstring")
+ Check("str", "\"bdebdee\"", "std::string")
@@ -4846,15 +4959,19 @@ void tst_Dumpers::dumper_data()
<< Data("#include <string>\n"
"#include <vector>\n"
"#include <QList>\n",
+
"std::string str = \"foo\";\n"
"std::vector<std::string> v;\n"
"QList<std::string> l0, l;\n"
"v.push_back(str);\n"
"v.push_back(str);\n"
"l.push_back(str);\n"
- "l.push_back(str);\n"
- "unused(&v, &l);\n")
+ "l.push_back(str);\n",
+
+ "&v, &l")
+
+ CoreProfile()
+
+ Check("l0", "<0 items>", "@QList<std::string>")
+ Check("l", "<2 items>", "@QList<std::string>")
+ Check("str", "\"foo\"", "std::string")
@@ -4866,34 +4983,25 @@ void tst_Dumpers::dumper_data()
<< Data("#include <valarray>\n"
"#include <list>\n",
- "std::valarray<double> v0, v1 = { 1, 0, 2 };\n"
- "unused(&v0, &v1);\n\n"
+ "std::valarray<double> v0, v1 = { 1, 0, 2 };\n\n"
- "std::valarray<int *> v2, v3 = { new int(1), 0, new int(2) };\n"
- "unused(&v2, &v3);\n\n"
+ "std::valarray<int *> v2, v3 = { new int(1), 0, new int(2) };\n\n"
- "std::valarray<int> v4 = { 1, 2, 3, 4 };\n"
- "unused(&v4);\n\n"
+ "std::valarray<int> v4 = { 1, 2, 3, 4 };\n\n"
"std::list<int> list;\n"
"std::list<int> list1 = { 45 };\n"
"std::valarray<std::list<int> *> v5 = {\n"
" new std::list<int>(list), 0,\n"
" new std::list<int>(list1), 0\n"
- "};\n"
- "unused(&v5);\n\n"
-
- "std::valarray<bool> b0;\n"
- "unused(&b0);\n\n"
-
- "std::valarray<bool> b1 = { true, false, false, true, false };\n"
- "unused(&b1);\n\n"
+ "};\n\n"
- "std::valarray<bool> b2(true, 65);\n"
- "unused(&b2);\n\n"
+ "std::valarray<bool> b0;\n\n"
+ "std::valarray<bool> b1 = { true, false, false, true, false };\n\n"
+ "std::valarray<bool> b2(true, 65);\n\n"
+ "std::valarray<bool> b3(300);\n",
- "std::valarray<bool> b3(300);\n"
- "unused(&b3);\n")
+ "&v0, &v1, &v2, &v3, &v4, &v5, &b0, &b1, &b2, &b3")
+ Cxx11Profile()
@@ -4948,17 +5056,16 @@ void tst_Dumpers::dumper_data()
"std::vector<double> v0, v1;\n"
"v1.push_back(1);\n"
"v1.push_back(0);\n"
- "v1.push_back(2);\n"
- "unused(&v0, &v1);\n\n"
+ "v1.push_back(2);\n\n"
- "std::vector<int *> v2; unused(&v2);\n"
+ "std::vector<int *> v2;\n\n"
- "std::vector<int *> v3; unused(&v3);\n\n"
+ "std::vector<int *> v3;\n\n"
"v3.push_back(new int(1));\n"
"v3.push_back(0);\n"
"v3.push_back(new int(2));\n\n"
- "std::vector<int> v4; unused(&v4);\n"
+ "std::vector<int> v4;\n"
"v4.push_back(1);\n"
"v4.push_back(2);\n"
"v4.push_back(3);\n"
@@ -4970,30 +5077,26 @@ void tst_Dumpers::dumper_data()
"v5.push_back(0);\n"
"list.push_back(45);\n"
"v5.push_back(new std::list<int>(list));\n"
- "v5.push_back(0);\n"
- "unused(&v5);\n\n"
+ "v5.push_back(0);\n\n"
- "std::vector<bool> b0;\n"
- "unused(&b0);\n\n"
+ "std::vector<bool> b0;\n\n"
"std::vector<bool> b1;\n"
"b1.push_back(true);\n"
"b1.push_back(false);\n"
"b1.push_back(false);\n"
"b1.push_back(true);\n"
- "b1.push_back(false);\n"
- "unused(&b1);\n\n"
+ "b1.push_back(false);\n\n"
- "std::vector<bool> b2(65, true);\n"
- "unused(&b2);\n\n"
+ "std::vector<bool> b2(65, true);\n\n"
- "std::vector<bool> b3(300);\n"
- "unused(&b3);\n"
+ "std::vector<bool> b3(300);\n\n"
"std::vector<bool, myallocator<bool>> b4;\n"
"b4.push_back(true);\n"
- "b4.push_back(false);\n"
- "unused(&b4);\n")
+ "b4.push_back(false);\n",
+
+ "&v0, &v1, &v2, &v3, &v4, &v5, &b0, &b1, &b2, &b3, &b4")
+ Check("v0", "<0 items>", "std::vector<double>")
+ Check("v1", "<3 items>", "std::vector<double>")
@@ -5039,6 +5142,7 @@ void tst_Dumpers::dumper_data()
+ Check("b4.0", "[0]", "1", "bool")
+ Check("b4.1", "[1]", "0", "bool");
+
QTest::newRow("StdVectorQt")
<< Data("#include <vector>\n" + fooData,
@@ -5051,8 +5155,9 @@ void tst_Dumpers::dumper_data()
"v2.push_back(1);\n"
"v2.push_back(2);\n"
"v2.push_back(3);\n"
- "v2.push_back(4);\n"
- "unused(&v1, &v2);\n")
+ "v2.push_back(4);",
+
+ "&v1, &v2")
+ CoreProfile()
+ Check("v1", "<3 items>", "std::vector<Foo*>")
@@ -5074,18 +5179,17 @@ void tst_Dumpers::dumper_data()
"std::unordered_map<unsigned int, unsigned int> map1;\n"
"map1[11] = 1;\n"
- "map1[22] = 2;\n"
- "unused(&map1);\n\n"
+ "map1[22] = 2;\n\n"
"std::unordered_map<std::string, float> map2;\n"
"map2[\"11.0\"] = 11.0;\n"
- "map2[\"22.0\"] = 22.0;\n"
- "unused(&map2);\n"
+ "map2[\"22.0\"] = 22.0;\n\n"
"std::unordered_multimap<int, std::string> map3;\n"
"map3.insert({1, \"Foo\"});\n"
- "map3.insert({1, \"Bar\"});\n"
- "unused(&map3);\n" )
+ "map3.insert({1, \"Bar\"});",
+
+ "&map1, &map2, &map3")
+ Cxx11Profile()
@@ -5124,12 +5228,12 @@ void tst_Dumpers::dumper_data()
"set1.insert(11);\n"
"set1.insert(22);\n"
"set1.insert(33);\n"
- "unused(&set1);\n"
"std::unordered_multiset<int> set2;\n"
"set2.insert(42);\n"
- "set2.insert(42);\n"
- "unused(&set2);\n")
+ "set2.insert(42);",
+
+ "&set1, &set2")
+ Cxx11Profile()
@@ -5151,13 +5255,16 @@ void tst_Dumpers::dumper_data()
+ Check("set2.0", "[0]", "42", "int")
+ Check("set2.1", "[1]", "42", "int");
+
QTest::newRow("StdInitializerList")
<< Data("#include <initializer_list>\n",
+
"auto initb = {true, false, false, true};\n"
"auto initi = {1, 2, 3};\n"
"auto inits = {\"1\", \"2\", \"3\"};\n"
- "std::initializer_list<int> empty;\n"
- "unused(&initb, &initi, &inits, &empty);\n")
+ "std::initializer_list<int> empty;",
+
+ "&initb, &initi, &inits, &empty")
+ Cxx11Profile()
@@ -5327,7 +5434,8 @@ void tst_Dumpers::dumper_data()
" struct { int i; int b; };\n"
" struct { float f; };\n"
" double d;\n"
- " } a = { { 42, 43 } };\n (void)a;")
+ " } a = { { 42, 43 } };",
+ "&a")
+ Check("a.d", FloatValue("9.1245819032257467e-313"), "double")
@@ -5341,14 +5449,17 @@ void tst_Dumpers::dumper_data()
QTest::newRow("Chars")
<< Data("#include <qglobal.h>\n",
+
"char c = -12;\n"
"signed char sc = -12;\n"
"unsigned char uc = -12;\n"
"qint8 qs = -12;\n"
- "quint8 qu = -12;\n"
- "unused(&c, &sc, &uc, &qs, &qu);\n")
+ "quint8 qu = -12;",
+
+ "&c, &sc, &uc, &qs, &qu")
+ CoreProfile()
+
+ Check("c", "-12", "char") // on all our platforms char is signed.
+ Check("sc", "-12", TypeDef("char", "signed char"))
+ Check("uc", "244", "unsigned char")
@@ -5362,12 +5473,14 @@ void tst_Dumpers::dumper_data()
"typedef char CHAR;\n"
"typedef wchar_t WCHAR;\n"
"#endif\n",
+
"char s[] = \"aöa\";\n"
"char t[] = \"aöax\";\n"
"wchar_t w[] = L\"aöa\";\n"
"CHAR ch[] = \"aöa\";\n"
- "WCHAR wch[] = L\"aöa\";\n"
- "unused(&s, &t, &w, &ch, &wch);\n")
+ "WCHAR wch[] = L\"aöa\";",
+
+ "&s, &t, &w, &ch, &wch")
+ CheckType("s", "char [5]") % NoCdbEngine
+ CheckType("s", "char [4]") % CdbEngine
@@ -5385,12 +5498,14 @@ void tst_Dumpers::dumper_data()
QTest::newRow("CharPointers")
<< Data("",
+
"const char *s = \"aöa\";\n"
"const char *t = \"a\\xc3\\xb6\";\n"
"unsigned char uu[] = { 'a', 153 /* ö Latin1 */, 'a' };\n"
"const unsigned char *u = uu;\n"
- "const wchar_t *w = L\"aöa\";\n"
- "unused(&s, &t, &uu, &u, &w);\n")
+ "const wchar_t *w = L\"aöa\";",
+
+ "&s, &t, &uu, &u, &w")
+ CheckType("u", "unsigned char *")
+ CheckType("uu", "unsigned char [3]")
@@ -5405,12 +5520,16 @@ void tst_Dumpers::dumper_data()
QTest::newRow("GccExtensions")
<< Data("",
+
"char v[8] = { 1, 2 };\n"
"char w __attribute__ ((vector_size (8))) = { 1, 2 };\n"
"int y[2] = { 1, 2 };\n"
- "int z __attribute__ ((vector_size (8))) = { 1, 2 };\n"
- "unused(&v, &w, &y, &z);\n")
+ "int z __attribute__ ((vector_size (8))) = { 1, 2 };",
+
+ "&v, &w, &y, &z")
+
+ NoCdbEngine
+
+ Check("v.0", "[0]", "1", "char")
+ Check("v.1", "[1]", "2", "char")
+ Check("w.0", "[0]", "1", "char")
@@ -5425,6 +5544,7 @@ void tst_Dumpers::dumper_data()
<< Data("#include <qglobal.h>\n"
"#include <limits.h>\n"
"#include <QString>\n",
+
"quint64 u64 = ULLONG_MAX;\n"
"qint64 s64 = LLONG_MAX;\n"
"quint32 u32 = UINT_MAX;\n"
@@ -5433,8 +5553,10 @@ void tst_Dumpers::dumper_data()
"qint64 s64s = LLONG_MIN;\n"
"quint32 u32s = 0;\n"
"qint32 s32s = INT_MIN;\n"
- "QString dummy; // needed to get namespace\n"
- "unused(&u64, &s64, &u32, &s32, &u64s, &s64s, &u32s, &s32s, &dummy);\n")
+ "QString dummy; // needed to get namespace",
+
+ "&u64, &s64, &u32, &s32, &u64s, &s64s, &u32s, &s32s, &dummy")
+
+ CoreProfile()
+ Check("u64", "18446744073709551615", TypeDef("unsigned int64", "@quint64"))
+ Check("s64", "9223372036854775807", TypeDef("int64", "@qint64"))
@@ -5448,15 +5570,19 @@ void tst_Dumpers::dumper_data()
QTest::newRow("Int128")
<< Data("#include <limits.h>\n",
+
"using typedef_s128 = __int128_t;\n"
"using typedef_u128 = __uint128_t;\n"
"__int128_t s128 = 12;\n"
"__uint128_t u128 = 12;\n"
"typedef_s128 ts128 = 12;\n"
- "typedef_u128 tu128 = 12;\n"
- "unused(&u128, &s128, &tu128, &ts128);\n")
+ "typedef_u128 tu128 = 12;",
+
+ "&u128, &s128, &tu128, &ts128")
+
// Sic! The expected type is what gcc 8.2.0 records.
+ GdbEngine
+
+ Check("s128", "12", "__int128")
+ Check("u128", "12", "__int128 unsigned")
+ Check("ts128", "12", "typedef_s128")
@@ -5465,10 +5591,15 @@ void tst_Dumpers::dumper_data()
QTest::newRow("Float")
<< Data("#include <QFloat16>\n",
- "qfloat16 f1 = 45.3f; unused(&f1);\n"
- "qfloat16 f2 = 45.1f; unused(&f2);\n")
+
+ "qfloat16 f1 = 45.3f;\n"
+ "qfloat16 f2 = 45.1f;",
+
+ "&f1, &f2")
+
+ CoreProfile()
+ QtVersion(0x50900)
+
// Using numpy:
// + Check("f1", "45.281", "@qfloat16")
// + Check("f2", "45.094", "@qfloat16");
@@ -5477,12 +5608,15 @@ void tst_Dumpers::dumper_data()
QTest::newRow("Enum")
- << Data("\n"
- "enum Foo { a = -1000, b, c = 1, d };\n",
- "Foo fa = a; unused(&fa);\n"
- "Foo fb = b; unused(&fb);\n"
- "Foo fc = c; unused(&fc);\n"
- "Foo fd = d; unused(&fd);\n")
+ << Data("enum Foo { a = -1000, b, c = 1, d };\n",
+
+ "Foo fa = a;\n"
+ "Foo fb = b;\n"
+ "Foo fc = c;\n"
+ "Foo fd = d;",
+
+ "&fa, &fb, &fc, &fd")
+
+ Check("fa", "a (-1000)", "Foo")
+ Check("fb", "b (-999)", "Foo")
+ Check("fc", "c (1)", "Foo")
@@ -5490,13 +5624,17 @@ void tst_Dumpers::dumper_data()
QTest::newRow("EnumFlags")
- << Data("\n"
- "enum Flags { one = 1, two = 2, four = 4 };\n",
- "Flags fone = one; unused(&fone);\n"
- "Flags fthree = (Flags)(one|two); unused(&fthree);\n"
- "Flags fmixed = (Flags)(two|8); unused(&fmixed);\n"
- "Flags fbad = (Flags)(24); unused(&fbad);\n")
+ << Data("enum Flags { one = 1, two = 2, four = 4 };\n",
+
+ "Flags fone = one;\n"
+ "Flags fthree = (Flags)(one|two);\n"
+ "Flags fmixed = (Flags)(two|8);\n"
+ "Flags fbad = (Flags)(24);",
+
+ "&fone, &fthree, &fmixed, &fbad")
+
+ NoCdbEngine
+
+ Check("fone", "one (1)", "Flags")
+ Check("fthree", "(one | two) (3)", "Flags")
+ Check("fmixed", "(two | unknown: 8) (10)", "Flags")
@@ -5512,20 +5650,31 @@ void tst_Dumpers::dumper_data()
" Enum2 e2 = Enum2(c2 | b2);\n"
" Enum3 e3 = Enum3(c3 | b3);\n"
"};\n",
- "E e;\n")
+
+ "E e;",
+
+ "&e")
+
+ NoCdbEngine
+
+ Check("e.e1", "(E::b1 | E::c1) (3)", "E::Enum1")
+ Check("e.e2", "(E::b2 | E::c2) (3)", "E::Enum2")
+ Check("e.e3", "(E::b3 | E::c3) (3)", "E::Enum3");
+
QTest::newRow("QSizePolicy")
<< Data("#include <QSizePolicy>\n",
+
"QSizePolicy qsp1;\n"
"qsp1.setHorizontalStretch(6);\n"
"qsp1.setVerticalStretch(7);\n"
- "QSizePolicy qsp2(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);\n")
+ "QSizePolicy qsp2(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);",
+
+ "&qsp1, &qsp2")
+
+ GuiProfile()
+ NoCdbEngine
+
+ Check("qsp1.horStretch", "6", "int")
+ Check("qsp1.verStretch", "7", "int")
+ Check("qsp2.horPolicy", "QSizePolicy::Preferred (GrowFlag|ShrinkFlag) (5)", "@QSizePolicy::Policy")
@@ -5534,19 +5683,20 @@ void tst_Dumpers::dumper_data()
QTest::newRow("Array")
<< Data("",
+
"double a1[3][4];\n"
"for (int i = 0; i != 3; ++i)\n"
" for (int j = 0; j != 3; ++j)\n"
- " a1[i][j] = i + 10 * j;\n"
- "unused(&a1);\n\n"
+ " a1[i][j] = i + 10 * j;\n\n"
"char a2[20] = { 0 };\n"
"a2[0] = 'a';\n"
"a2[1] = 'b';\n"
"a2[2] = 'c';\n"
"a2[3] = 'd';\n"
- "a2[4] = 0;\n"
- "unused(&a2);\n")
+ "a2[4] = 0;",
+
+ "&a1, &a2")
+ Check("a1", Pointer(), "double[3][4]")
+ Check("a1.0", "[0]", Pointer(), "double[4]")
@@ -5561,8 +5711,11 @@ void tst_Dumpers::dumper_data()
QTest::newRow("Array10Format")
<< Data("",
+
"int arr[4] = { 1, 2, 3, 4};\n"
- "int *nums = new int[4] { 1, 2, 3, 4};\n")
+ "int *nums = new int[4] { 1, 2, 3, 4};",
+
+ "&arr, &nums")
+ NoLldbEngine // FIXME: DumperOptions not handled yet.
+ DumperOptions("'formats':{'local.nums':12}") // Array10Format
@@ -5589,7 +5742,9 @@ void tst_Dumpers::dumper_data()
"Foo a3[10];\n"
"for (int i = 0; i < 5; ++i)\n"
- " a3[i].a = i;\n")
+ " a3[i].a = i;\n",
+
+ "&a1, &a2, &a3")
+ CoreProfile()
+ CheckType("a1", "@QString [20]")
@@ -5611,6 +5766,7 @@ void tst_Dumpers::dumper_data()
QTest::newRow("Bitfields")
<< Data("",
+
"enum E { V1, V2 };"
"struct S\n"
"{\n"
@@ -5626,8 +5782,9 @@ void tst_Dumpers::dumper_data()
" float f;\n"
" double d;\n"
" int i;\n"
- "} s;\n"
- "unused(&s);\n")
+ "} s;",
+
+ "&s")
+ Check("s", "", "S") % NoCdbEngine
+ Check("s.b", "0", "bool")
@@ -5658,11 +5815,14 @@ void tst_Dumpers::dumper_data()
" double min;\n"
" double max;\n"
"};\n",
+
"// In order to use this, switch on the 'qDump__Function' in dumper.py\n"
"Function func(\"x\", \"sin(x)\", 0, 1);\n"
"func.max = 10;\n"
"func.f = \"cos(x)\";\n"
- "func.max = 7;\n")
+ "func.max = 7;\n",
+
+ "&func")
+ CoreProfile()
@@ -5702,11 +5862,13 @@ void tst_Dumpers::dumper_data()
"}\n"
"typedef quint32 myType1;\n"
"typedef unsigned int myType2;\n",
+
"myType1 t1 = 0;\n"
"myType2 t2 = 0;\n"
"ns::vl j = 1000;\n"
- "ns::verylong k = 1000;\n"
- "unused(&t1, &t2, &j, &k);\n")
+ "ns::verylong k = 1000;",
+
+ "&t1, &t2, &j, &k")
+ CoreProfile()
+ BigArrayProfile()
@@ -5721,12 +5883,15 @@ void tst_Dumpers::dumper_data()
QTest::newRow("Typedef2")
<< Data("#include <vector>\n"
"template<typename T> using TVector = std::vector<T>;\n",
- "std::vector<bool> b1(10); unused(&b1);\n"
- "std::vector<int> b2(10); unused(&b2);\n"
- "TVector<bool> b3(10); unused(&b3);\n"
- "TVector<int> b4(10); unused(&b4);\n"
- "TVector<bool> b5(10); unused(&b5);\n"
- "TVector<int> b6(10); unused(&b6);\n")
+
+ "std::vector<bool> b1(10);\n"
+ "std::vector<int> b2(10);\n"
+ "TVector<bool> b3(10);\n"
+ "TVector<int> b4(10);\n"
+ "TVector<bool> b5(10);\n"
+ "TVector<int> b6(10);",
+
+ "&b1, &b2, &b3, &b4, &b5, &b6")
+ NoCdbEngine
@@ -5745,7 +5910,11 @@ void tst_Dumpers::dumper_data()
QTest::newRow("Typedef3")
<< Data("typedef enum { Value } Unnamed;\n"
"struct Foo { Unnamed u = Value; };\n",
- "Foo foo;")
+
+ "Foo foo;",
+
+ "&foo")
+
+ Cxx11Profile()
+ Check("foo.u", "Value (0)", "Unnamed");
@@ -5753,11 +5922,10 @@ void tst_Dumpers::dumper_data()
QTest::newRow("Struct")
<< Data(fooData,
- "Foo f(3);\n"
- "unused(&f);\n\n"
+ "Foo f(3);\n\n"
+ "Foo *p = new Foo();",
- "Foo *p = new Foo();\n"
- "unused(&p);\n")
+ "&f, &p")
+ CoreProfile()
+ Check("f", "", "Foo")
@@ -5773,19 +5941,24 @@ void tst_Dumpers::dumper_data()
" Foo() : x(143) {}\n"
" int foo() {\n"
" BREAK;\n"
+ " unused(&x);\n"
" return x;\n"
" }\n\n"
" int x;\n"
"};\n",
+
"Foo f;\n"
- "f.foo();\n")
+ "f.foo();",
+
+ "&f, &f.x")
+ Check("this", "", "Foo")
+ Check("this.x", "143", "int");
QTest::newRow("Union")
- << Data("union U { int a; int b; };", "U u;\n"
- "unused(&u);\n")
+ << Data("union U { int a; int b; };",
+ "U u;",
+ "&u")
+ Check("u", "", "U")
+ CheckType("u.a", "int")
+ CheckType("u.b", "int");
@@ -5813,10 +5986,13 @@ void tst_Dumpers::dumper_data()
<< Data("typedef void *VoidPtr;\n"
"typedef const void *CVoidPtr;\n"
"struct A {};\n",
+
"A a;\n"
"VoidPtr p = &a;\n"
- "CVoidPtr cp = &a;\n"
- "unused(&a, &p, &cp);\n")
+ "CVoidPtr cp = &a;",
+
+ "&a, &p, &cp")
+
+ Check("a", "", "A")
+ Check("cp", Pointer(), TypeDef("void*", "CVoidPtr"))
+ Check("p", Pointer(), TypeDef("void*", "VoidPtr"));
@@ -5834,31 +6010,28 @@ void tst_Dumpers::dumper_data()
"const int &b1 = a1;\n"
"typedef int &Ref1;\n"
"const int c1 = 44;\n"
- "const Ref1 d1 = a1;\n"
- "unused(&a1, &b1, &c1, &d1);\n\n"
+ "const Ref1 d1 = a1;\n\n"
"string a2 = \"hello\";\n"
"const string &b2 = fooxx();\n"
"typedef string &Ref2;\n"
"const string c2= \"world\";\n"
- "const Ref2 d2 = a2;\n"
- "unused(&a2, &b2, &c2, &d2);\n\n"
+ "const Ref2 d2 = a2;\n\n"
"QString a3 = QLatin1String(\"hello\");\n"
"const QString &b3 = a3;\n"
"typedef QString &Ref3;\n"
- "const Ref3 d3 = const_cast<Ref3>(a3);\n"
- "unused(&a3, &b3, &d3);\n\n"
+ "const Ref3 d3 = const_cast<Ref3>(a3);\n\n"
"Foo a4(12);\n"
"const Foo &b4 = a4;\n"
"typedef Foo &Ref4;\n"
- "const Ref4 d4 = const_cast<Ref4>(a4);\n"
- "unused(&a4, &b4, &d4);\n"
+ "const Ref4 d4 = const_cast<Ref4>(a4);\n\n"
"int *q = 0;\n"
- "int &qq = *q;\n"
- "unused(&qq, &q);\n")
+ "int &qq = *q;",
+
+ "&a1, &b1, &c1, &d1, &a2, &b2, &c2, &d2, &a3, &b3, &d3, &a4, &b4, &d4, &qq, &q")
+ CoreProfile()
+ NoCdbEngine // The Cdb has no information about references
@@ -5886,14 +6059,19 @@ void tst_Dumpers::dumper_data()
+ Check("qq", "<null reference>", "int &");
+
QTest::newRow("DynamicReference")
<< Data("struct BaseClass { virtual ~BaseClass() {} };\n"
"struct DerivedClass : BaseClass {};\n",
+
"DerivedClass d;\n"
"BaseClass *b1 = &d;\n"
- "BaseClass &b2 = d;\n"
- "unused(&d, &b1, &b2);\n")
+ "BaseClass &b2 = d;\n",
+
+ "&d, &b1, &b2")
+
+ NoCdbEngine // The Cdb has no information about references
+
+ CheckType("b1", "DerivedClass") // autoderef
+ CheckType("b2", "DerivedClass &");
@@ -5918,16 +6096,21 @@ void tst_Dumpers::dumper_data()
QTest::newRow("LongEvaluation2")
<< Data("",
- "const int N = 10000;\n"
+
+ "const int N = 1000;\n"
"int bigv[N];\n"
"for (int i = 0; i < N; ++i)\n"
- " bigv[i] = i;\n"
- "unused(&bigv[10]);\n")
+ " bigv[i] = i;\n",
+
+ "&N, &bigv[10]")
+
+ BigArrayProfile()
- + Check("N", "10000", "int")
- + CheckType("bigv", "int [10000]")
+
+ + Check("N", "1000", "int")
+ + CheckType("bigv", "int [1000]")
+ Check("bigv.0", "[0]", "0", "int")
- + Check("bigv.9999", "[9999]", "9999", "int");
+ + Check("bigv.999", "[999]", "999", "int");
+
// QTest::newRow("Fork")
// << Data(
@@ -5952,12 +6135,12 @@ void tst_Dumpers::dumper_data()
"Class x;\n"
"func_t f = &Class::testFunctionPointerHelper;\n"
- "int a1 = (x.*f)(43);\n"
- "unused(&a1);\n"
+ "int a1 = (x.*f)(43);\n\n"
"member_t m = &Class::a;\n"
- "int a2 = x.*m;\n"
- "unused(&a2);\n")
+ "int a2 = x.*m;",
+
+ "&x, &f, &m, &a1, &a2")
+ CheckType("f", TypeDef("<function>", "func_t"))
+ CheckType("m", TypeDef("int*", "member_t"));
@@ -5970,9 +6153,14 @@ void tst_Dumpers::dumper_data()
" int dummy = 2;\n"
" unused(&f, &dummy);\n"
"}\n",
+
"Foo f(12);\n"
- "testPassByReference(f);\n")
+ "testPassByReference(f);",
+
+ "&f")
+
+ CoreProfile()
+
+ NoCdbEngine // The Cdb has no information about references
+ CheckType("f", "Foo &")
+ Check("f.a", "12", "int");
@@ -5981,13 +6169,17 @@ void tst_Dumpers::dumper_data()
QTest::newRow("BigInt")
<< Data("#include <QString>\n"
"#include <limits>\n",
+
"qint64 a = Q_INT64_C(0xF020304050607080);\n"
"quint64 b = Q_UINT64_C(0xF020304050607080);\n"
"quint64 c = std::numeric_limits<quint64>::max() - quint64(1);\n"
"qint64 d = c;\n"
- "QString dummy;\n"
- "unused(&a, &b, &c, &d, &dummy);\n")
+ "QString dummy;\n",
+
+ "&a, &b, &c, &d, &dummy")
+
+ CoreProfile()
+
+ Check("a", "-1143861252567568256", TypeDef("int64", "@qint64"))
+ Check("b", "17302882821141983360", TypeDef("unsigned int64", "@quint64"))
+ Check("c", "18446744073709551614", TypeDef("unsigned int64", "@quint64"))
@@ -5995,7 +6187,8 @@ void tst_Dumpers::dumper_data()
QTest::newRow("Hidden")
- << Data("#include <QString>\n",
+ << Data("#include <QString>",
+
"int n = 1;\n"
"{\n"
" QString n = \"2\";\n"
@@ -6005,9 +6198,12 @@ void tst_Dumpers::dumper_data()
" unused(&n);\n"
" }\n"
" unused(&n);\n"
- "}\n"
- "unused(&n);\n")
+ "}\n",
+
+ "&n")
+
+ CoreProfile()
+
+ Check("n", FloatValue("3.5"), "double")
+ Check("n@1", "\"2\"", "@QString")
+ Check("n@2", "1", "int");
@@ -6018,26 +6214,34 @@ void tst_Dumpers::dumper_data()
"struct X { X() : a(2), b(3) {} int a, b; };\n"
"X testRValueReferenceHelper1() { return X(); }\n"
"X testRValueReferenceHelper2(X &&x) { return x; }\n",
+
"X &&x1 = testRValueReferenceHelper1();\n"
"X &&x2 = testRValueReferenceHelper2(std::move(x1));\n"
"X &&x3 = testRValueReferenceHelper2(testRValueReferenceHelper1());\n"
"X y1 = testRValueReferenceHelper1();\n"
"X y2 = testRValueReferenceHelper2(std::move(y1));\n"
- "X y3 = testRValueReferenceHelper2(testRValueReferenceHelper1());\n"
- "unused(&x1, &x2, &x3, &y1, &y2, &y3);\n")
+ "X y3 = testRValueReferenceHelper2(testRValueReferenceHelper1());",
+
+ "&x1, &x2, &x3, &y1, &y2, &y3")
+
+ Cxx11Profile()
+
+ Check("y1", "", "X")
+ Check("y2", "", "X")
+ Check("y3", "", "X");
+
QTest::newRow("RValueReference2")
<< Data(rvalueData)
+
+ DwarfProfile(2)
- + NoCdbEngine // The Cdb has no information about references
+ + NoCdbEngine // Cdb has no information about references.
+
+ Check("x1", "", "X &")
+ Check("x2", "", "X &")
+ Check("x3", "", "X &");
+
// GCC emits rvalue references with DWARF-4, i.e. after 4.7.4.
// GDB doesn't understand them,
// https://sourceware.org/bugzilla/show_bug.cgi?id=14441
@@ -6046,27 +6250,37 @@ void tst_Dumpers::dumper_data()
QTest::newRow("RValueReference4")
<< Data(rvalueData)
+
+ DwarfProfile(4)
+ LldbEngine
+
+ Check("x1", "", "X &")
+ Check("x2", "", "X &")
+ Check("x3", "", "X &");
+
QTest::newRow("RValueReference")
<< Data("struct S { int a = 32; };",
- "auto foo = [](int && i, S && s) { BREAK; return i + s.a; };\n"
- "foo(int(1), S());\n")
+
+ "auto foo = [](int && i, S && s) { BREAK; unused(&i, &s.a); return i + s.a; };\n"
+ "foo(1, S());",
+
+ "&foo")
+
+ Cxx11Profile()
+ GdbVersion(80200)
+
+ Check("i", "1", "int &&") % NoCdbEngine
+ Check("i", "1", "int") % CdbEngine
+ CheckType("s", "S &&") % NoCdbEngine
+ CheckType("s", "S") % CdbEngine
+ Check("s.a", "32", "int");
+
QTest::newRow("SSE")
<< Data("#include <xmmintrin.h>\n"
"#include <stddef.h>\n",
+
"float a[4];\n"
"float b[4];\n"
"int i;\n"
@@ -6076,9 +6290,12 @@ void tst_Dumpers::dumper_data()
"}\n"
"__m128 sseA, sseB;\n"
"sseA = _mm_loadu_ps(a);\n"
- "sseB = _mm_loadu_ps(b);\n"
- "unused(&i, &sseA, &sseB);\n")
+ "sseB = _mm_loadu_ps(b);",
+
+ "&i, &sseA, &sseB")
+
+ Profile("QMAKE_CXXFLAGS += -msse2")
+
+ CheckType("sseA", "__m128")
+ Check("sseA.2", "[2]", FloatValue("4"), "float")
+ CheckType("sseB", "__m128");
@@ -6089,13 +6306,13 @@ void tst_Dumpers::dumper_data()
"#include <QStringList>\n",
"boost::optional<int> i0, i1;\n"
- "i1 = 1;\n"
- "unused(&i0, &i1);\n\n"
+ "i1 = 1;\n\n"
"boost::optional<QStringList> sl0, sl;\n"
"sl = (QStringList() << \"xxx\" << \"yyy\");\n"
- "sl.get().append(\"zzz\");\n"
- "unused(&sl);\n")
+ "sl.get().append(\"zzz\");",
+
+ "&i0, &i1, &sl")
+ CoreProfile()
+ BoostProfile()
@@ -6109,11 +6326,13 @@ void tst_Dumpers::dumper_data()
QTest::newRow("BoostSharedPtr")
<< Data("#include <QStringList>\n"
"#include <boost/shared_ptr.hpp>\n",
+
"boost::shared_ptr<int> s;\n"
"boost::shared_ptr<int> i(new int(43));\n"
"boost::shared_ptr<int> j = i;\n"
- "boost::shared_ptr<QStringList> sl(new QStringList(QStringList() << \"HUH!\"));\n"
- "unused(&s, &i, &j, &sl);\n")
+ "boost::shared_ptr<QStringList> sl(new QStringList(QStringList() << \"HUH!\"));",
+
+ "&s, &i, &j, &sl")
+ CoreProfile()
+ BoostProfile()
@@ -6128,6 +6347,7 @@ void tst_Dumpers::dumper_data()
QTest::newRow("BoostGregorianDate")
<< Data("#include <boost/date_time.hpp>\n"
"#include <boost/date_time/gregorian/gregorian.hpp>\n",
+
"using namespace boost;\n"
"using namespace gregorian;\n"
"date d(2005, Nov, 29);\n"
@@ -6139,9 +6359,12 @@ void tst_Dumpers::dumper_data()
"// Also end of the month (expected in boost)\n"
"date d4 = d += months(1);\n"
"// Not where we started (expected in boost)\n"
- "date d5 = d -= months(4);\n"
- "unused(&d1, &d2, &d3, &d4, &d5);\n")
+ "date d5 = d -= months(4);",
+
+ "&d, &d0, &d1, &d2, &d3, &d4, &d5")
+
+ BoostProfile()
+
+ Check("d0", "Tue Nov 29 2005", "boost::gregorian::date")
+ Check("d1", "Thu Dec 29 2005", "boost::gregorian::date")
+ Check("d2", "Sun Jan 29 2006", "boost::gregorian::date")
@@ -6154,13 +6377,17 @@ void tst_Dumpers::dumper_data()
<< Data("#include <boost/date_time.hpp>\n"
"#include <boost/date_time/gregorian/gregorian.hpp>\n"
"#include <boost/date_time/posix_time/posix_time.hpp>\n",
+
"using namespace boost;\n"
"using namespace posix_time;\n"
"time_duration d1(1, 0, 0);\n"
"time_duration d2(0, 1, 0);\n"
- "time_duration d3(0, 0, 1);\n"
- "unused(&d1, &d2, &d3);\n")
+ "time_duration d3(0, 0, 1);",
+
+ "&d1, &d2, &d3")
+
+ BoostProfile()
+
+ Check("d1", "01:00:00", "boost::posix_time::time_duration")
+ Check("d2", "00:01:00", "boost::posix_time::time_duration")
+ Check("d3", "00:00:01", "boost::posix_time::time_duration");
@@ -6168,14 +6395,18 @@ void tst_Dumpers::dumper_data()
QTest::newRow("BoostBimap")
<< Data("#include <boost/bimap.hpp>\n",
+
"typedef boost::bimap<int, int> B;\n"
"B b;\n"
"b.left.insert(B::left_value_type(1, 2));\n"
"B::left_const_iterator it = b.left.begin();\n"
"int l = it->first;\n"
- "int r = it->second;\n"
- "unused(&l, &r);\n")
+ "int r = it->second;\n",
+
+ "&l, &r")
+
+ BoostProfile()
+
+ Check("b", "<1 items>", TypeDef("boost::bimaps::bimap<int,int,boost::mpl::na,"
"boost::mpl::na,boost::mpl::na>", "B"));
@@ -6187,11 +6418,15 @@ void tst_Dumpers::dumper_data()
"using namespace boost;\n"
"using namespace gregorian;\n"
"using namespace posix_time;\n",
+
"ptime p1(date(2002, 1, 10), time_duration(1, 0, 0));\n"
"ptime p2(date(2002, 1, 10), time_duration(0, 0, 0));\n"
- "ptime p3(date(1970, 1, 1), time_duration(0, 0, 0));\n"
- "unused(&p1, &p2, &p3);\n")
+ "ptime p3(date(1970, 1, 1), time_duration(0, 0, 0));",
+
+ "&p1, &p2, &p3")
+
+ BoostProfile()
+
+ Check("p1", "Thu Jan 10 01:00:00 2002", "boost::posix_time::ptime")
+ Check("p2", "Thu Jan 10 00:00:00 2002", "boost::posix_time::ptime")
+ Check("p3", "Thu Jan 1 00:00:00 1970", "boost::posix_time::ptime");
@@ -6225,7 +6460,9 @@ void tst_Dumpers::dumper_data()
"boost::unordered_set<std::string> s2;\n"
"s2.insert(\"abc\");\n"
- "s2.insert(\"def\");\n")
+ "s2.insert(\"def\");",
+
+ "&s1, &s2")
+ BoostProfile()
@@ -6252,7 +6489,9 @@ void tst_Dumpers::dumper_data()
"boost::variant<int, double> id2 = double(2);\n"
"boost::variant<int, std::string> is1 = int(1);\n"
- "boost::variant<int, std::string> is2 = std::string(\"sss\");\n")
+ "boost::variant<int, std::string> is2 = std::string(\"sss\");",
+
+ "&ch1, &ch2, &if1, &if2, &id1, &id2, &is1, &is2")
+ BoostProfile()
@@ -6272,27 +6511,31 @@ void tst_Dumpers::dumper_data()
QTest::newRow("Eigen")
<< Data("#ifdef HAS_EIGEN\n"
- "#include <Eigen/Core>\n"
- "#endif\n",
- "#ifdef HAS_EIGEN\n"
- "using namespace Eigen;\n"
- "Vector3d zero = Vector3d::Zero();\n"
- "Matrix3d constant = Matrix3d::Constant(5);\n"
+ "#include <Eigen/Core>\n"
+ "#endif\n",
+
+ "#ifdef HAS_EIGEN\n"
+ "using namespace Eigen;\n"
+ "Vector3d zero = Vector3d::Zero();\n"
+ "Matrix3d constant = Matrix3d::Constant(5);\n"
+
+ "MatrixXd dynamicMatrix(5, 2);\n"
+ "dynamicMatrix << 1, 2, 3, 4, 5, 6, 7, 8, 9, 10;\n"
- "MatrixXd dynamicMatrix(5, 2);\n"
- "dynamicMatrix << 1, 2, 3, 4, 5, 6, 7, 8, 9, 10;\n"
+ "Matrix<double, 2, 5, ColMajor> colMajorMatrix;\n"
+ "colMajorMatrix << 1, 2, 3, 4, 5, 6, 7, 8, 9, 10;\n"
- "Matrix<double, 2, 5, ColMajor> colMajorMatrix;\n"
- "colMajorMatrix << 1, 2, 3, 4, 5, 6, 7, 8, 9, 10;\n"
+ "Matrix<double, 2, 5, RowMajor> rowMajorMatrix;\n"
+ "rowMajorMatrix << 1, 2, 3, 4, 5, 6, 7, 8, 9, 10;\n"
- "Matrix<double, 2, 5, RowMajor> rowMajorMatrix;\n"
- "rowMajorMatrix << 1, 2, 3, 4, 5, 6, 7, 8, 9, 10;\n"
+ "VectorXd vector(3);\n"
+ "vector << 1, 2, 3;\n"
+ "#else\n"
+ "int zero, dynamicMatrix, constant, colMajorMatrix, rowMajorMatrix, vector;\n"
+ "skipall = true;\n"
+ "#endif\n",
- "VectorXd vector(3);\n"
- "vector << 1, 2, 3;\n"
- "#else\n"
- "skipall = true;\n"
- "#endif\n")
+ "&zero, &dynamicMatrix, &constant, &colMajorMatrix, &rowMajorMatrix, &vector")
+ EigenProfile()
@@ -6323,9 +6566,13 @@ void tst_Dumpers::dumper_data()
// https://bugreports.qt.io/browse/QTCREATORBUG-3611
QTest::newRow("Bug3611")
<< Data("",
+
"typedef unsigned char byte;\n"
"byte f = '2';\n"
- "int *x = (int*)&f;\n")
+ "int *x = (int*)&f;",
+
+ "&f, &x")
+
+ Check("f", "50", TypeDef("unsigned char", "byte"));
@@ -6336,6 +6583,7 @@ void tst_Dumpers::dumper_data()
" int id;\n"
" double dvalue;\n"
"};",
+
"QMap<int, CustomStruct> map;\n"
"CustomStruct cs1;\n"
"cs1.id = 1;\n"
@@ -6344,8 +6592,12 @@ void tst_Dumpers::dumper_data()
"cs2.id = -1;\n"
"map.insert(cs1.id, cs1);\n"
"map.insert(cs2.id, cs2);\n"
- "QMap<int, CustomStruct>::iterator it = map.begin();\n")
+ "QMap<int, CustomStruct>::iterator it = map.begin();",
+
+ "&map, &cs1, &cs2, &it")
+
+ CoreProfile()
+
+ Check("map", "<2 items>", "@QMap<int, CustomStruct>")
+ Check("map.0.key", "-1", "int")
+ CheckType("map.0.value", "CustomStruct")
@@ -6391,9 +6643,14 @@ void tst_Dumpers::dumper_data()
" BREAK;\n"
" unused(&url);\n"
"}\n",
- " QUrl url(QString(\"http://127.0.0.1/\"));\n"
- " helper(url, qtversion);\n")
+
+ " QUrl url(QString(\"http://127.0.0.1/\"));\n"
+ " helper(url, qtversion);",
+
+ "&url")
+
+ NetworkProfile()
+
+ Check("raw", "<0 items>", "@QList<@QByteArray>")
+ CheckType("request", "@QNetworkRequest")
+ Check("url", "\"http://127.0.0.1/\"", "@QUrl &") % NoCdbEngine
@@ -6406,14 +6663,17 @@ void tst_Dumpers::dumper_data()
"struct S2 : S1 { };\n"
"typedef struct S3 { int m1; int m2; } S3;\n"
"struct S4 : S3 { };\n",
+
"S2 s2;\n"
"s2.m1 = 5;\n"
"S4 s4;\n"
"s4.m1 = 5;\n"
"S1 a1[10];\n"
"typedef S1 Array[10];\n"
- "Array a2;\n"
- "unused(&s2, &s4, &a1, &a2);\n")
+ "Array a2;",
+
+ "&s2, &s4, &a1, &a2")
+
+ CheckType("a1", "S1 [10]")
+ CheckType("a2", TypeDef("S1 [10]", "Array"))
+ CheckType("s2", "S2")
@@ -6429,9 +6689,13 @@ void tst_Dumpers::dumper_data()
// https://bugreports.qt.io/browse/QTCREATORBUG-6465
QTest::newRow("Bug6465")
<< Data("",
+
"typedef char Foo[20];\n"
"Foo foo = \"foo\";\n"
- "char bar[20] = \"baz\";\n")
+ "char bar[20] = \"baz\";",
+
+ "&foo, &bar")
+
+ CheckType("bar", "char[20]");
@@ -6446,7 +6710,9 @@ void tst_Dumpers::dumper_data()
"};\n",
"MyFile file(\"/tmp/tt\");\n"
- "file.setObjectName(\"A file\");\n")
+ "file.setObjectName(\"A file\");",
+
+ "&file")
+ CoreProfile()
+ QtVersion(0x50000)
@@ -6519,8 +6785,10 @@ void tst_Dumpers::dumper_data()
" int b;\n"
"};\n",
"Derived d;\n"
- "Base *b = &d;\n"
- "unused(&d, &b);\n")
+ "Base *b = &d;\n",
+
+ "&d, &b")
+
+ Check("b.@1.a", "a", "21", "int")
+ Check("b.b", "b", "42", "int");
@@ -6550,9 +6818,10 @@ void tst_Dumpers::dumper_data()
"Derived d;\n"
"Container c(&d); // c.b2 has wrong address\n"
- "unused(&c);\n"
- "Base2 *b2 = &d; // This has the right address\n"
- "unused(&b2);\n")
+ "Base2 *b2 = &d; // This has the right address\n",
+
+ "&d, &b2, &c")
+
+ Check("c.b2.@1.foo", "42", "int")
+ Check("c.b2.@2.bar", "43", "int")
+ Check("c.b2.baz", "84", "int")
@@ -6585,11 +6854,16 @@ void tst_Dumpers::dumper_data()
" BREAK;\n"
" unused(obj);\n"
"}\n",
+
"Circle *circle = new Circle(1.5, -2.5, 3.0);\n"
"Object *obj = circle;\n"
"helper(circle);\n"
- "helper(obj);\n")
+ "helper(obj);",
+
+ "&obj, &circle")
+
+ NoCdbEngine
+
+ CheckType("obj", "Circle");
@@ -6601,6 +6875,7 @@ void tst_Dumpers::dumper_data()
"#include <string>\n"
"using namespace std;\n"
"typedef map<string, list<string> > map_t;\n",
+
"map_t m;\n"
"m[\"one\"].push_back(\"a\");\n"
"m[\"one\"].push_back(\"b\");\n"
@@ -6608,7 +6883,10 @@ void tst_Dumpers::dumper_data()
"m[\"two\"].push_back(\"1\");\n"
"m[\"two\"].push_back(\"2\");\n"
"m[\"two\"].push_back(\"3\");\n"
- "map_t::const_iterator it = m.begin();\n")
+ "map_t::const_iterator it = m.begin();",
+
+ "&m, &it")
+
+ Check("m", "<2 items>", TypeDef("std::map<std::string, std::list<std::string>>","map_t"))
+ Check("m.0.first", "\"one\"", "std::string")
+ Check("m.0.second", "<3 items>", "std::list<std::string>")
@@ -6629,6 +6907,7 @@ void tst_Dumpers::dumper_data()
+ CheckSet({{"it.second", "<3 items>", "std::list<std::string>"},
{"it.0.second", "<3 items>", "std::list<std::string>"}});
+
QTest::newRow("Varargs")
<< Data("#include <stdarg.h>\n"
"void test(const char *format, ...)\n"
@@ -6639,9 +6918,13 @@ void tst_Dumpers::dumper_data()
" double f = va_arg(arg, double);\n"
" va_end(arg);\n"
" BREAK;\n"
- " unused(&i, &f);\n"
+ " unused(&i, &f, &arg);\n"
"}\n",
- "test(\"abc\", 1, 2.0);\n")
+
+ "test(\"abc\", 1, 2.0);",
+
+ "")
+
+ Check("format", "\"abc\"", "char *")
+ Check("i", "1", "int")
+ Check("f", FloatValue("2"), "double");
@@ -6670,22 +6953,28 @@ void tst_Dumpers::dumper_data()
"struct C : virtual A { int c = 3; double cc = 3; };\n"
"struct D : virtual B, virtual C { int d = 4; };\n";
+
QTest::newRow("Inheritance")
<< Data(inheritanceData,
+
"Combined c;\n"
"c.S1::a = 42;\n"
"c.S2::a = 43;\n"
"c.S1::v = 44;\n"
- "c.S2::v = 45;\n"
- "unused(&c.S2::v);\n"
+ "c.S2::v = 45;\n\n"
+
"TT tt;\n"
"tt.T1::v = 44;\n"
"tt.T2::v = 45;\n"
- "unused(&tt.T2::v);\n"
- "D dd; unused(&dd);\n"
- "D *dp = new D; unused(&dp);\n"
- "D &dr = dd; unused(&dr);\n")
+ "D dd;\n\n"
+
+ "D *dp = new D;\n"
+ "D &dr = dd;",
+
+ "&c.S2::v, &tt.T2::v, &dp, &dr")
+
+ Cxx11Profile()
+
+ Check("c.c", "1", "int")
+ CheckSet({{"c.@1.@2.a", "42", "int"}, // LLDB vs GDB vs ..
{"c.@1.@1.a", "42", "int"}})
@@ -6723,7 +7012,7 @@ void tst_Dumpers::dumper_data()
QTest::newRow("Gdb13393")
<< Data(
- "struct Base {\n"
+ "\nstruct Base {\n"
" Base() : a(1) {}\n"
" virtual ~Base() {} // Enforce type to have RTTI\n"
" int a;\n"
@@ -6738,11 +7027,11 @@ void tst_Dumpers::dumper_data()
" const Base *ptrConst;\n"
" Base &ref;\n"
" const Base &refConst;\n"
- " S(Derived &d)\n"
- " : ptr(&d), ptrConst(&d), ref(d), refConst(d)\n"
- " {}\n"
- " };\n"
- ,
+ " S(Derived &d)\n"
+ " : ptr(&d), ptrConst(&d), ref(d), refConst(d)\n"
+ " {}\n"
+ "};\n",
+
"Derived d;\n"
"S s(d);\n"
"Base *ptr = &d;\n"
@@ -6754,8 +7043,9 @@ void tst_Dumpers::dumper_data()
"boost::shared_ptr<Base> sharedPtr(new Derived());\n"
"#else\n"
"int sharedPtr = 1;\n"
- "#endif\n"
- "unused(&ptrConst, &ref, &refConst, &ptrToPtr, &sharedPtr, &s);\n")
+ "#endif\n",
+
+ "&d, &s, &ptrConst, &ref, &refConst, &ptrToPtr, &sharedPtr")
+ GdbEngine
+ GdbVersion(70500)
@@ -6793,11 +7083,14 @@ void tst_Dumpers::dumper_data()
// http://sourceware.org/ml/gdb-patches/2011-12/msg00420.html
QTest::newRow("Gdb10586")
<< Data("",
+
"struct Test {\n"
" struct { int a; float b; };\n"
" struct { int c; float d; };\n"
- "} v = {{1, 2}, {3, 4}};\n"
- "unused(&v);\n")
+ "} v = {{1, 2}, {3, 4}};\n",
+
+ "&v")
+
+ Check("v", "", "Test") % NoCdbEngine
+ Check("v", "", TypePattern("main::.*::Test")) % CdbEngine
//+ Check("v.a", "1", "int") % GdbVersion(0, 70699)
@@ -6808,10 +7101,12 @@ void tst_Dumpers::dumper_data()
QTest::newRow("Gdb10586eclipse")
<< Data("",
+
"struct { int x; struct { int a; }; struct { int b; }; } "
" v = {1, {2}, {3}};\n"
- "struct S { int x, y; } n = {10, 20};\n"
- "unused(&v, &n);\n")
+ "struct S { int x, y; } n = {10, 20};\n",
+
+ "&v, &n")
+ Check("v", "", "{...}") % GdbEngine
+ Check("v", "", TypePattern(".*anonymous .*")) % LldbEngine
@@ -6833,13 +7128,16 @@ void tst_Dumpers::dumper_data()
QTest::newRow("StdInt")
<< Data("#include <stdint.h>\n",
+
"uint8_t u8 = 64;\n"
"int8_t s8 = 65;\n"
"uint16_t u16 = 66;\n"
"int16_t s16 = 67;\n"
"uint32_t u32 = 68;\n"
- "int32_t s32 = 69;\n"
- "unused(&u8, &s8, &u16, &s16, &u32, &s32);\n")
+ "int32_t s32 = 69;\n",
+
+ "&u8, &s8, &u16, &s16, &u32, &s32")
+
+ Check("u8", "64", TypeDef("unsigned char", "uint8_t"))
+ Check("s8", "65", TypeDef("char", "int8_t"))
+ Check("u16", "66", TypeDef("unsigned short", "uint16_t"))
@@ -6847,10 +7145,12 @@ void tst_Dumpers::dumper_data()
+ Check("u32", "68", TypeDef("unsigned int", "uint32_t"))
+ Check("s32", "69", TypeDef("int", "int32_t"));
+
QTest::newRow("QPolygon")
<< Data("#include <QGraphicsScene>\n"
"#include <QGraphicsPolygonItem>\n"
"#include <QApplication>\n",
+
"QApplication app(argc, argv);\n"
"QGraphicsScene sc;\n"
"QPolygonF pol;\n"
@@ -6859,12 +7159,16 @@ void tst_Dumpers::dumper_data()
"pol.append(QPointF(3, 3));\n"
"pol.append(QPointF(2, 4));\n"
"pol.append(QPointF(1, 4));\n"
- "QGraphicsPolygonItem *p = sc.addPolygon(pol);\n"
- "unused(&app, &p);\n")
+ "QGraphicsPolygonItem *p = sc.addPolygon(pol);",
+
+ "&app, &p")
+
+ GuiProfile()
+
+ Check("pol", "<5 items>", "@QPolygonF")
+ Check("p", "<5 items>", "@QGraphicsPolygonItem");
+
QTest::newRow("QJson")
<< Data("#include <QString>\n"
"#if QT_VERSION >= 0x050000\n"
@@ -6873,6 +7177,7 @@ void tst_Dumpers::dumper_data()
"#include <QJsonValue>\n"
"#include <QVariantMap>\n"
"#endif\n",
+
"#if QT_VERSION >= 0x050000\n"
"QJsonObject ob = QJsonObject::fromVariantMap({\n"
" {\"a\", 1},\n"
@@ -6905,14 +7210,17 @@ void tst_Dumpers::dumper_data()
" c.append(QJsonValue(-qint64(1u << i) + 1));\n"
" c.append(QJsonValue(-qint64(1u << i)));\n"
" c.append(QJsonValue(-qint64(1u << i) - 1));\n"
- "}\n"
- "\n"
+ "}"
"unused(&ob,&b,&a);\n"
- "#endif\n")
+ "#endif\n",
+
+ "")
+
+ Cxx11Profile()
+ CoreProfile()
+ QtVersion(0x50000)
+ MsvcVersion(1900)
+
+ Check("a", "<6 items>", "@QJsonArray")
+ Check("a.0", "[0]", "1", "QJsonValue (Number)")
+ Check("a.1", "[1]", "\"asd\"", "QJsonValue (String)")
@@ -6953,11 +7261,13 @@ void tst_Dumpers::dumper_data()
+ Check("ob.3", "\"d\"", "<1 items>", "QJsonValue (Object)")
+ Check("ob.4", "\"s\"", "\"ssss\"", "QJsonValue (String)");
- QTest::newRow("QV4")
+
+ QTest::newRow("Q&qstring_literal_temp,V4")
<< Data("#include <private/qv4value_p.h>\n"
"#include <private/qjsvalue_p.h>\n"
"#include <QCoreApplication>\n"
"#include <QJSEngine>\n",
+
"QCoreApplication app(argc, argv);\n"
"QJSEngine eng;\n\n"
"//QV4::Value q0; unused(&q0); // Uninitialized data.\n\n"
@@ -6965,29 +7275,33 @@ void tst_Dumpers::dumper_data()
"//q1.setInt_32(1);\n\n"
"QV4::Value q2; unused(&q2);\n"
"q2.setDouble(2.5);\n\n"
- "QJSValue v10; unused(&v10);\n"
- "QJSValue v11 = QJSValue(true); unused(&v11);\n"
- "QJSValue v12 = QJSValue(1); unused(&v12);\n"
- "QJSValue v13 = QJSValue(2.5); unused(&v13);\n"
- "QJSValue v14 = QJSValue(QLatin1String(\"latin1\")); unused(&v14);\n"
- "QJSValue v15 = QJSValue(QString(\"utf16\")); unused(&v15);\n"
- "QJSValue v16 = QJSValue(bool(true)); unused(&v16);\n"
- "QJSValue v17 = eng.newArray(100); unused(&v17);\n"
- "QJSValue v18 = eng.newObject(); unused(&v18);\n\n"
+ "QJSValue v10;\n"
+ "QJSValue v11 = QJSValue(true);\n"
+ "QJSValue v12 = QJSValue(1);\n"
+ "QJSValue v13 = QJSValue(2.5);\n"
+ "QJSValue v14 = QJSValue(QLatin1String(\"latin1\"));\n"
+ "QJSValue v15 = QJSValue(QString(\"utf16\"));\n"
+ "QJSValue v16 = QJSValue(bool(true));\n"
+ "QJSValue v17 = eng.newArray(100);\n"
+ "QJSValue v18 = eng.newObject();\n\n"
"v18.setProperty(\"PropA\", 1);\n"
"v18.setProperty(\"PropB\", 2.5);\n"
"v18.setProperty(\"PropC\", v10);\n\n"
- "QV4::Value s11, *p11 = QJSValuePrivate::valueForData(&v11, &s11); unused(&p11);\n"
- "QV4::Value s12, *p12 = QJSValuePrivate::valueForData(&v12, &s12); unused(&p12);\n"
- "QV4::Value s13, *p13 = QJSValuePrivate::valueForData(&v13, &s13); unused(&p13);\n"
- "QV4::Value s14, *p14 = QJSValuePrivate::valueForData(&v14, &s14); unused(&p14);\n"
- "QV4::Value s15, *p15 = QJSValuePrivate::valueForData(&v15, &s15); unused(&p15);\n"
- "QV4::Value s16, *p16 = QJSValuePrivate::valueForData(&v16, &s16); unused(&p16);\n"
- "QV4::Value s17, *p17 = QJSValuePrivate::valueForData(&v17, &s17); unused(&p17);\n"
- "QV4::Value s18, *p18 = QJSValuePrivate::valueForData(&v18, &s18); unused(&p18);\n"
- )
+ "QV4::Value s11, *p11 = QJSValuePrivate::valueForData(&v11, &s11);\n"
+ "QV4::Value s12, *p12 = QJSValuePrivate::valueForData(&v12, &s12);\n"
+ "QV4::Value s13, *p13 = QJSValuePrivate::valueForData(&v13, &s13);\n"
+ "QV4::Value s14, *p14 = QJSValuePrivate::valueForData(&v14, &s14);\n"
+ "QV4::Value s15, *p15 = QJSValuePrivate::valueForData(&v15, &s15);\n"
+ "QV4::Value s16, *p16 = QJSValuePrivate::valueForData(&v16, &s16);\n"
+ "QV4::Value s17, *p17 = QJSValuePrivate::valueForData(&v17, &s17);\n"
+ "QV4::Value s18, *p18 = QJSValuePrivate::valueForData(&v18, &s18);\n",
+
+ "&v10, &v11, &v12, &v13, &v14, &v15, &v16, &v17, &v18, "
+ "&p11, &p12, &p13, &p14, &p15, &p16, &p17, &p18")
+
+ QmlPrivateProfile()
+ QtVersion(0x50000)
+
+ Check("q2", FloatValue("2.5"), "@QV4::Value (double)")
//+ Check("v10", "(null)", "@QJSValue (null)") # Works in GUI. Why?
+ Check("v11", "true", "@QJSValue (bool)")
@@ -7001,22 +7315,33 @@ void tst_Dumpers::dumper_data()
QTest::newRow("QStandardItem")
<< Data("#include <QStandardItemModel>",
+
"QStandardItemModel m;\n"
"QStandardItem *root = m.invisibleRootItem();\n"
"for (int i = 0; i < 4; ++i) {\n"
" QStandardItem *item = new QStandardItem(QString(\"item %1\").arg(i));\n"
" item->setData(123);\n"
" root->appendRow(item);\n"
- "}\n")
+ "}",
+
+ "&root, &m")
+
+ GuiProfile()
+
+ Check("root.[children].0.[values].0.role", "Qt::DisplayRole (0)", "@Qt::ItemDataRole")
+ Check("root.[children].0.[values].0.value", "\"item 0\"", "@QVariant (QString)");
QTest::newRow("Internal1")
+
<< Data("struct QtcDumperTest_FieldAccessByIndex { int d[3] = { 10, 11, 12 }; };\n",
- "QtcDumperTest_FieldAccessByIndex d; unused(&d);\n")
+
+ "QtcDumperTest_FieldAccessByIndex d;",
+
+ "&d")
+
+ MsvcVersion(1900)
+
+ Check("d", "12", "QtcDumperTest_FieldAccessByIndex");
@@ -7025,8 +7350,12 @@ void tst_Dumpers::dumper_data()
"struct Foo { int bar = 15; E e = V1; };\n"
"struct QtcDumperTest_PointerArray {\n"
" Foo *foos = new Foo[10];\n"
- "};\n\n",
- "QtcDumperTest_PointerArray tc; unused(&tc);\n")
+ "};",
+
+ "QtcDumperTest_PointerArray tc;",
+
+ "&tc")
+
+ Check("tc.0.bar", "15", "int")
+ Check("tc.0.e", "V1 (0)", "E")
+ Check("tc.1.bar", "15", "int")
@@ -7059,8 +7388,12 @@ void tst_Dumpers::dumper_data()
"\n"
" Storage<details::extent_type<Extent>> storage_;\n"
"};\n",
+
"int v[4] = { 1, 2, 4, 8 }; \n"
- "Span<int, -1> s(v, 4); unused(&s); \n")
+ "Span<int, -1> s(v, 4);",
+
+ "&s")
+
+ Check("s.storage_.@1.size_", "4", "int");
@@ -7101,11 +7434,16 @@ void tst_Dumpers::dumper_data()
"{\n"
" int baz = 84;\n"
"};\n\n",
- "Derived d1, d2; unused(&d1, &d2);\n"
- "QtcDumperTest_List<Derived> list; unused(&list);\n"
+
+ "Derived d1, d2;\n"
+ "QtcDumperTest_List<Derived> list;\n"
"list.insert(&d1);\n"
- "list.insert(&d2);\n")
+ "list.insert(&d2);",
+
+ "&d1, &d2, &list")
+
+ Cxx11Profile()
+
+ Check("d1.@1.foo", "42", "int")
+ Check("d1.baz", "84", "int")
+ Check("d2.@1.foo", "42", "int")
@@ -7113,6 +7451,7 @@ void tst_Dumpers::dumper_data()
//+ Check("list.1.baz", "15", "int")
;
+
QTest::newRow("BufArray")
<< Data("#include <new>\n"
"static int c = 0;\n"
@@ -7129,8 +7468,13 @@ void tst_Dumpers::dumper_data()
" }\n"
" ~QtcDumperTest_BufArray() { delete[] buffer; }\n"
"};\n\n",
- "QtcDumperTest_BufArray<Foo> arr; unused(&arr);\n")
+
+ "QtcDumperTest_BufArray<Foo> arr;",
+
+ "&arr")
+
+ Cxx11Profile()
+
+ Check("arr.0.bar", "0", "int")
+ Check("arr.0.baz", "1", "int")
+ Check("arr.1.bar", "2", "int")
@@ -7152,32 +7496,46 @@ void tst_Dumpers::dumper_data()
" strcpy(first, \"first\");\n"
" }\n"
" ~QtcDumperTest_String() { delete[] first; }\n"
- "};\n\n",
- "QtcDumperTest_String str; unused(&str);\n")
+ "};",
+
+ "QtcDumperTest_String str;",
+
+ "&str")
+
+ Cxx11Profile()
+
+ Check("str", "first, second, third", "QtcDumperTest_String");
QTest::newRow("UndefinedStaticMembers")
<< Data("struct Foo { int a = 15; static int b; }; \n",
- "Foo f; unused(&f);\n")
+
+ "Foo f;",
+
+ "&f")
+
+ Check("f.a", "15", "int")
+ Check("f.b", "<optimized out>", "") % NoCdbEngine
+ Check("f.b", "", "<Value unavailable error>") % CdbEngine;
+
QTest::newRow("LongDouble")
<< Data("",
"long double a = 1;\n"
"long double b = -2;\n"
"long double c = 0;\n"
- "long double d = 0.5;\n")
+ "long double d = 0.5;",
+
+ "&a, &b, &c, &d")
+
+ Check("a", FloatValue("1"), TypeDef("double", "long double"))
+ Check("b", FloatValue("-2"), TypeDef("double", "long double"))
+ Check("c", FloatValue("0"), TypeDef("double", "long double"))
+ Check("d", FloatValue("0.5"), TypeDef("double", "long double"));
+
QTest::newRow("WatchList")
- << Data("", "")
+ << Data("", "", "")
+ Watcher("watch.1", "42;43")
+ Check("watch.1", "42;43", "<2 items>", "")
+ Check("watch.1.0", "42", "42", "int")
@@ -7189,11 +7547,16 @@ void tst_Dumpers::dumper_data()
// We don't seem to have such in the public interface.
<< Data("#include <private/qlocale_p.h>\n"
"#include <private/qflagpointer_p.h>\n",
- "QLocaleData d; unused(&d);\n"
- "QFlagPointer<int> p; unused(&p);\n")
+
+ "QLocaleData d;\n"
+ "QFlagPointer<int> p;",
+
+ "&d, &p")
+
+ CorePrivateProfile()
+ QmlPrivateProfile()
+ QtVersion(0x50800)
+
+ Check("d.Log10_2_100000", "30103", "int")
+ Check("p.FlagBit", "<optimized out>", "") % NoCdbEngine
+ Check("p.FlagBit", "", "<Value unavailable error>", "") % CdbEngine;
@@ -7204,6 +7567,7 @@ void tst_Dumpers::dumper_data()
<< Data("#include <CoreFoundation/CoreFoundation.h>\n"
"#include <string>\n"
"#import <Foundation/Foundation.h>\n",
+
"std::string stdString = \"A std::string\"; (void)stdString;\n\n"
"std::string &stdStringReference = stdString; (void)stdStringReference;\n\n"
"CFStringRef cfStringRef = CFSTR(\"A cfstringref\"); (void)cfStringRef;\n\n"
@@ -7216,8 +7580,12 @@ void tst_Dumpers::dumper_data()
"CFStringRef& cfStringRefReference = cfStringRef; (void)cfStringRefReference;\n"
"NSString *&aNSStringReference = aNSString; (void)aNSStringReference;\n"
"NSURL *&nsUrlReference = nsUrl; (void)nsUrlReference;\n"
- "CFURLRef &urlReference = url; (void)urlReference;\n")
+ "CFURLRef &urlReference = url; (void)urlReference;\n",
+
+ "")
+
+ CoreFoundationProfile()
+
+ Check("stdString", "\"A std::string\"", "std::string")
+ Check("stdStringReference", "\"A std::string\"", "std::string &")
+ Check("cfStringRef", "\"A cfstringref\"", "CFStringRef")
@@ -7233,19 +7601,26 @@ void tst_Dumpers::dumper_data()
;
#endif
+
QTest::newRow("ArrayOfFunctionPointers")
<< Data("typedef int (*FP)(int *); \n"
"int func(int *param) { unused(param); return 0; } \n",
- "FP fps[5]; fps[0] = func; fps[0](0); unused(&fps);\n")
+
+ "FP fps[5]; fps[0] = func; fps[0](0);",
+
+ "&fps")
+
+ RequiredMessage("Searching for type int (*)(int *) across all target "
"modules, this could be very slow")
+ LldbEngine;
+
QTest::newRow("Sql")
<< Data("#include <QSqlField>\n"
"#include <QSqlDatabase>\n"
"#include <QSqlQuery>\n"
"#include <QSqlRecord>\n",
+
"QSqlDatabase db = QSqlDatabase::addDatabase(\"QSQLITE\");\n"
"db.setDatabaseName(\":memory:\");\n"
"Q_ASSERT(db.open());\n"
@@ -7259,9 +7634,12 @@ void tst_Dumpers::dumper_data()
"QSqlRecord rec = query.record();\n"
"QSqlField f1 = rec.field(0);\n"
"QSqlField f2 = rec.field(1);\n"
- "QSqlField f3 = rec.field(2);\n"
- "unused(&f1, &f2, &f3);\n")
+ "QSqlField f3 = rec.field(2);",
+
+ "&f1, &f2, &f3")
+
+ SqlProfile()
+
+ Check("f1", "1", "@QSqlField (qlonglong)")
+ Check("f2", "\"qt-logo.png\"", "@QSqlField (QString)")
+ Check("f3", "(invalid)", "@QSqlField (invalid)");