It turns out we need to handle LangOptions separately from the rest of the options. LangOptions used to be conditionally parsed only when !(DashX.getFormat() == InputKind::Precompiled || DashX.getLanguage() == Language::LLVM_IR) and we need to restore this order (for more info, see D94682).
D94682 moves the parsing of marshalled LangOpts from parseSimpleArgs back to ParseLangArgs.
We need to parse marshalled LangOpts after ParseLangArgs calls setLangDefaults. This will enable future patches, where values of some LangOpts depend on the defaults.
However, two language options (-finclude-default-header and -fdeclare-opencl-builtins) need to be parsed before ParseLangArgs calls setLangDefaults, because they are necessary for setting up OpenCL defaults correctly.
This patch implements this by removing their marshalling info and manually parsing (and generating) them exactly where necessary.
You should add a comment here explaining why these can't be marshaled.