`clang -serialize` does crash for all input files. This is because of the following commit:
ParseAST now never releases the passed ASTConsumer. This is the responsibility of the client.
While I understand why not deleting the Consumer is nice, it's not as simple as this patch pretends: The TranslationUnit is a local variable of ParseAST() and is destroyed as soon as the function exits. Most Consumers keep a reference to the TU and do work in their destructor, which will now be always run when the TU is already dead (e.g. the ASTSerializers).
So, either that commit is undone, or the TranslationUnit has to be allocated on the stack somehow.