Merge topic 'iwyu_errors'

fcacc319d9 IWYU: Return error code if user enables error reporting

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: buildbot <buildbot@kitware.com>
Merge-request: !8406
This commit is contained in:
Brad King
2023-04-26 14:31:01 +00:00
committed by Kitware Robot
8 changed files with 28 additions and 3 deletions

View File

@@ -3,6 +3,7 @@
#include "cmcmd.h"
#include <functional>
#include <iterator>
#include <cm/optional>
#include <cmext/algorithm>
@@ -346,7 +347,6 @@ int HandleIWYU(const std::string& runCmd, const std::string& /* sourceFile */,
cmList iwyu_cmd{ runCmd, cmList::EmptyElements::Yes };
cm::append(iwyu_cmd, orig_cmd.begin() + 1, orig_cmd.end());
// Run the iwyu command line. Capture its stderr and hide its stdout.
// Ignore its return code because the tool always returns non-zero.
std::string stdErr;
int ret;
if (!cmSystemTools::RunSingleCommand(iwyu_cmd, nullptr, &stdErr, &ret,
@@ -360,8 +360,15 @@ int HandleIWYU(const std::string& runCmd, const std::string& /* sourceFile */,
std::cerr << "Warning: include-what-you-use reported diagnostics:\n"
<< stdErr << "\n";
}
// always return 0 we don't want to break the compile
return 0;
// Older versions of iwyu always returned a non-zero exit code,
// so ignore it unless the user has enabled errors.
auto has_error_opt = std::find_if(
iwyu_cmd.cbegin(), iwyu_cmd.cend(),
[](std::string const& opt) { return cmHasLiteralPrefix(opt, "--error"); });
bool errors_enabled = has_error_opt != iwyu_cmd.cend() &&
has_error_opt != iwyu_cmd.cbegin() &&
*std::prev(has_error_opt) == "-Xiwyu";
return errors_enabled ? ret : 0;
}
int HandleTidy(const std::string& runCmd, const std::string& sourceFile,

View File

@@ -0,0 +1 @@
[^0]

View File

@@ -0,0 +1,4 @@
Warning: include-what-you-use reported diagnostics:
should add these lines:
*
#include <\.\.\.>

View File

@@ -0,0 +1,3 @@
enable_language(C)
set(CMAKE_C_INCLUDE_WHAT_YOU_USE "${PSEUDO_IWYU}" -Xiwyu --error)
add_executable(main main.c)

View File

@@ -0,0 +1 @@
[^0]

View File

@@ -0,0 +1,4 @@
Warning: include-what-you-use reported diagnostics:
should add these lines:
*
#include <\.\.\.>

View File

@@ -0,0 +1,3 @@
enable_language(CXX)
set(CMAKE_CXX_INCLUDE_WHAT_YOU_USE "$<1:${PSEUDO_IWYU}>" -Xiwyu --error)
add_executable(main main.cxx)

View File

@@ -16,6 +16,8 @@ endfunction()
run_iwyu(C)
run_iwyu(CXX)
run_iwyu(C-error)
run_iwyu(CXX-error)
if (NOT RunCMake_GENERATOR STREQUAL "Watcom WMake")
run_iwyu(C-launch)
run_iwyu(CXX-launch)