Browse Source

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
pull/365/head
Brad King 2 years ago
committed by Kitware Robot
parent
commit
663cc941bd
  1. 13
      Source/cmcmd.cxx
  2. 1
      Tests/RunCMake/IncludeWhatYouUse/C-error-Build-result.txt
  3. 4
      Tests/RunCMake/IncludeWhatYouUse/C-error-Build-stdout.txt
  4. 3
      Tests/RunCMake/IncludeWhatYouUse/C-error.cmake
  5. 1
      Tests/RunCMake/IncludeWhatYouUse/CXX-error-Build-result.txt
  6. 4
      Tests/RunCMake/IncludeWhatYouUse/CXX-error-Build-stdout.txt
  7. 3
      Tests/RunCMake/IncludeWhatYouUse/CXX-error.cmake
  8. 2
      Tests/RunCMake/IncludeWhatYouUse/RunCMakeTest.cmake

13
Source/cmcmd.cxx

@ -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,

1
Tests/RunCMake/IncludeWhatYouUse/C-error-Build-result.txt

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

4
Tests/RunCMake/IncludeWhatYouUse/C-error-Build-stdout.txt

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

3
Tests/RunCMake/IncludeWhatYouUse/C-error.cmake

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

1
Tests/RunCMake/IncludeWhatYouUse/CXX-error-Build-result.txt

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

4
Tests/RunCMake/IncludeWhatYouUse/CXX-error-Build-stdout.txt

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

3
Tests/RunCMake/IncludeWhatYouUse/CXX-error.cmake

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

2
Tests/RunCMake/IncludeWhatYouUse/RunCMakeTest.cmake

@ -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)

Loading…
Cancel
Save