This patch reapplies D61027. When D61027 was previously committed (76945821b9cad3), buildbots failed due to clang-tidy test fails. The test fails are because some errors in templates are now diagnosed earlier (does not wait till instantiation). I have modified the tests to add checks for these diagnostics/prevent these diagnostics.
Since I have not worked on clang-tidy in the past, I am hoping someone with more familiarity in this area can take a look and review my changes. There are no code changes in this second attempt (compared to D61027). I have only modified failing tests.
Summary of code changes (pasted from D61027) is below -
Clang currently crashes for switch statements inside a template when the condition is a non-integer field member because contextual implicit conversion is skipped when parsing the condition. This conversion is however later checked in an assert when the case statement is handled. The conversion is skipped when parsing the condition because the field member is set as type-dependent based on its containing class. This patch sets the type dependency based on the field's type instead. This patch fixes Bug 40982.