Skip to content

Conversation

@PiotrZSL
Copy link
Member

@PiotrZSL PiotrZSL commented Sep 15, 2023

Driver mode passed as an extra argument (command line or config) were not utilized for removing invalid arguments in stripPositionalArgs function, and even if passed as config driver mode were not used for dependency file striping leading to invalid handling of -MD. Additionally driver mode were needed even if user already added cl.exe after --.

@llvmbot
Copy link
Member

llvmbot commented Sep 15, 2023

@llvm/pr-subscribers-clang-tools-extra

@llvm/pr-subscribers-clang-tidy

Changes

Driver mode passed as an extra argument (command line or config) were not utilized for removing invalid arguments in stripPositionalArgs function, and even if passed as config driver mode were not used for dependency file striping leading to invalid handling of -MD. Additionally driver mode were needed even if user already added cl.exe after --.

Fixes: #65108, #53674, #52687, #44701

Full diff: https://github.com/llvm/llvm-project/pull/66553.diff

3 Files Affected:

  • (modified) clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp (+102-25)
  • (modified) clang-tools-extra/docs/ReleaseNotes.rst (+5)
  • (added) clang-tools-extra/test/clang-tidy/infrastructure/driver-mode.cpp (+57)
diff --git a/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp b/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp index dd7f8141a694e2a..152bfbf6bc61f99 100644 --- a/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp +++ b/clang-tools-extra/clang-tidy/tool/ClangTidyMain.cpp @@ -19,6 +19,7 @@ #include "../ClangTidyForceLinker.h" #include "../GlobList.h" #include "clang/Tooling/CommonOptionsParser.h" +#include "clang/Tooling/Tooling.h" #include "llvm/ADT/StringSet.h" #include "llvm/Support/InitLLVM.h" #include "llvm/Support/PluginLoader.h" @@ -26,6 +27,7 @@ #include "llvm/Support/Signals.h" #include "llvm/Support/TargetSelect.h" #include "llvm/Support/WithColor.h" +#include <algorithm> #include <optional> using namespace clang::tooling; @@ -450,7 +452,7 @@ static StringRef closest(StringRef Value, const StringSet<> &Allowed) { return Closest; } -static constexpr StringLiteral VerifyConfigWarningEnd = " [-verify-config]\n"; +static constexpr StringRef VerifyConfigWarningEnd = " [-verify-config]\n"; static bool verifyChecks(const StringSet<> &AllChecks, StringRef CheckGlob, StringRef Source) { @@ -525,8 +527,95 @@ static bool verifyFileExtensions( return AnyInvalid; } +static SmallString<256> makeAbsolute(llvm::StringRef Input) { + if (Input.empty()) + return {}; + SmallString<256> AbsolutePath(Input); + if (std::error_code EC = llvm::sys::fs::make_absolute(AbsolutePath)) { + llvm::errs() << "Can't make absolute path from " << Input << ": " + << EC.message() << "\n"; + } + return AbsolutePath; +} + +static llvm::IntrusiveRefCntPtr<vfs::OverlayFileSystem> createBaseFS() { + llvm::IntrusiveRefCntPtr<vfs::OverlayFileSystem> BaseFS( + new vfs::OverlayFileSystem(vfs::getRealFileSystem())); + + if (!VfsOverlay.empty()) { + IntrusiveRefCntPtr<vfs::FileSystem> VfsFromFile = + getVfsFromFile(VfsOverlay, BaseFS); + if (!VfsFromFile) + return nullptr; + BaseFS->pushOverlay(std::move(VfsFromFile)); + } + return BaseFS; +} + +static llvm::Expected<CommonOptionsParser> +recreateOptionsParserIfNeeded(llvm::ArrayRef<const char *> Args, + llvm::Expected<CommonOptionsParser> OptionsParser, + const ClangTidyOptions &EffectiveOptions) { + + auto DoubleDashIt = std::find(Args.begin(), Args.end(), StringRef("--")); + if (DoubleDashIt == Args.end() || Args.empty() || + Args.back() == StringRef("--")) + return OptionsParser; + + auto IsDriverMode = [](StringRef Argument) { + return Argument.startswith("--driver-mode="); + }; + + if (Args.end() != + std::find_if(std::next(DoubleDashIt), Args.end(), IsDriverMode)) + return OptionsParser; + + std::vector<std::string> CommandArguments(std::next(DoubleDashIt), + Args.end()); + if (CommandArguments.empty() || + llvm::StringRef(CommandArguments.front()).startswith("-")) + CommandArguments.insert(CommandArguments.begin(), "clang-tool"); + + CommandArguments = + OptionsParser->getArgumentsAdjuster()(CommandArguments, ""); + if (EffectiveOptions.ExtraArgsBefore) + CommandArguments = tooling::getInsertArgumentAdjuster( + *EffectiveOptions.ExtraArgsBefore, + tooling::ArgumentInsertPosition::BEGIN)(CommandArguments, ""); + + if (EffectiveOptions.ExtraArgs) + CommandArguments = tooling::getInsertArgumentAdjuster( + *EffectiveOptions.ExtraArgs, + tooling::ArgumentInsertPosition::END)(CommandArguments, ""); + + auto DriverModeIt = std::find_if(CommandArguments.begin(), + CommandArguments.end(), IsDriverMode); + if (DriverModeIt == CommandArguments.end()) { + std::string ExeName = CommandArguments.front(); + tooling::addTargetAndModeForProgramName(CommandArguments, ExeName); + DriverModeIt = std::find_if(CommandArguments.begin(), + CommandArguments.end(), IsDriverMode); + } + + if (DriverModeIt == CommandArguments.end()) + return OptionsParser; + + std::vector<const char *> NewArgs(Args.begin(), Args.end()); + auto InsertIt = + NewArgs.begin() + std::distance(Args.begin(), DoubleDashIt) + 1U; + if (!StringRef(*InsertIt).startswith("-")) + ++InsertIt; + NewArgs.insert(InsertIt, DriverModeIt->c_str()); + + int ArgC = NewArgs.size(); + const char **ArgV = NewArgs.data(); + return CommonOptionsParser::create(ArgC, ArgV, ClangTidyCategory, + cl::ZeroOrMore); +} + int clangTidyMain(int argc, const char **argv) { llvm::InitLLVM X(argc, argv); + llvm::ArrayRef<const char *> Args(argv, argc); // Enable help for -load option, if plugins are enabled. if (cl::Option *LoadOpt = cl::getRegisteredOptions().lookup("load")) @@ -540,34 +629,16 @@ int clangTidyMain(int argc, const char **argv) { return 1; } - llvm::IntrusiveRefCntPtr<vfs::OverlayFileSystem> BaseFS( - new vfs::OverlayFileSystem(vfs::getRealFileSystem())); - - if (!VfsOverlay.empty()) { - IntrusiveRefCntPtr<vfs::FileSystem> VfsFromFile = - getVfsFromFile(VfsOverlay, BaseFS); - if (!VfsFromFile) - return 1; - BaseFS->pushOverlay(std::move(VfsFromFile)); - } + llvm::IntrusiveRefCntPtr<vfs::OverlayFileSystem> BaseFS = createBaseFS(); + if (!BaseFS) + return 1; auto OwningOptionsProvider = createOptionsProvider(BaseFS); auto *OptionsProvider = OwningOptionsProvider.get(); if (!OptionsProvider) return 1; - auto MakeAbsolute = [](const std::string &Input) -> SmallString<256> { - if (Input.empty()) - return {}; - SmallString<256> AbsolutePath(Input); - if (std::error_code EC = llvm::sys::fs::make_absolute(AbsolutePath)) { - llvm::errs() << "Can't make absolute path from " << Input << ": " - << EC.message() << "\n"; - } - return AbsolutePath; - }; - - SmallString<256> ProfilePrefix = MakeAbsolute(StoreCheckProfile); + SmallString<256> ProfilePrefix = makeAbsolute(StoreCheckProfile); StringRef FileName("dummy"); auto PathList = OptionsParser->getSourcePathList(); @@ -575,9 +646,15 @@ int clangTidyMain(int argc, const char **argv) { FileName = PathList.front(); } - SmallString<256> FilePath = MakeAbsolute(std::string(FileName)); - + SmallString<256> FilePath = makeAbsolute(FileName); ClangTidyOptions EffectiveOptions = OptionsProvider->getOptions(FilePath); + OptionsParser = recreateOptionsParserIfNeeded(Args, std::move(OptionsParser), + EffectiveOptions); + if (!OptionsParser) { + llvm::WithColor::error() << llvm::toString(OptionsParser.takeError()); + return 1; + } + std::vector<std::string> EnabledChecks = getCheckNames(EffectiveOptions, AllowEnablingAnalyzerAlphaCheckers); diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst index 19c977977f9044c..013f09f97e18ded 100644 --- a/clang-tools-extra/docs/ReleaseNotes.rst +++ b/clang-tools-extra/docs/ReleaseNotes.rst @@ -122,6 +122,11 @@ Improvements to clang-tidy if any :program:`clang-tidy` subprocess exits with a non-zero code or if exporting fixes fails. +- Improved handling of `--driver-mode=`, now automatically deducing it from + the compiler name after `--`, or properly utilizing it when passed as an + extra argument during :program:`clang-tidy` invocation with explicit compiler + arguments. + New checks ^^^^^^^^^^ diff --git a/clang-tools-extra/test/clang-tidy/infrastructure/driver-mode.cpp b/clang-tools-extra/test/clang-tidy/infrastructure/driver-mode.cpp new file mode 100644 index 000000000000000..fed017e5de09f23 --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/infrastructure/driver-mode.cpp @@ -0,0 +1,57 @@ +// REQUIRES: shell +// RUN: rm -rf "%t" +// RUN: mkdir "%t" +// RUN: cp "%s" "%t/code.cpp" +// RUN: echo '' > "%t/.clang-tidy" + +// Compile commands tests (explicit --driver-mode): +// RUN: echo '[{"directory":"%t/","file":"code.cpp","command":"dummy-compiler /W4 code.cpp"}]' > "%t/compile_commands.json" +// RUN: clang-tidy --checks="-*,clang-diagnostic-reorder-ctor,readability-redundant-string-cstr" -p="%t" "%t/code.cpp" \ +// RUN: --extra-arg=--driver-mode=cl 2>&1 | FileCheck -implicit-check-not='{{warning:|error:}}' %s +// RUN: clang-tidy --checks="-*,clang-diagnostic-reorder-ctor,readability-redundant-string-cstr" -p="%t" "%t/code.cpp" \ +// RUN: --extra-arg-before=--driver-mode=cl 2>&1 | FileCheck -implicit-check-not='{{warning:|error:}}' %s +// RUN: clang-tidy --checks="-*,clang-diagnostic-reorder-ctor,readability-redundant-string-cstr" -p="%t" "%t/code.cpp" \ +// RUN: --config='{ExtraArgs: ["--driver-mode=cl"]}' 2>&1 | FileCheck -implicit-check-not='{{warning:|error:}}' %s +// RUN: clang-tidy --checks="-*,clang-diagnostic-reorder-ctor,readability-redundant-string-cstr" -p="%t" "%t/code.cpp" \ +// RUN: --config='{ExtraArgsBefore: ["--driver-mode=cl"]}' 2>&1 | FileCheck -implicit-check-not='{{warning:|error:}}' %s + +// Compile commands tests (implicit --driver-mode): +// RUN: echo '[{"directory":"%t/","file":"code.cpp","command":"cl.exe /W4 code.cpp"}]' > "%t/compile_commands.json" +// RUN: clang-tidy --checks="-*,clang-diagnostic-reorder-ctor,readability-redundant-string-cstr" -p="%t" "%t/code.cpp" \ +// RUN: 2>&1 | FileCheck -implicit-check-not='{{warning:|error:}}' %s + +// Compile commands tests (negative) +// RUN: echo '[{"directory":"%t/","file":"code.cpp","command":"dummy-compiler -MT /W4 code.cpp"}]' > "%t/compile_commands.json" +// RUN: clang-tidy --checks="-*,clang-diagnostic-reorder-ctor,readability-redundant-string-cstr" -p="%t" "%t/code.cpp" \ +// RUN: 2>&1 | FileCheck -implicit-check-not='{{warning:|error:}}' --check-prefix=NEGATIVE_CHECK --allow-empty %s + +// Command line tests (explicit --driver-mode): +// RUN: clang-tidy --checks="-*,clang-diagnostic-reorder-ctor,readability-redundant-string-cstr" "%t/code.cpp" \ +// RUN: -- --driver-mode=cl -MD /W4 code.cpp 2>&1 | FileCheck -implicit-check-not='{{warning:|error:}}' %s +// RUN: clang-tidy --checks="-*,clang-diagnostic-reorder-ctor,readability-redundant-string-cstr" "%t/code.cpp" \ +// RUN: --extra-arg=--driver-mode=cl -- -MD /W4 code.cpp 2>&1 | FileCheck -implicit-check-not='{{warning:|error:}}' %s +// RUN: clang-tidy --checks="-*,clang-diagnostic-reorder-ctor,readability-redundant-string-cstr" "%t/code.cpp" \ +// RUN: --extra-arg-before=--driver-mode=cl -- -MD /W4 code.cpp 2>&1 | FileCheck -implicit-check-not='{{warning:|error:}}' %s +// RUN: clang-tidy --checks="-*,clang-diagnostic-reorder-ctor,readability-redundant-string-cstr" -p="%t" "%t/code.cpp" \ +// RUN: --config='{ExtraArgs: ["--driver-mode=cl"]}' -- -MD /W4 code.cpp 2>&1 | FileCheck -implicit-check-not='{{warning:|error:}}' %s +// RUN: clang-tidy --checks="-*,clang-diagnostic-reorder-ctor,readability-redundant-string-cstr" -p="%t" "%t/code.cpp" \ +// RUN: --config='{ExtraArgsBefore: ["--driver-mode=cl"]}' -- -MD /W4 code.cpp 2>&1 | FileCheck -implicit-check-not='{{warning:|error:}}' %s + +// Command line tests (implicit --driver-mode): +// RUN: clang-tidy --checks="-*,clang-diagnostic-reorder-ctor,readability-redundant-string-cstr" -p="%t" "%t/code.cpp" \ +// RUN: -- cl.exe -MD /W4 code.cpp 2>&1 | FileCheck -implicit-check-not='{{warning:|error:}}' %s + +// Command line tests (negative) +// RUN: clang-tidy --checks="-*,clang-diagnostic-reorder-ctor,readability-redundant-string-cstr" -p="%t" "%t/code.cpp" \ +// RUN: -- dummy-compiler -MT /W4 code.cpp 2>&1 | FileCheck -implicit-check-not='{{warning:|error:}}' --check-prefix=NEGATIVE_CHECK --allow-empty %s + +struct string {}; + +struct A { + A(string aa, string bb) : b(bb), a(aa) {} +// CHECK: code.cpp:[[@LINE-1]]:31: warning: field 'b' will be initialized after field 'a' [clang-diagnostic-reorder-ctor] +// NEGATIVE_CHECK-NOT: warning: field 'b' will be initialized after field 'a' [clang-diagnostic-reorder-ctor] + + string a; + string b; +}; 
@PiotrZSL
Copy link
Member Author

