3C.cpp currently has several ArgumentsAdjusters that may modify the compiler command line of a translation unit before the translation unit is loaded. These can be a bit fragile because they just see the command line as a list of strings, so in order to make the correct modifications, they have to either make assumptions or reimplement parts of compiler command line parsing.
Instead, we should try to modify the parsed option data structures, similar to the way we set the diagnostic verifier options before #488. (In that case, it would have been harder to use an ArgumentsAdjuster anyway because we needed to target only one of several passes of the same ClangTool.) Kyle has some information about how that would work in combination with #488.