diff --git a/src/plugins/clangtools/clangtool.cpp b/src/plugins/clangtools/clangtool.cpp index 6fc8d3f06fb..652b24b90fa 100644 --- a/src/plugins/clangtools/clangtool.cpp +++ b/src/plugins/clangtools/clangtool.cpp @@ -774,6 +774,9 @@ Group ClangTool::runRecipe(const RunSettings &runSettings, // TODO: postMessage() instead m_runControl->postMessage(message, StdErrFormat); m_runControl->postMessage(output.errorDetails, StdErrFormat); + } else if (!output.errorMessage.isEmpty()) { + m_runControl->postMessage(output.errorMessage, ErrorMessageFormat); + m_runControl->postMessage(output.errorDetails, StdErrFormat); } else { qCDebug(LOG) << "Clang tool task finished with success:" << output.outputFilePath; diff --git a/src/plugins/clangtools/clangtoolrunner.cpp b/src/plugins/clangtools/clangtoolrunner.cpp index 20331566410..e83037aa536 100644 --- a/src/plugins/clangtools/clangtoolrunner.cpp +++ b/src/plugins/clangtools/clangtoolrunner.cpp @@ -165,6 +165,18 @@ GroupItem clangToolTask(const AnalyzeInputData &input, }; const auto onProcessDone = [=](const Process &process) { qCDebug(LOG).noquote() << "Output:\n" << process.cleanedStdOut(); + + // Here we handle only the case of process success with stderr output. + if (!outputHandler) + return; + if (process.result() != ProcessResult::FinishedWithSuccess) + return; + const QString stdErr = process.cleanedStdErr(); + if (stdErr.isEmpty()) + return; + outputHandler( + {true, input.unit.file, {}, {}, input.tool, Tr::tr("%1 produced stderr output:") + .arg(storage->name), stdErr}); }; const auto onProcessError = [=](const Process &process) { if (!outputHandler)