From: Joel Rosdahl Date: Sat, 16 Aug 2014 12:31:51 +0000 (+0200) Subject: Merge branch 'maint' X-Git-Tag: v3.2~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=969726d109c7e070218d7130869ddbc5ecbc49ce;p=thirdparty%2Fccache.git Merge branch 'maint' * maint: Require CCACHE_SLOPPINESS=pch_defines when creating precompiled header Conflicts: ccache.c test.sh --- 969726d109c7e070218d7130869ddbc5ecbc49ce diff --cc ccache.c index 2bd7f55cb,f0dca22c7..e23af937a --- a/ccache.c +++ b/ccache.c @@@ -2169,10 -1758,9 +2169,9 @@@ cc_process_args(struct args *args, stru if (found_pch || found_fpch_preprocess) { using_precompiled_header = true; - if (!(conf->sloppiness & SLOPPY_PCH_DEFINES) - || !(conf->sloppiness & SLOPPY_TIME_MACROS)) { - if (!(sloppiness & SLOPPY_TIME_MACROS)) { - cc_log("You have to specify \"pch_defines,time_macros\" sloppiness when" - " using precompiled headers to get direct hits"); ++ if (!(conf->sloppiness & SLOPPY_TIME_MACROS)) { + cc_log("You have to specify \"time_macros\" sloppiness when using" + " precompiled headers to get direct hits"); cc_log("Disabling direct mode"); stats_update(STATS_CANTUSEPCH); result = false; @@@ -2197,8 -1785,16 +2196,16 @@@ } output_is_precompiled_header = - actual_language && strstr(actual_language, "-header") != NULL; + actual_language && strstr(actual_language, "-header"); - if (output_is_precompiled_header && !(sloppiness & SLOPPY_PCH_DEFINES)) { ++ if (output_is_precompiled_header && !(conf->sloppiness & SLOPPY_PCH_DEFINES)) { + cc_log("You have to specify \"pch_defines,time_macros\" sloppiness when" + " creating precompiled headers"); + stats_update(STATS_CANTUSEPCH); + result = false; + goto out; + } + if (!found_c_opt) { if (output_is_precompiled_header) { args_add(stripped_args, "-c"); diff --cc test.sh index 51b9c8822,4cad450d2..da0b2f108 --- a/test.sh +++ b/test.sh @@@ -1908,35 -1711,40 +1908,56 @@@ EO return fi + # clang and gcc handle precompiled headers similarly, but gcc is much more + # forgiving with precompiled headers. Both gcc and clang keep an absolute + # path reference to the original file except that clang uses that reference + # to validate the pch and gcc ignores the reference. Also, clang has an + # additional feature: pre-tokenized headers. For these reasons clang should + # be tested separately than gcc. clang can only use pch or pth headers on + # the command line and not as an #include statement inside a source file. + + if [ $COMPILER_TYPE_CLANG -eq 1 ]; then + clang_pch_suite + else + gcc_pch_suite + fi +} + +gcc_pch_suite() { ################################################################## - # Tests for creating a .gch. + # Tests for creating a .gch without opt-in. backdate pch.h - testname="create .gch, -c, no -o" + testname="create .gch, -c, no -o, without opt-in" $CCACHE -zC >/dev/null - $CCACHE $COMPILER -c pch.h + $CCACHE $COMPILER $SYSROOT -c pch.h checkstat 'cache hit (direct)' 0 checkstat 'cache hit (preprocessed)' 0 + checkstat 'cache miss' 0 + checkstat "can't use precompiled header" 1 + + testname="create .gch, no -c, -o, without opt-in" + $CCACHE -Cz >/dev/null + $CCACHE $COMPILER pch.h -o pch.gch + checkstat 'cache hit (direct)' 0 + checkstat 'cache hit (preprocessed)' 0 + checkstat 'cache miss' 0 + checkstat "can't use precompiled header" 1 + + ################################################################## + # Tests for creating a .gch with opt-in. + + backdate pch.h + + testname="create .gch, -c, no -o, with opt-in" + $CCACHE -zC >/dev/null - CCACHE_SLOPPINESS=pch_defines,time_macros $CCACHE $COMPILER -c pch.h ++ CCACHE_SLOPPINESS=pch_defines,time_macros $CCACHE $COMPILER $SYSROOT -c pch.h + checkstat 'cache hit (direct)' 0 + checkstat 'cache hit (preprocessed)' 0 checkstat 'cache miss' 1 rm -f pch.h.gch - $CCACHE $COMPILER $SYSROOT -c pch.h - CCACHE_SLOPPINESS=pch_defines,time_macros $CCACHE $COMPILER -c pch.h ++ CCACHE_SLOPPINESS=pch_defines,time_macros $CCACHE $COMPILER $SYSROOT -c pch.h checkstat 'cache hit (direct)' 1 checkstat 'cache hit (preprocessed)' 0 checkstat 'cache miss' 1 @@@ -1944,13 -1752,13 +1965,13 @@@ test_failed "pch.h.gch missing" fi - testname="create .gch, no -c, -o" + testname="create .gch, no -c, -o, with opt-in" $CCACHE -Cz >/dev/null - $CCACHE $COMPILER $SYSROOT pch.h -o pch.gch - CCACHE_SLOPPINESS=pch_defines,time_macros $CCACHE $COMPILER pch.h -o pch.gch ++ CCACHE_SLOPPINESS=pch_defines,time_macros $CCACHE $COMPILER $SYSROOT pch.h -o pch.gch checkstat 'cache hit (direct)' 0 checkstat 'cache hit (preprocessed)' 0 checkstat 'cache miss' 1 - $CCACHE $COMPILER $SYSROOT pch.h -o pch.gch - CCACHE_SLOPPINESS=pch_defines,time_macros $CCACHE $COMPILER pch.h -o pch.gch ++ CCACHE_SLOPPINESS=pch_defines,time_macros $CCACHE $COMPILER $SYSROOT pch.h -o pch.gch checkstat 'cache hit (direct)' 1 checkstat 'cache hit (preprocessed)' 0 checkstat 'cache miss' 1