If anyone see any other alternative implementations or see some potential issues, then any comments are welcome.

@rsniezek
Copy link

Is there any chance this could land in the near future? CMake is currenlty passing the driver mode as extra-arg-before which, as I understand, is not utilized without this PR. I've opened an issue on cmake to pass the driver mode after the -- delimiter but not sure if this will land.

I currenlty have broken checks when using cmake integration due to the compiler intrinsics (xmmintrin.h) being leaked from 3rd party lib to my codebase and without driver-mode after --, clang-tidy crashes.

@PiotrZSL
Copy link
Member Author

@rsniezek If someone will review & approve it, then it will land.

@rsniezek
Copy link

rsniezek commented Feb 23, 2024

Let's move discussion from the other topic here.

I have this minimalistic reproduction example:
main.cpp

#include <xmmintrin.h> int main() { return 0; }

With CMakeLists.txt:

cmake_minimum_required(VERSION 3.26) project(testexe) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED) set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE) set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}) find_program(CLANGTIDY clang-tidy REQUIRED) set(CMAKE_CXX_CLANG_TIDY ${CLANGTIDY};--checks=*; -p; ${CMAKE_BINARY_DIR}) add_executable(testexe main.cpp)

When I run the compilation from cmake level I get a intrinsics errors:

VERBOSE=1 cmake --build build Change Dir: '/home/rsniezek/workspace/testings_stuff/build' Run Build Command(s): /run/current-system/sw/bin/ninja -v [1/2] /nix/store/jacf2kn4dfj99c3ywbvfyg6w53xvxsfl-cmake-3.27.8/bin/cmake -E __run_co_compile --tidy="/run/current-system/sw/bin/clang-tidy;--checks=*;-p;/home/rsniezek/workspace/testings_stuff/build;--extra-arg-before=--driver-mode=g++" --source=/home/rsniezek/workspace/testings_stuff/main.cpp -- /run/current-system/sw/bin/c++ -isystem /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/include/c++/13.2.0 -isystem /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/include/c++/13.2.0/x86_64-unknown-linux-gnu -isystem /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/include/c++/13.2.0/backward -isystem /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include -isystem /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/include -isystem /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include-fixed -isystem /nix/store/3mmvgb08qy8n6n37mnprf77fnp4rssi9-glibc-2.38-27-dev/include -std=gnu++23 -fPIE -MD -MT CMakeFiles/testexe.dir/main.cpp.o -MF CMakeFiles/testexe.dir/main.cpp.o.d -o CMakeFiles/testexe.dir/main.cpp.o -c /home/rsniezek/workspace/testings_stuff/main.cpp FAILED: CMakeFiles/testexe.dir/main.cpp.o /nix/store/jacf2kn4dfj99c3ywbvfyg6w53xvxsfl-cmake-3.27.8/bin/cmake -E __run_co_compile --tidy="/run/current-system/sw/bin/clang-tidy;--checks=*;-p;/home/rsniezek/workspace/testings_stuff/build;--extra-arg-before=--driver-mode=g++" --source=/home/rsniezek/workspace/testings_stuff/main.cpp -- /run/current-system/sw/bin/c++ -isystem /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/include/c++/13.2.0 -isystem /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/include/c++/13.2.0/x86_64-unknown-linux-gnu -isystem /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/include/c++/13.2.0/backward -isystem /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include -isystem /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/include -isystem /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include-fixed -isystem /nix/store/3mmvgb08qy8n6n37mnprf77fnp4rssi9-glibc-2.38-27-dev/include -std=gnu++23 -fPIE -MD -MT CMakeFiles/testexe.dir/main.cpp.o -MF CMakeFiles/testexe.dir/main.cpp.o.d -o CMakeFiles/testexe.dir/main.cpp.o -c /home/rsniezek/workspace/testings_stuff/main.cpp error: too many errors emitted, stopping now [clang-diagnostic-error] /home/rsniezek/workspace/testings_stuff/main.cpp:1:1: warning: system include xmmintrin.h not allowed [llvmlibc-restrict-system-libc-headers] 1 | #include <xmmintrin.h> | ^ note: this fix will not be applied because it overlaps with another fix /home/rsniezek/workspace/testings_stuff/main.cpp:1:1: warning: included header xmmintrin.h is not used directly [misc-include-cleaner] note: this fix will not be applied because it overlaps with another fix /home/rsniezek/workspace/testings_stuff/main.cpp:3:5: warning: declaration must be declared within the '__llvm_libc' namespace [llvmlibc-implementation-in-namespace] 3 | int main() { return 0; } | ^ /home/rsniezek/workspace/testings_stuff/main.cpp:3:5: warning: use a trailing return type for this function [modernize-use-trailing-return-type] 3 | int main() { return 0; } | ~~~ ^ | auto -> int /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:136:19: error: use of undeclared identifier '__builtin_ia32_addss' [clang-diagnostic-error] 136 | return (__m128) __builtin_ia32_addss ((__v4sf)__A, (__v4sf)__B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:142:19: error: use of undeclared identifier '__builtin_ia32_subss' [clang-diagnostic-error] 142 | return (__m128) __builtin_ia32_subss ((__v4sf)__A, (__v4sf)__B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:148:19: error: use of undeclared identifier '__builtin_ia32_mulss' [clang-diagnostic-error] 148 | return (__m128) __builtin_ia32_mulss ((__v4sf)__A, (__v4sf)__B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:154:19: error: use of undeclared identifier '__builtin_ia32_divss'; did you mean '__builtin_ia32_minss'? [clang-diagnostic-error] 154 | return (__m128) __builtin_ia32_divss ((__v4sf)__A, (__v4sf)__B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:148:19: note: '__builtin_ia32_minss' declared here 148 | return (__m128) __builtin_ia32_mulss ((__v4sf)__A, (__v4sf)__B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:248:10: error: use of undeclared identifier '__builtin_ia32_andps'; did you mean '__builtin_ia32_haddps'? [clang-diagnostic-error] 248 | return __builtin_ia32_andps (__A, __B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:248:10: note: '__builtin_ia32_haddps' declared here /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:254:10: error: use of undeclared identifier '__builtin_ia32_andnps' [clang-diagnostic-error] 254 | return __builtin_ia32_andnps (__A, __B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:260:10: error: use of undeclared identifier '__builtin_ia32_orps' [clang-diagnostic-error] 260 | return __builtin_ia32_orps (__A, __B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:266:10: error: use of undeclared identifier '__builtin_ia32_xorps' [clang-diagnostic-error] 266 | return __builtin_ia32_xorps (__A, __B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:294:19: error: use of undeclared identifier '__builtin_ia32_movss' [clang-diagnostic-error] 294 | return (__m128) __builtin_ia32_movss ((__v4sf) __A, | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:304:19: error: use of undeclared identifier '__builtin_ia32_movss' [clang-diagnostic-error] 304 | return (__m128) __builtin_ia32_movss ((__v4sf) __A, | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:332:19: error: use of undeclared identifier '__builtin_ia32_movss' [clang-diagnostic-error] 332 | return (__m128) __builtin_ia32_movss ((__v4sf) __A, | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:342:19: error: use of undeclared identifier '__builtin_ia32_movss' [clang-diagnostic-error] 342 | return (__m128) __builtin_ia32_movss ((__v4sf) __A, | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:386:19: error: use of undeclared identifier '__builtin_ia32_cmpgtps'; did you mean '__builtin_ia32_cmpltps'? [clang-diagnostic-error] 386 | return (__m128) __builtin_ia32_cmpgtps ((__v4sf)__A, (__v4sf)__B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:374:19: note: '__builtin_ia32_cmpltps' declared here 374 | return (__m128) __builtin_ia32_cmpltps ((__v4sf)__A, (__v4sf)__B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:392:19: error: use of undeclared identifier '__builtin_ia32_cmpgeps'; did you mean '__builtin_ia32_cmpleps'? [clang-diagnostic-error] 392 | return (__m128) __builtin_ia32_cmpgeps ((__v4sf)__A, (__v4sf)__B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:380:19: note: '__builtin_ia32_cmpleps' declared here 380 | return (__m128) __builtin_ia32_cmpleps ((__v4sf)__A, (__v4sf)__B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:416:19: error: use of undeclared identifier '__builtin_ia32_cmpngtps'; did you mean '__builtin_ia32_cmpnltps'? [clang-diagnostic-error] 416 | return (__m128) __builtin_ia32_cmpngtps ((__v4sf)__A, (__v4sf)__B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:386:19: note: '__builtin_ia32_cmpnltps' declared here 386 | return (__m128) __builtin_ia32_cmpgtps ((__v4sf)__A, (__v4sf)__B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:422:19: error: use of undeclared identifier '__builtin_ia32_cmpngeps'; did you mean '__builtin_ia32_cmpnleps'? [clang-diagnostic-error] 422 | return (__m128) __builtin_ia32_cmpngeps ((__v4sf)__A, (__v4sf)__B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:410:19: note: '__builtin_ia32_cmpnleps' declared here 410 | return (__m128) __builtin_ia32_cmpnleps ((__v4sf)__A, (__v4sf)__B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:608:19: error: use of undeclared identifier '__builtin_ia32_cvtsi2ss'; did you mean '__builtin_ia32_cvtsd2ss'? [clang-diagnostic-error] 608 | return (__m128) __builtin_ia32_cvtsi2ss ((__v4sf) __A, __B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:608:19: note: '__builtin_ia32_cvtsd2ss' declared here /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:608:58: error: cannot initialize a parameter of type '__attribute__((__vector_size__(2 * sizeof(double)))) double' (vector of 2 'double' values) with an lvalue of type 'int' [clang-diagnostic-error] 608 | return (__m128) __builtin_ia32_cvtsi2ss ((__v4sf) __A, __B); | ^~~ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:624:19: error: use of undeclared identifier '__builtin_ia32_cvtsi642ss'; did you mean '__builtin_ia32_cvtsd2ss'? [clang-diagnostic-error] 624 | return (__m128) __builtin_ia32_cvtsi642ss ((__v4sf) __A, __B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:608:19: note: '__builtin_ia32_cvtsd2ss' declared here 608 | return (__m128) __builtin_ia32_cvtsi2ss ((__v4sf) __A, __B); | ^ 11943 warnings and 20 errors generated. Error while processing /home/rsniezek/workspace/testings_stuff/main.cpp. Suppressed 11939 warnings (11939 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. Found compiler error(s). ninja: build stopped: subcommand failed. 

