[ccache] preprocessor mode

Yoav Alon yoava333 at gmail.com
Fri May 20 07:56:53 UTC 2016


I've come to the same conclusion as you have.
We encountered a corner case where gcc will not compile when working with
-P.
I'll open a PR for this on github.
Thanks!

On Tue, 17 May 2016 at 21:56 Joel Rosdahl <joel at rosdahl.net> wrote:

> Hi Yoav,
>
> > I've dug a bit deeper, and found that when doing a diff between the
> output
> > of the preprocessor the resolved include path is emitted as part of the
> > output as a comment, in our case it's
> >
> > # 1 "a/a.h" 1
> >
> > There's a flag -P to the preprocessor to remove these comments.
>
> It sounds good to not include names of included files in the hash, I think.
>
> > [...]
> > I think this should be default, do you think there's a safety issue with
> > adding -P?
>
> I see two problems:
>
> 1. -P is likely not supported by all compilers that can be used with
> ccache.
> 2. Using -P discards #line directives that may have been put there by code
> generator tools, for instance yacc/bison. This would lead to incorrect file
> name references when the compiler generates warnings when compiling the
> preprocessed output.
>
> However, it's possible to get more or less the same effect (not hashing
> filenames) like this:
>
> diff --git a/ccache.c b/ccache.c
> index 23103ee..dd11927 100644
> --- a/ccache.c
> +++ b/ccache.c
> @@ -863,7 +863,6 @@ process_preprocessed_file(struct mdfour *hash, const
> char *path)
>   has_absolute_include_headers = is_absolute_path(path);
>   }
>   path = make_relative_path(path);
> - hash_string(hash, path);
>   remember_include_file(path, hash, system);
>   p = r;
>   } else {
>
> What do you think?
>
> -- Joel
>
>


More information about the ccache mailing list