Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix cache collision between object file and precompiled headers
When compiling with PCH enabled, it happens that some times object files end up with PCH content, or that .gch files end up with object code. Simplest way to reproduce the problem: $ touch empty.c $ gcc -c -o out1 empty.c $ gcc -x c-header -c -o out2 empty.c $ file out1 out2 out1: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped out2: GCC precompiled header (version 014) for C The two files are different. But if we feed these compilations to sccache, they lead to the same result: $ sccache gcc -c -o out3 empty.c $ sccache gcc -x c-header -c -o out4 empty.c $ file out3 out4 out3: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped out4: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped Same thing is reproducible with c++ compiler and -x c++-header argument. The reason is that the hash string that identifies each command line is the same. With this patch, compilation of C files is always differentiated from compilations of same C-Header files. And compilation of C++ files is always differentiated from compilations of same C++-Header files. Fixes #1851.
- Loading branch information