If I bypass cmake and ninja, and invoke the clang-tidy as I expect ninja is doing, I get exact same result:

/run/current-system/sw/bin/clang-tidy --checks=* -p /home/rsniezek/workspace/testings_stuff/build --extra-arg-before=--driver-mode=g++ /home/rsniezek/workspace/testings_stuff/main.cpp -- /run/current-system/sw/bin/c++ -isystem /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/include/c++/13.2.0 -isystem /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/include/c++/13.2.0/x86_64-unknown-linux-gnu -isystem /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/include/c++/13.2.0/backward -isystem /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include -isystem /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/include -isystem /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include-fixed -isystem /nix/store/3mmvgb08qy8n6n37mnprf77fnp4rssi9-glibc-2.38-27-dev/include -std=gnu++23 -fPIE -MD -MT CMakeFiles/testexe.dir/main.cpp.o -MF CMakeFiles/testexe.dir/main.cpp.o.d -o CMakeFiles/testexe.dir/main.cpp.o -c /home/rsniezek/workspace/testings_stuff/main.cpp 11943 warnings and 20 errors generated. Error while processing /home/rsniezek/workspace/testings_stuff/main.cpp. error: too many errors emitted, stopping now [clang-diagnostic-error] /home/rsniezek/workspace/testings_stuff/main.cpp:1:1: warning: system include xmmintrin.h not allowed [llvmlibc-restrict-system-libc-headers] 1 | #include <xmmintrin.h> | ^ note: this fix will not be applied because it overlaps with another fix /home/rsniezek/workspace/testings_stuff/main.cpp:1:1: warning: included header xmmintrin.h is not used directly [misc-include-cleaner] note: this fix will not be applied because it overlaps with another fix /home/rsniezek/workspace/testings_stuff/main.cpp:3:5: warning: declaration must be declared within the '__llvm_libc' namespace [llvmlibc-implementation-in-namespace] 3 | int main() { return 0; } | ^ /home/rsniezek/workspace/testings_stuff/main.cpp:3:5: warning: use a trailing return type for this function [modernize-use-trailing-return-type] 3 | int main() { return 0; } | ~~~ ^ | auto -> int /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:136:19: error: use of undeclared identifier '__builtin_ia32_addss' [clang-diagnostic-error] 136 | return (__m128) __builtin_ia32_addss ((__v4sf)__A, (__v4sf)__B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:142:19: error: use of undeclared identifier '__builtin_ia32_subss' [clang-diagnostic-error] 142 | return (__m128) __builtin_ia32_subss ((__v4sf)__A, (__v4sf)__B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:148:19: error: use of undeclared identifier '__builtin_ia32_mulss' [clang-diagnostic-error] 148 | return (__m128) __builtin_ia32_mulss ((__v4sf)__A, (__v4sf)__B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:154:19: error: use of undeclared identifier '__builtin_ia32_divss'; did you mean '__builtin_ia32_minss'? [clang-diagnostic-error] 154 | return (__m128) __builtin_ia32_divss ((__v4sf)__A, (__v4sf)__B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:148:19: note: '__builtin_ia32_minss' declared here 148 | return (__m128) __builtin_ia32_mulss ((__v4sf)__A, (__v4sf)__B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:248:10: error: use of undeclared identifier '__builtin_ia32_andps'; did you mean '__builtin_ia32_haddps'? [clang-diagnostic-error] 248 | return __builtin_ia32_andps (__A, __B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:248:10: note: '__builtin_ia32_haddps' declared here /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:254:10: error: use of undeclared identifier '__builtin_ia32_andnps' [clang-diagnostic-error] 254 | return __builtin_ia32_andnps (__A, __B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:260:10: error: use of undeclared identifier '__builtin_ia32_orps' [clang-diagnostic-error] 260 | return __builtin_ia32_orps (__A, __B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:266:10: error: use of undeclared identifier '__builtin_ia32_xorps' [clang-diagnostic-error] 266 | return __builtin_ia32_xorps (__A, __B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:294:19: error: use of undeclared identifier '__builtin_ia32_movss' [clang-diagnostic-error] 294 | return (__m128) __builtin_ia32_movss ((__v4sf) __A, | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:304:19: error: use of undeclared identifier '__builtin_ia32_movss' [clang-diagnostic-error] 304 | return (__m128) __builtin_ia32_movss ((__v4sf) __A, | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:332:19: error: use of undeclared identifier '__builtin_ia32_movss' [clang-diagnostic-error] 332 | return (__m128) __builtin_ia32_movss ((__v4sf) __A, | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:342:19: error: use of undeclared identifier '__builtin_ia32_movss' [clang-diagnostic-error] 342 | return (__m128) __builtin_ia32_movss ((__v4sf) __A, | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:386:19: error: use of undeclared identifier '__builtin_ia32_cmpgtps'; did you mean '__builtin_ia32_cmpltps'? [clang-diagnostic-error] 386 | return (__m128) __builtin_ia32_cmpgtps ((__v4sf)__A, (__v4sf)__B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:374:19: note: '__builtin_ia32_cmpltps' declared here 374 | return (__m128) __builtin_ia32_cmpltps ((__v4sf)__A, (__v4sf)__B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:392:19: error: use of undeclared identifier '__builtin_ia32_cmpgeps'; did you mean '__builtin_ia32_cmpleps'? [clang-diagnostic-error] 392 | return (__m128) __builtin_ia32_cmpgeps ((__v4sf)__A, (__v4sf)__B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:380:19: note: '__builtin_ia32_cmpleps' declared here 380 | return (__m128) __builtin_ia32_cmpleps ((__v4sf)__A, (__v4sf)__B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:416:19: error: use of undeclared identifier '__builtin_ia32_cmpngtps'; did you mean '__builtin_ia32_cmpnltps'? [clang-diagnostic-error] 416 | return (__m128) __builtin_ia32_cmpngtps ((__v4sf)__A, (__v4sf)__B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:386:19: note: '__builtin_ia32_cmpnltps' declared here 386 | return (__m128) __builtin_ia32_cmpgtps ((__v4sf)__A, (__v4sf)__B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:422:19: error: use of undeclared identifier '__builtin_ia32_cmpngeps'; did you mean '__builtin_ia32_cmpnleps'? [clang-diagnostic-error] 422 | return (__m128) __builtin_ia32_cmpngeps ((__v4sf)__A, (__v4sf)__B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:410:19: note: '__builtin_ia32_cmpnleps' declared here 410 | return (__m128) __builtin_ia32_cmpnleps ((__v4sf)__A, (__v4sf)__B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:608:19: error: use of undeclared identifier '__builtin_ia32_cvtsi2ss'; did you mean '__builtin_ia32_cvtsd2ss'? [clang-diagnostic-error] 608 | return (__m128) __builtin_ia32_cvtsi2ss ((__v4sf) __A, __B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:608:19: note: '__builtin_ia32_cvtsd2ss' declared here /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:608:58: error: cannot initialize a parameter of type '__attribute__((__vector_size__(2 * sizeof(double)))) double' (vector of 2 'double' values) with an lvalue of type 'int' [clang-diagnostic-error] 608 | return (__m128) __builtin_ia32_cvtsi2ss ((__v4sf) __A, __B); | ^~~ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:624:19: error: use of undeclared identifier '__builtin_ia32_cvtsi642ss'; did you mean '__builtin_ia32_cvtsd2ss'? [clang-diagnostic-error] 624 | return (__m128) __builtin_ia32_cvtsi642ss ((__v4sf) __A, __B); | ^ /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include/xmmintrin.h:608:19: note: '__builtin_ia32_cvtsd2ss' declared here 608 | return (__m128) __builtin_ia32_cvtsi2ss ((__v4sf) __A, __B); | ^ Suppressed 11939 warnings (11939 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. Found compiler error(s). 

