Details
Description
When trying to run the qbs 1.4.2's testsuite, I get this on some architectures:
terminate called after throwing an instance of 'qbs::ErrorInfo' #0 0x00003fffb72c0978 in raise () from /lib/powerpc64le-linux-gnu/libc.so.6 #1 0x00003fffb72c2cac in abort () from /lib/powerpc64le-linux-gnu/libc.so.6 #2 0x00003fffb752bc24 in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/powerpc64le-linux-gnu/libstdc++.so.6 #3 0x00003fffb75285c4 in ?? () from /usr/lib/powerpc64le-linux-gnu/libstdc++.so.6 #4 0x00003fffb7528680 in std::terminate() () from /usr/lib/powerpc64le-linux-gnu/libstdc++.so.6 #5 0x00003fffb7528ac4 in __cxa_throw () from /usr/lib/powerpc64le-linux-gnu/libstdc++.so.6 #6 0x00003fffb7de6f1c in qbs::Internal::Evaluator::handleEvaluationError (this=<optimized out>, item=<optimized out>, name=..., scriptValue=...) at language/evaluator.cpp:185 #7 0x00003fffb7deac24 in qbs::Internal::EvaluatorScriptClass::collectValuesFromNextChain (this=0x100bf230, data=0x100aaed0, result=0x3fffffffd150, propertyName=..., value=...) at language/evaluatorscriptclass.cpp:376 #8 0x00003fffb7deb728 in qbs::Internal::EvaluatorScriptClass::property (this=0x100bf230, object=..., name=..., id=<optimized out>) at language/evaluatorscriptclass.cpp:501 #9 0x00003fffb71e33f0 in QScript::ClassObjectDelegate::getOwnPropertySlot (this=<optimized out>, object=<optimized out>, exec=<optimized out>, propertyName=..., slot=...) at bridge/qscriptclassobject.cpp:80 #10 0x00003fffb71e0e84 in QScriptObject::getOwnPropertySlot (this=0x3fffb2d4c9c0, exec=<optimized out>, propertyName=..., slot=...) at bridge/qscriptobject.cpp:61 #11 0x00003fffb71d4428 in fastGetOwnPropertySlot (slot=..., propertyName=..., exec=<optimized out>, this=0x3fffb2d4c9c0) at ../3rdparty/javascriptcore/JavaScriptCore/runtime/JSObject.h:382 #12 getPropertySlot (slot=..., propertyName=..., exec=<optimized out>, this=<optimized out>) at ../3rdparty/javascriptcore/JavaScriptCore/runtime/JSObject.h:391 #13 property (resolveMode=1, id=..., value=..., exec=0x3fffb2f00048) at api/qscriptengine_p.h:741 #14 property (this=<optimized out>, this=<optimized out>, resolveMode=..., name=...) at api/qscriptengine_p.h:782 #15 QScriptValue::property (this=<optimized out>, name=..., mode=...) at api/qscriptvalue.cpp:1391 #16 0x00003fffb7de62bc in qbs::Internal::Evaluator::property (this=<optimized out>, item=<optimized out>, name=...) at language/evaluator.cpp:73 #17 0x00003fffb7e50384 in qbs::Internal::ProjectResolver::evaluateProperties (this=0x3fffffffe178, item=0x10070d40, propertiesContainer=0x10070d40, tmplt=..., lookupPrototype=<optimized out>) at language/projectresolver.cpp:1034 #18 0x00003fffb7e50abc in qbs::Internal::ProjectResolver::evaluateProperties (this=0x3fffffffe178, item=<optimized out>, lookupPrototype=true) at language/projectresolver.cpp:1005 #19 0x00003fffb7e50cb0 in qbs::Internal::ProjectResolver::evaluateModuleValues (this=0x3fffffffe178, item=<optimized out>, lookupPrototype=true) at language/projectresolver.cpp:994 #20 0x00003fffb7e51430 in qbs::Internal::ProjectResolver::createProductConfig (this=0x3fffffffe178) at language/projectresolver.cpp:1081 #21 0x00003fffb7e5f0d0 in qbs::Internal::ProjectResolver::resolveProduct (this=0x3fffffffe178, item=0x10070b00, projectContext=0x3fffffffdfb0) at language/projectresolver.cpp:344 #22 0x00003fffb7e55670 in qbs::Internal::ProjectResolver::callItemFunction (this=0x3fffffffe178, mappings=..., item=0x10070b00, projectContext=0x3fffffffdfb0) at language/projectresolver.cpp:1111 #23 0x00003fffb7e587b0 in qbs::Internal::ProjectResolver::resolveProject (this=0x3fffffffe178, item=0x10070dd0, projectContext=0x3fffffffdfb0) at language/projectresolver.cpp:264 #24 0x00003fffb7e5cca4 in qbs::Internal::ProjectResolver::resolveTopLevelProject (this=0x3fffffffe178, item=0x10070dd0, projectContext=0x3fffffffdfb0) at language/projectresolver.cpp:198 #25 0x00003fffb7e5d6bc in qbs::Internal::ProjectResolver::resolve (this=0x3fffffffe178, loadResult=..., setupParameters=...) at language/projectresolver.cpp:120 #26 0x00003fffb7e2c720 in qbs::Internal::Loader::loadProject (this=0x1005ac60, parameters=...) at language/loader.cpp:113 #27 0x00003fffb7e7fcb4 in qbs::Internal::TestLanguage::erroneousFiles (this=0x3ffffffff118) at language/tst_language.cpp:506
Looks like it throws ErrorInfo instead of handling it properly. Here is the code in handleEvaluationError function in language/evaluator.cpp that throws the exception:
183 if (m_scriptEngine->hasUncaughtException()) { 184 throw ErrorInfo(m_scriptEngine->uncaughtException().toString(), 185 CodeLocation(location.filePath(), m_scriptEngine->uncaughtExceptionLineNumber())); 186 }
This is called from collectValuesFromNextChain in language/evaluatorscriptclass.cpp:
375 QScriptValue v = data->evaluator->property(next->definingItem(), propertyName); 376 data->evaluator->handleEvaluationError(next->definingItem(), propertyName, v);
where propertyName is "defines".
The build logs are available here.