Clang currently crashes on
class C { C() = default; C() = delete; };
My cunning plan for fixing this was to change the if (!FnD) in Parser::ParseCXXInlineMethodDef() to if (!FnD || FnD->isInvalidDecl) – but alas, the second constructor decl wasn't marked as invalid. This patch lets Sema::MergeFunctionDecl() return true on function redeclarations, which leads to them being marked invalid. (There are two more diag::err_s later in the same function that also don't return true. These look fishy to me too – let me know if you think those should be changed too. Probably in a separate patch, though.)
This reduces the number of duplicate error messages in tests, which is probably a good thing for this kind of error – if you have two definitions of a function, things likely are pretty dire already.