adding --driver-mode=g++ after the -- doesn't change anything, still the same errors.
removing -- and all after it also doesn't change a thing, same errors visible.
only if I leave the -- and nothing after it, I am able to successfully run the checks:

/run/current-system/sw/bin/clang-tidy --checks=* -p /home/rsniezek/workspace/testings_stuff/build --extra-arg-before=--driver-mode=g++ /home/rsniezek/workspace/testings_stuff/main.cpp -- 11278 warnings generated. /home/rsniezek/workspace/testings_stuff/main.cpp:1:1: warning: system include xmmintrin.h not allowed [llvmlibc-restrict-system-libc-headers] 1 | #include <xmmintrin.h> | ^ note: this fix will not be applied because it overlaps with another fix /home/rsniezek/workspace/testings_stuff/main.cpp:1:1: warning: included header xmmintrin.h is not used directly [misc-include-cleaner] note: this fix will not be applied because it overlaps with another fix /home/rsniezek/workspace/testings_stuff/main.cpp:3:5: warning: declaration must be declared within the '__llvm_libc' namespace [llvmlibc-implementation-in-namespace] 3 | int main() { return 0; } | ^ /home/rsniezek/workspace/testings_stuff/main.cpp:3:5: warning: use a trailing return type for this function [modernize-use-trailing-return-type] 3 | int main() { return 0; } | ~~~ ^ | auto -> int Suppressed 11274 warnings (11274 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 

