STR:
touch foo.h
echo '#include "foo.h"' > foo.c
sccache gcc -o foo.o -c foo.c -MD -MF foo.pp
On the first run, sccache calls the preprocessor, which produces the foo.pp file, with contents:
foo.o: foo.c /usr/include/stdc-predef.h foo.h
Typically, this would be used by a build system to know when to rebuild foo.o. Without this file, the build system wouldn't know to rebuild foo.o when e.g. foo.h changes.
Now, clean your build directory and try again:
rm foo.o foo.pp
sccache gcc -o foo.o -c foo.c -MD -MF foo.pp
Now here's the problem: since the preprocessor wasn't called, and since the preprocessor cache doesn't store what would normally be in foo.pp, foo.pp is not created.