From 28340bdeb034de8e43ab0eb4c3df9fb4b7c2f478 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Mon, 5 Feb 2024 18:10:50 +0100 Subject: QmlCompiler: In debug mode, set instruction pointer before each lookup This produces some overhead, but helps with debugging. Without the instruction pointer we cannot determine the line numbers for console.trace(). Pick-to: 6.7 6.6 6.5 Fixes: QTBUG-119459 Change-Id: I75a6bb1fcedd8514e2ba46d02dd2904ce222f0e4 Reviewed-by: Fabian Kosmale --- tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp | 27 ++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp') diff --git a/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp b/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp index 208ca15444..b5c2a2dc03 100644 --- a/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp +++ b/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp @@ -67,6 +67,7 @@ private slots: void compositeSingleton(); void compositeTypeMethod(); void consoleObject(); + void consoleTrace(); void construct(); void contextParam(); void conversionDecrement(); @@ -1110,6 +1111,32 @@ void tst_QmlCppCodegen::consoleObject() QVERIFY(!p.isNull()); } +void tst_QmlCppCodegen::consoleTrace() +{ + QQmlEngine engine; + QQmlComponent component(&engine, QUrl(u"qrc:/qt/qml/TestTypes/consoleTrace.qml"_s)); + QVERIFY2(!component.isError(), component.errorString().toUtf8()); + +#if !defined(QT_NO_DEBUG) || defined(QT_TEST_FORCE_INTERPRETER) + // All line numbers in debug mode or when interpreting + + QTest::ignoreMessage(QtDebugMsg, R"(c (qrc:/qt/qml/TestTypes/consoleTrace.qml:6) +b (qrc:/qt/qml/TestTypes/consoleTrace.qml:5) +a (qrc:/qt/qml/TestTypes/consoleTrace.qml:4) +expression for onCompleted (qrc:/qt/qml/TestTypes/consoleTrace.qml:7))"); +#else + // Only top-most line number otherwise + + QTest::ignoreMessage(QtDebugMsg, R"(c (qrc:/qt/qml/TestTypes/consoleTrace.qml:6) +b (qrc:/qt/qml/TestTypes/consoleTrace.qml) +a (qrc:/qt/qml/TestTypes/consoleTrace.qml) +expression for onCompleted (qrc:/qt/qml/TestTypes/consoleTrace.qml))"); +#endif + + QScopedPointer object(component.create()); + QVERIFY(!object.isNull()); +} + void tst_QmlCppCodegen::construct() { QQmlEngine engine; -- cgit v1.2.3