Would your merge improve this situation?

EDIT:
I checked the run-clang-tidy.py script from the repo and it is also reporting the errors from the header.

@PiotrZSL
Copy link
Member Author

@rsniezek No thats diffrent issue, you need to use xmmintrin.h from clang, usually it should work by default, but maybe clang-tidy and clang are installed in different folders. In such case you may need to add explicitly -isystem to location of xmmintrin.h

@rsniezek
Copy link

you are right, when prepended path to clang headres the check don't crash even with full compile commands after the --

/run/current-system/sw/bin/clang-tidy --checks=* -p /home/rsniezek/workspace/testings_stuff/build --extra-arg-before=--driver-mode=g++ /home/rsniezek/workspace/testings_stuff/main.cpp -- /run/current-system/sw/bin/c++ -isystem /nix/store/wh3j8a20d27npyvn2f83w0vl6hw4x9vy-clang-wrapper-17.0.6/resource-root/include -isystem /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/include/c++/13.2.0 -isystem /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/include/c++/13.2.0/x86_64-unknown-linux-gnu -isystem /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/include/c++/13.2.0/backward -isystem /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include -isystem /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/include -isystem /nix/store/lbamp822r4dmq2f7vizvswbilk83awsr-gcc-13.2.0/lib/gcc/x86_64-unknown-linux-gnu/13.2.0/include-fixed -isystem /nix/store/3mmvgb08qy8n6n37mnprf77fnp4rssi9-glibc-2.38-27-dev/include -isystem /nix/store/wh3j8a20d27npyvn2f83w0vl6hw4x9vy-clang-wrapper-17.0.6/resource-root/include -std=gnu++23 -fPIE -MD -MT CMakeFiles/testexe.dir/main.cpp.o -MF CMakeFiles/testexe.dir/main.cpp.o.d -o CMakeFiles/testexe.dir/main.cpp.o -c /home/rsniezek/workspace/testings_stuff/main.cpp 11330 warnings generated. /home/rsniezek/workspace/testings_stuff/main.cpp:1:1: warning: system include xmmintrin.h not allowed [llvmlibc-restrict-system-libc-headers] 1 | #include <xmmintrin.h> | ^ note: this fix will not be applied because it overlaps with another fix /home/rsniezek/workspace/testings_stuff/main.cpp:1:1: warning: included header xmmintrin.h is not used directly [misc-include-cleaner] note: this fix will not be applied because it overlaps with another fix /home/rsniezek/workspace/testings_stuff/main.cpp:3:5: warning: declaration must be declared within the '__llvm_libc' namespace [llvmlibc-implementation-in-namespace] 3 | int main() { return 0; } | ^ /home/rsniezek/workspace/testings_stuff/main.cpp:3:5: warning: use a trailing return type for this function [modernize-use-trailing-return-type] 3 | int main() { return 0; } | ~~~ ^ | auto -> int Suppressed 11326 warnings (11326 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 

