]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
Explicitly select C++ when using -fcxx-modules (#861)
authorr-burns <52847440+r-burns@users.noreply.github.com>
Thu, 17 Jun 2021 18:16:52 +0000 (11:16 -0700)
committerGitHub <noreply@github.com>
Thu, 17 Jun 2021 18:16:52 +0000 (20:16 +0200)
Typically, clang is able to auto-detect C++ files and switch to C++
mode, even when `argv[0]` is simply `clang` (without the `++`).

However, Nixpkgs provides `clang` as a wrapper script over the
underlying compiler binary, and only enables C++ standard library
include paths when it thinks it's being invoked as a C++ compiler:

https://github.com/NixOS/nixpkgs/blob/961cae37edeb34b5dec8060e49e5abbde3af9c00/pkgs/build-support/cc-wrapper/cc-wrapper.sh#L28

https://github.com/NixOS/nixpkgs/blob/961cae37edeb34b5dec8060e49e5abbde3af9c00/pkgs/build-support/cc-wrapper/cc-wrapper.sh#L54-L55

https://github.com/NixOS/nixpkgs/blob/961cae37edeb34b5dec8060e49e5abbde3af9c00/pkgs/build-support/cc-wrapper/cc-wrapper.sh#L135-L138

So for the benefit of less clever compiler toolchains which
can't always see that these invocations are using C++ mode,
we explicitly specify `-x c++` so they do the right thing.

test/suites/modules.bash

index 51ddb2a3e4a73c1d42b0ef9e80b0a9ca14eae8ee..3f1631847c0187ff22719b74297d9fd23cb159b7 100644 (file)
@@ -34,10 +34,10 @@ SUITE_modules() {
     # -------------------------------------------------------------------------
     TEST "fall back to real compiler, no sloppiness"
 
-    $CCACHE_COMPILE -fmodules -fcxx-modules -c test1.cpp -MD
+    $CCACHE_COMPILE -x c++ -fmodules -fcxx-modules -c test1.cpp -MD
     expect_stat "can't use modules" 1
 
-    $CCACHE_COMPILE -fmodules -fcxx-modules -c test1.cpp -MD
+    $CCACHE_COMPILE -x c++ -fmodules -fcxx-modules -c test1.cpp -MD
     expect_stat "can't use modules" 2
 
     # -------------------------------------------------------------------------
@@ -45,27 +45,27 @@ SUITE_modules() {
 
     unset CCACHE_DEPEND
 
-    CCACHE_SLOPPINESS="$DEFAULT_SLOPPINESS modules" $CCACHE_COMPILE -fmodules -fcxx-modules -c test1.cpp -MD
+    CCACHE_SLOPPINESS="$DEFAULT_SLOPPINESS modules" $CCACHE_COMPILE -x c++ -fmodules -fcxx-modules -c test1.cpp -MD
     expect_stat "can't use modules" 1
 
-    CCACHE_SLOPPINESS="$DEFAULT_SLOPPINESS modules" $CCACHE_COMPILE -fmodules -fcxx-modules -c test1.cpp -MD
+    CCACHE_SLOPPINESS="$DEFAULT_SLOPPINESS modules" $CCACHE_COMPILE -x c++ -fmodules -fcxx-modules -c test1.cpp -MD
     expect_stat "can't use modules" 2
 
     # -------------------------------------------------------------------------
     TEST "cache hit"
 
-    CCACHE_SLOPPINESS="$DEFAULT_SLOPPINESS modules" $CCACHE_COMPILE -fmodules -fcxx-modules -c test1.cpp -MD
+    CCACHE_SLOPPINESS="$DEFAULT_SLOPPINESS modules" $CCACHE_COMPILE -x c++ -fmodules -fcxx-modules -c test1.cpp -MD
     expect_stat 'cache hit (direct)' 0
     expect_stat 'cache miss' 1
 
-    CCACHE_SLOPPINESS="$DEFAULT_SLOPPINESS modules" $CCACHE_COMPILE -fmodules -fcxx-modules -c test1.cpp -MD
+    CCACHE_SLOPPINESS="$DEFAULT_SLOPPINESS modules" $CCACHE_COMPILE -x c++ -fmodules -fcxx-modules -c test1.cpp -MD
     expect_stat 'cache hit (direct)' 1
     expect_stat 'cache miss' 1
 
     # -------------------------------------------------------------------------
     TEST "cache miss"
 
-    CCACHE_SLOPPINESS="$DEFAULT_SLOPPINESS modules" $CCACHE_COMPILE -MD -fmodules -fcxx-modules -c test1.cpp -MD
+    CCACHE_SLOPPINESS="$DEFAULT_SLOPPINESS modules" $CCACHE_COMPILE -MD -x c++ -fmodules -fcxx-modules -c test1.cpp -MD
     expect_stat 'cache miss' 1
 
     cat <<EOF >test1.h
@@ -74,12 +74,12 @@ void f();
 EOF
     backdate test1.h
 
-    CCACHE_SLOPPINESS="$DEFAULT_SLOPPINESS modules" $CCACHE_COMPILE -MD -fmodules -fcxx-modules -c test1.cpp -MD
+    CCACHE_SLOPPINESS="$DEFAULT_SLOPPINESS modules" $CCACHE_COMPILE -MD -x c++ -fmodules -fcxx-modules -c test1.cpp -MD
     expect_stat 'cache miss' 2
 
     echo >>module.modulemap
     backdate test1.h
 
-    CCACHE_SLOPPINESS="$DEFAULT_SLOPPINESS modules" $CCACHE_COMPILE -MD -fmodules -fcxx-modules -c test1.cpp -MD
+    CCACHE_SLOPPINESS="$DEFAULT_SLOPPINESS modules" $CCACHE_COMPILE -MD -x c++ -fmodules -fcxx-modules -c test1.cpp -MD
     expect_stat 'cache miss' 3
 }