diff --git a/cli/cppcheckexecutor.cpp b/cli/cppcheckexecutor.cpp index 70ca3693835..a705aa59508 100644 --- a/cli/cppcheckexecutor.cpp +++ b/cli/cppcheckexecutor.cpp @@ -301,7 +301,7 @@ int CppCheckExecutor::check_internal(const Settings& settings) const #endif } - returnValue |= cppcheck.analyseWholeProgram(settings.buildDir, mFiles, mFileSettings, ""); + returnValue |= cppcheck.analyseWholeProgram(settings.buildDir, mFiles, mFileSettings, stdLogger.getCtuInfo()); if (settings.severity.isEnabled(Severity::information) || settings.checkConfiguration) { const bool err = reportSuppressions(settings, suppressions, settings.checks.isEnabled(Checks::unusedFunction), mFiles, mFileSettings, stdLogger); diff --git a/lib/cppcheck.cpp b/lib/cppcheck.cpp index a6372b03056..254801af4c9 100644 --- a/lib/cppcheck.cpp +++ b/lib/cppcheck.cpp @@ -1426,6 +1426,8 @@ void CppCheck::executeAddons(const std::vector& files, const std::s // ensure all addons have already been resolved - TODO: remove when settings are const after creation assert(mSettings.addonInfos.size() == mSettings.addons.size()); + std::string ctuInfo; + for (const AddonInfo &addonInfo : mSettings.addonInfos) { if (addonInfo.name != "misra" && !addonInfo.ctu && endsWith(files.back(), ".ctu-info")) continue; @@ -1444,10 +1446,14 @@ void CppCheck::executeAddons(const std::vector& files, const std::s if (obj.count("summary") > 0) { if (obj.count("data") > 0) { - errmsg.severity = Severity::internal; - errmsg.id = "ctuinfo"; - errmsg.setmsg(res.serialize()); - reportErr(errmsg); + if (!mSettings.buildDir.empty()) { + ctuInfo += res.serialize(); + } else { + errmsg.severity = Severity::internal; + errmsg.id = "ctuinfo"; + errmsg.setmsg(res.serialize()); + reportErr(errmsg); + } } continue; } @@ -1490,6 +1496,12 @@ void CppCheck::executeAddons(const std::vector& files, const std::s reportErr(errmsg); } } + + if (!mSettings.buildDir.empty() && fileList.empty()) { + const std::string& ctuInfoFile = getCtuInfoFileName(files[0]); + std::ofstream fout(ctuInfoFile); + fout << ctuInfo; + } } void CppCheck::executeAddonsWholeProgram(const std::list &files, const std::list& fileSettings, const std::string& ctuInfo) @@ -1503,7 +1515,9 @@ void CppCheck::executeAddonsWholeProgram(const std::list &files files.addFile(fileName); std::ofstream fout(fileName); fout << ctuInfo; + fout.close(); executeAddons({fileName}, ""); + return; } std::vector ctuInfoFiles;