Can this extra path be added with the extra-args[-before]? I seem to be unable to do this correctly.

@rsniezek
Copy link

nevermind, managed to do it. had to split "-isystem" and the path to separate --extra-arg-before and it worked. thanks agian!

@PiotrZSL
Copy link
Member Author

PiotrZSL commented Mar 6, 2024

bump

@PiotrZSL PiotrZSL requested a review from 5chmidti March 6, 2024 16:45
Copy link
Contributor

@5chmidti 5chmidti left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know enough about the driver to approve this, but I read this a few times and I think that this is correct. I just added a few small and non-functional nits

@ghost
Copy link

ghost commented May 21, 2024

bump.

@PiotrZSL PiotrZSL force-pushed the 65108-clang-tidy-not-reporting-errors-with-md-cl-option branch from 37ed735 to 96703d7 Compare August 1, 2024 18:14
@PiotrZSL
Copy link
Member Author

PiotrZSL commented Aug 1, 2024

Rebased, bump

@PiotrZSL PiotrZSL removed the request for review from njames93 November 24, 2024 16:27
Driver mode passed as an extra argument (command line or config) were not utilized for removing invalid arguments in stripPositionalArgs function, and even if passed as config driver mode were not used for dependency file striping leading to invalid handling of -MD. Additionally driver mode were needed even if user already added cl.exe after --.
@PiotrZSL PiotrZSL force-pushed the 65108-clang-tidy-not-reporting-errors-with-md-cl-option branch from 96703d7 to d5154cf Compare November 24, 2024 16:39
@PiotrZSL
Copy link
Member Author

Rebased, bump

@HerrCai0907 HerrCai0907 removed their request for review February 24, 2025 08:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment