Merge remote-tracking branch 'origin/4.6' into 4.7

Change-Id: Ifddceb06f377ea428300fa8a48908cfc44b98705
This commit is contained in:
Eike Ziller
2018-05-28 16:07:00 +02:00
9 changed files with 85 additions and 153 deletions

51
dist/changes-4.6.2.md vendored Normal file
View File

@@ -0,0 +1,51 @@
Qt Creator version 4.6.2 contains bug fixes.
The most important changes are listed in this document. For a complete
list of changes, see the Git log for the Qt Creator sources that
you can check out from the public Git repository. For example:
git clone git://code.qt.io/qt-creator/qt-creator.git
git log --cherry-pick --pretty=oneline v4.6.1..v4.6.2
General
QMake Projects
* Fixed reparsing after changes (QTCREATORBUG-20113)
Qt Support
* Fixed detection of Qt Quick Compiler in Qt 5.11 (QTCREATORBUG-19993)
C++ Support
* Fixed flags for C files with MSVC (QTCREATORBUG-20198)
Debugging
* Fixed crash when attaching to remote process (QTCREATORBUG-20331)
Platform Specific
macOS
* Fixed signature of pre-built binaries (QTCREATORBUG-20370)
Android
* Fixed path to C++ includes (QTCREATORBUG-20340)
QNX
* Fixed restoring deploy steps (QTCREATORBUG-20248)
Credits for these changes go to:
Alessandro Portale
André Pönitz
Christian Stenger
Eike Ziller
Ivan Donchevskii
Oswald Buddenhagen
Robert Löhning
Ulf Hermann
Vikas Pachdha

View File

@@ -696,7 +696,6 @@ void GdbEngine::interruptInferior()
showStatusMessage(tr("Stop requested..."), 5000); showStatusMessage(tr("Stop requested..."), 5000);
showMessage("TRYING TO INTERRUPT INFERIOR"); showMessage("TRYING TO INTERRUPT INFERIOR");
if (HostOsInfo::isWindowsHost() && !m_isQnxGdb) { if (HostOsInfo::isWindowsHost() && !m_isQnxGdb) {
QTC_ASSERT(state() == InferiorStopRequested, qDebug() << state(); notifyInferiorStopFailed());
IDevice::ConstPtr device = runTool()->device(); IDevice::ConstPtr device = runTool()->device();
if (!device) if (!device)
device = runParameters().inferior.device; device = runParameters().inferior.device;

View File

@@ -1813,9 +1813,8 @@ bool BaseQtVersion::isQtQuickCompilerSupported(QString *reason) const
return false; return false;
} }
const QString qtQuickCompilerExecutable = const QString qtQuickCompilerPrf = mkspecsPath().toString() + "/features/qtquickcompiler.prf";
HostOsInfo::withExecutableSuffix(binPath().toString() + "/qtquickcompiler"); if (!QFileInfo::exists(qtQuickCompilerPrf)) {
if (!QFileInfo::exists(qtQuickCompilerExecutable)) {
if (reason) if (reason)
*reason = QCoreApplication::translate("BaseQtVersion", "This Qt Version does not contain Qt Quick Compiler."); *reason = QCoreApplication::translate("BaseQtVersion", "This Qt Version does not contain Qt Quick Compiler.");
return false; return false;

View File

@@ -166,7 +166,6 @@ void ProFileCacheManager::clear()
// loop is concerned. Use a shared pointer once this is not true anymore. // loop is concerned. Use a shared pointer once this is not true anymore.
delete m_cache; delete m_cache;
m_cache = 0; m_cache = 0;
QMakeVfs::clearIds();
} }
void ProFileCacheManager::discardFiles(const QString &prefix, QMakeVfs *vfs) void ProFileCacheManager::discardFiles(const QString &prefix, QMakeVfs *vfs)

View File

@@ -49,11 +49,29 @@ QMakeVfs::QMakeVfs()
#ifndef QT_NO_TEXTCODEC #ifndef QT_NO_TEXTCODEC
m_textCodec = 0; m_textCodec = 0;
#endif #endif
#ifdef PROEVALUATOR_THREAD_SAFE
QMutexLocker locker(&s_mutex);
#endif
++s_refCount;
} }
QMakeVfs::~QMakeVfs()
{
#ifdef PROEVALUATOR_THREAD_SAFE
QMutexLocker locker(&s_mutex);
#endif
if (!--s_refCount) {
s_fileIdCounter = 0;
s_fileIdMap.clear();
s_idFileMap.clear();
}
}
#ifdef PROPARSER_THREAD_SAFE #ifdef PROPARSER_THREAD_SAFE
QMutex QMakeVfs::s_mutex; QMutex QMakeVfs::s_mutex;
#endif #endif
int QMakeVfs::s_refCount;
QAtomicInt QMakeVfs::s_fileIdCounter; QAtomicInt QMakeVfs::s_fileIdCounter;
QHash<QString, int> QMakeVfs::s_fileIdMap; QHash<QString, int> QMakeVfs::s_fileIdMap;
QHash<int, QString> QMakeVfs::s_idFileMap; QHash<int, QString> QMakeVfs::s_idFileMap;
@@ -111,16 +129,6 @@ QString QMakeVfs::fileNameForId(int id)
return s_idFileMap.value(id); return s_idFileMap.value(id);
} }
void QMakeVfs::clearIds()
{
#ifdef PROEVALUATOR_THREAD_SAFE
QMutexLocker locker(&s_mutex);
#endif
s_fileIdCounter = 0;
s_fileIdMap.clear();
s_idFileMap.clear();
}
bool QMakeVfs::writeFile(int id, QIODevice::OpenMode mode, VfsFlags flags, bool QMakeVfs::writeFile(int id, QIODevice::OpenMode mode, VfsFlags flags,
const QString &contents, QString *errStr) const QString &contents, QString *errStr)
{ {

View File

@@ -72,10 +72,10 @@ public:
Q_DECLARE_FLAGS(VfsFlags, VfsFlag) Q_DECLARE_FLAGS(VfsFlags, VfsFlag)
QMakeVfs(); QMakeVfs();
~QMakeVfs();
int idForFileName(const QString &fn, VfsFlags flags); int idForFileName(const QString &fn, VfsFlags flags);
QString fileNameForId(int id); QString fileNameForId(int id);
static void clearIds();
bool writeFile(int id, QIODevice::OpenMode mode, VfsFlags flags, const QString &contents, QString *errStr); bool writeFile(int id, QIODevice::OpenMode mode, VfsFlags flags, const QString &contents, QString *errStr);
ReadResult readFile(int id, QString *contents, QString *errStr); ReadResult readFile(int id, QString *contents, QString *errStr);
bool exists(const QString &fn, QMakeVfs::VfsFlags flags); bool exists(const QString &fn, QMakeVfs::VfsFlags flags);
@@ -93,6 +93,7 @@ private:
#ifdef PROEVALUATOR_THREAD_SAFE #ifdef PROEVALUATOR_THREAD_SAFE
static QMutex s_mutex; static QMutex s_mutex;
#endif #endif
static int s_refCount;
static QAtomicInt s_fileIdCounter; static QAtomicInt s_fileIdCounter;
// Qt Creator's ProFile cache is a singleton to maximize its cross-project // Qt Creator's ProFile cache is a singleton to maximize its cross-project
// effectiveness (shared prf files from QtVersions). // effectiveness (shared prf files from QtVersions).

View File

@@ -26,8 +26,6 @@
source("../../shared/qtcreator.py") source("../../shared/qtcreator.py")
def main(): def main():
test.warning("This needs a Qt 5.6.2 kit. Skipping it.")
return
pathCreator = os.path.join(srcPath, "creator", "qtcreator.qbs") pathCreator = os.path.join(srcPath, "creator", "qtcreator.qbs")
if not neededFilePresent(pathCreator): if not neededFilePresent(pathCreator):
return return
@@ -36,8 +34,8 @@ def main():
if not startedWithoutPluginError(): if not startedWithoutPluginError():
return return
openQbsProject(pathCreator) openQbsProject(pathCreator)
if not addAndActivateKit(Targets.DESKTOP_5_6_1_DEFAULT): if not addAndActivateKit(Targets.DESKTOP_5_10_1_DEFAULT):
test.fatal("Failed to activate '%s'" % Targets.getStringForTarget(Targets.DESKTOP_5_4_1_GCC)) test.fatal("Failed to activate '%s'" % Targets.getStringForTarget(Targets.DESKTOP_5_10_1_DEFAULT))
invokeMenuItem("File", "Exit") invokeMenuItem("File", "Exit")
return return
test.log("Start parsing project") test.log("Start parsing project")

View File

@@ -11808,124 +11808,6 @@
"outputprocessor.h" "3" "outputprocessor.h" "3"
"clangbackend" "2" "clangbackend" "2"
"clangbackend.qbs:3" "3" "clangbackend.qbs:3" "3"
"Group 3" "3"
"clangbackend.qbs:9" "4"
"ipcsource" "4"
"clangasyncjob.h" "5"
"clangbackend_global.h" "5"
"clangclock.h" "5"
"clangcodecompleteresults.cpp" "5"
"clangcodecompleteresults.h" "5"
"clangcodemodelserver.cpp" "5"
"clangcodemodelserver.h" "5"
"clangcompletecodejob.cpp" "5"
"clangcompletecodejob.h" "5"
"clangcreateinitialdocumentpreamblejob.cpp" "5"
"clangcreateinitialdocumentpreamblejob.h" "5"
"clangdocument.cpp" "5"
"clangdocument.h" "5"
"clangdocumentprocessor.cpp" "5"
"clangdocumentprocessor.h" "5"
"clangdocumentprocessors.cpp" "5"
"clangdocumentprocessors.h" "5"
"clangdocuments.cpp" "5"
"clangdocuments.h" "5"
"clangdocumentsuspenderresumer.cpp" "5"
"clangdocumentsuspenderresumer.h" "5"
"clangexceptions.cpp" "5"
"clangexceptions.h" "5"
"clangfilepath.cpp" "5"
"clangfilepath.h" "5"
"clangfilesystemwatcher.cpp" "5"
"clangfilesystemwatcher.h" "5"
"clangiasyncjob.cpp" "5"
"clangiasyncjob.h" "5"
"clangjobcontext.cpp" "5"
"clangjobcontext.h" "5"
"clangjobqueue.cpp" "5"
"clangjobqueue.h" "5"
"clangjobrequest.cpp" "5"
"clangjobrequest.h" "5"
"clangjobs.cpp" "5"
"clangjobs.h" "5"
"clangparsesupportivetranslationunitjob.cpp" "5"
"clangparsesupportivetranslationunitjob.h" "5"
"clangreferencescollector.cpp" "5"
"clangreferencescollector.h" "5"
"clangreparsesupportivetranslationunitjob.cpp" "5"
"clangreparsesupportivetranslationunitjob.h" "5"
"clangrequestdocumentannotationsjob.cpp" "5"
"clangrequestdocumentannotationsjob.h" "5"
"clangrequestreferencesjob.cpp" "5"
"clangrequestreferencesjob.h" "5"
"clangresumedocumentjob.cpp" "5"
"clangresumedocumentjob.h" "5"
"clangstring.h" "5"
"clangsupportivetranslationunitinitializer.cpp" "5"
"clangsupportivetranslationunitinitializer.h" "5"
"clangsuspenddocumentjob.cpp" "5"
"clangsuspenddocumentjob.h" "5"
"clangtranslationunit.cpp" "5"
"clangtranslationunit.h" "5"
"clangtranslationunits.cpp" "5"
"clangtranslationunits.h" "5"
"clangtranslationunitupdater.cpp" "5"
"clangtranslationunitupdater.h" "5"
"clangtype.cpp" "5"
"clangtype.h" "5"
"clangunsavedfilesshallowarguments.cpp" "5"
"clangunsavedfilesshallowarguments.h" "5"
"clangupdatedocumentannotationsjob.cpp" "5"
"clangupdatedocumentannotationsjob.h" "5"
"codecompleter.cpp" "5"
"codecompleter.h" "5"
"codecompletionchunkconverter.cpp" "5"
"codecompletionchunkconverter.h" "5"
"codecompletionsextractor.cpp" "5"
"codecompletionsextractor.h" "5"
"commandlinearguments.cpp" "5"
"commandlinearguments.h" "5"
"cursor.cpp" "5"
"cursor.h" "5"
"diagnostic.cpp" "5"
"diagnostic.h" "5"
"diagnosticset.cpp" "5"
"diagnosticset.h" "5"
"diagnosticsetiterator.h" "5"
"fixit.cpp" "5"
"fixit.h" "5"
"highlightingmark.cpp" "5"
"highlightingmark.h" "5"
"highlightingmarks.cpp" "5"
"highlightingmarks.h" "5"
"highlightingmarksiterator.h" "5"
"projectpart.cpp" "5"
"projectpart.h" "5"
"projects.cpp" "5"
"projects.h" "5"
"skippedsourceranges.cpp" "5"
"skippedsourceranges.h" "5"
"sourcelocation.cpp" "5"
"sourcelocation.h" "5"
"sourcerange.cpp" "5"
"sourcerange.h" "5"
"unsavedfile.cpp" "5"
"unsavedfile.h" "5"
"unsavedfiles.cpp" "5"
"unsavedfiles.h" "5"
"utf8positionfromlinecolumn.cpp" "5"
"utf8positionfromlinecolumn.h" "5"
"Group 4" "3"
"clangbackend.qbs:17" "4"
"crashhandlersetup.cpp" "5"
"crashhandlersetup.h" "5"
"standard pch file (gui)" "3"
"QtcProduct.qbs:58" "4"
"qtcreator_gui_pch.h" "5"
"standard pch file (non-gui)" "3"
"QtcProduct.qbs:50" "4"
"qtcreator_pch.h" "5"
"clangbackendmain.cpp" "3"
"iostool" "2" "iostool" "2"
"iostool.qbs:3" "3" "iostool.qbs:3" "3"
"standard pch file (gui)" "3" "standard pch file (gui)" "3"
@@ -12588,6 +12470,13 @@
"diff.qbs:3" "3" "diff.qbs:3" "3"
"Differ autotest" "3" "Differ autotest" "3"
"differ.qbs:3" "4" "differ.qbs:3" "4"
"standard pch file (gui)" "4"
"QtcProduct.qbs:58" "5"
"qtcreator_gui_pch.h" "6"
"standard pch file (non-gui)" "4"
"QtcProduct.qbs:50" "5"
"qtcreator_pch.h" "6"
"tst_differ.cpp" "4"
"Environment autotest" "2" "Environment autotest" "2"
"environment.qbs:3" "3" "environment.qbs:3" "3"
"standard pch file (gui)" "3" "standard pch file (gui)" "3"
@@ -13204,18 +13093,6 @@
"qbsplugin.qbs" "4" "qbsplugin.qbs" "4"
"tools" "2" "tools" "2"
"cplusplustools.qbs" "3" "cplusplustools.qbs" "3"
"cplusplus-keywordgen.qbs" "4"
"cplusplus-ast2png" "3"
"cplusplus-ast2png.qbs" "4"
"cplusplus-frontend" "3"
"cplusplus-frontend.qbs" "4"
"cplusplus-mkvisitor" "3"
"cplusplus-mkvisitor.qbs" "4"
"cplusplus-shared" "3"
"CPlusPlusTool.qbs" "4"
"CPlusPlusToolUsingCustomUtils.qbs" "4"
"cplusplus-update-frontend" "3"
"cplusplus-update-frontend.qbs" "4"
"clangstaticanalyzer" "2" "clangstaticanalyzer" "2"
"clangstaticanalyzerautotest.qbs" "3" "clangstaticanalyzerautotest.qbs" "3"
"cplusplus" "2" "cplusplus" "2"
1 text nestinglevel
11808 outputprocessor.h 3
11809 clangbackend 2
11810 clangbackend.qbs:3 3
Group 3 3
clangbackend.qbs:9 4
ipcsource 4
clangasyncjob.h 5
clangbackend_global.h 5
clangclock.h 5
clangcodecompleteresults.cpp 5
clangcodecompleteresults.h 5
clangcodemodelserver.cpp 5
clangcodemodelserver.h 5
clangcompletecodejob.cpp 5
clangcompletecodejob.h 5
clangcreateinitialdocumentpreamblejob.cpp 5
clangcreateinitialdocumentpreamblejob.h 5
clangdocument.cpp 5
clangdocument.h 5
clangdocumentprocessor.cpp 5
clangdocumentprocessor.h 5
clangdocumentprocessors.cpp 5
clangdocumentprocessors.h 5
clangdocuments.cpp 5
clangdocuments.h 5
clangdocumentsuspenderresumer.cpp 5
clangdocumentsuspenderresumer.h 5
clangexceptions.cpp 5
clangexceptions.h 5
clangfilepath.cpp 5
clangfilepath.h 5
clangfilesystemwatcher.cpp 5
clangfilesystemwatcher.h 5
clangiasyncjob.cpp 5
clangiasyncjob.h 5
clangjobcontext.cpp 5
clangjobcontext.h 5
clangjobqueue.cpp 5
clangjobqueue.h 5
clangjobrequest.cpp 5
clangjobrequest.h 5
clangjobs.cpp 5
clangjobs.h 5
clangparsesupportivetranslationunitjob.cpp 5
clangparsesupportivetranslationunitjob.h 5
clangreferencescollector.cpp 5
clangreferencescollector.h 5
clangreparsesupportivetranslationunitjob.cpp 5
clangreparsesupportivetranslationunitjob.h 5
clangrequestdocumentannotationsjob.cpp 5
clangrequestdocumentannotationsjob.h 5
clangrequestreferencesjob.cpp 5
clangrequestreferencesjob.h 5
clangresumedocumentjob.cpp 5
clangresumedocumentjob.h 5
clangstring.h 5
clangsupportivetranslationunitinitializer.cpp 5
clangsupportivetranslationunitinitializer.h 5
clangsuspenddocumentjob.cpp 5
clangsuspenddocumentjob.h 5
clangtranslationunit.cpp 5
clangtranslationunit.h 5
clangtranslationunits.cpp 5
clangtranslationunits.h 5
clangtranslationunitupdater.cpp 5
clangtranslationunitupdater.h 5
clangtype.cpp 5
clangtype.h 5
clangunsavedfilesshallowarguments.cpp 5
clangunsavedfilesshallowarguments.h 5
clangupdatedocumentannotationsjob.cpp 5
clangupdatedocumentannotationsjob.h 5
codecompleter.cpp 5
codecompleter.h 5
codecompletionchunkconverter.cpp 5
codecompletionchunkconverter.h 5
codecompletionsextractor.cpp 5
codecompletionsextractor.h 5
commandlinearguments.cpp 5
commandlinearguments.h 5
cursor.cpp 5
cursor.h 5
diagnostic.cpp 5
diagnostic.h 5
diagnosticset.cpp 5
diagnosticset.h 5
diagnosticsetiterator.h 5
fixit.cpp 5
fixit.h 5
highlightingmark.cpp 5
highlightingmark.h 5
highlightingmarks.cpp 5
highlightingmarks.h 5
highlightingmarksiterator.h 5
projectpart.cpp 5
projectpart.h 5
projects.cpp 5
projects.h 5
skippedsourceranges.cpp 5
skippedsourceranges.h 5
sourcelocation.cpp 5
sourcelocation.h 5
sourcerange.cpp 5
sourcerange.h 5
unsavedfile.cpp 5
unsavedfile.h 5
unsavedfiles.cpp 5
unsavedfiles.h 5
utf8positionfromlinecolumn.cpp 5
utf8positionfromlinecolumn.h 5
Group 4 3
clangbackend.qbs:17 4
crashhandlersetup.cpp 5
crashhandlersetup.h 5
standard pch file (gui) 3
QtcProduct.qbs:58 4
qtcreator_gui_pch.h 5
standard pch file (non-gui) 3
QtcProduct.qbs:50 4
qtcreator_pch.h 5
clangbackendmain.cpp 3
11811 iostool 2
11812 iostool.qbs:3 3
11813 standard pch file (gui) 3
12470 diff.qbs:3 3
12471 Differ autotest 3
12472 differ.qbs:3 4
12473 standard pch file (gui) 4
12474 QtcProduct.qbs:58 5
12475 qtcreator_gui_pch.h 6
12476 standard pch file (non-gui) 4
12477 QtcProduct.qbs:50 5
12478 qtcreator_pch.h 6
12479 tst_differ.cpp 4
12480 Environment autotest 2
12481 environment.qbs:3 3
12482 standard pch file (gui) 3
13093 qbsplugin.qbs 4
13094 tools 2
13095 cplusplustools.qbs 3
cplusplus-keywordgen.qbs 4
cplusplus-ast2png 3
cplusplus-ast2png.qbs 4
cplusplus-frontend 3
cplusplus-frontend.qbs 4
cplusplus-mkvisitor 3
cplusplus-mkvisitor.qbs 4
cplusplus-shared 3
CPlusPlusTool.qbs 4
CPlusPlusToolUsingCustomUtils.qbs 4
cplusplus-update-frontend 3
cplusplus-update-frontend.qbs 4
13096 clangstaticanalyzer 2
13097 clangstaticanalyzerautotest.qbs 3
13098 cplusplus 2

View File

@@ -41,7 +41,7 @@ def main():
waitFor("runButton.enabled", 30000) waitFor("runButton.enabled", 30000)
# Starting before opening, because this is where Creator froze (QTCREATORBUG-10733) # Starting before opening, because this is where Creator froze (QTCREATORBUG-10733)
startopening = datetime.utcnow() startopening = datetime.utcnow()
openQmakeProject(pathCreator, [Targets.DESKTOP_5_6_1_DEFAULT]) openQmakeProject(pathCreator, [Targets.DESKTOP_5_10_1_DEFAULT])
# Wait for parsing to complete # Wait for parsing to complete
startreading = datetime.utcnow() startreading = datetime.utcnow()
waitFor("runButton.enabled", 300000) waitFor("runButton.enabled", 300000)
@@ -64,9 +64,9 @@ def main():
openGeneralMessages() openGeneralMessages()
# Verify messages appear once, from using default kit before configuring # Verify messages appear once, from using default kit before configuring
generalMessages = str(waitForObject(":Qt Creator_Core::OutputWindow").plainText) generalMessages = str(waitForObject(":Qt Creator_Core::OutputWindow").plainText)
test.compare(generalMessages.count("Project MESSAGE: Cannot build Qt Creator with Qt version 5.6.1."), 2, test.compare(generalMessages.count("Project MESSAGE: Cannot build Qt Creator with Qt version 5.6.1."), 1,
"Warning about outdated Qt shown?") "Warning about outdated Qt shown?")
test.compare(generalMessages.count("Project ERROR: Use at least Qt 5.6.2."), 2, test.compare(generalMessages.count("Project ERROR: Use at least Qt 5.6.2."), 1,
"Minimum Qt version shown (once when parsing with default kit, once with selected)?") "Minimum Qt version shown (once when parsing with default kit, once with selected)?")
# Verify that qmljs.g is in the project even when we don't know where (QTCREATORBUG-17609) # Verify that qmljs.g is in the project even when we don't know where (QTCREATORBUG-17609)