Index: lib/Sema/AnalysisBasedWarnings.cpp =================================================================== --- lib/Sema/AnalysisBasedWarnings.cpp +++ lib/Sema/AnalysisBasedWarnings.cpp @@ -1914,7 +1914,7 @@ if (cast(D)->isDependentContext()) return; - if (Diags.hasUncompilableErrorOccurred()) { + if (Diags.hasUncompilableErrorOccurred() || Diags.hasFatalErrorOccurred()) { // Flush out any possibly unreachable diagnostics. flushDiagnostics(S, fscope); return; Index: test/SemaCXX/instantiate-template-fatal-error.cpp =================================================================== --- /dev/null +++ test/SemaCXX/instantiate-template-fatal-error.cpp @@ -0,0 +1,22 @@ +// RUN: %clang_cc1 -fsyntax-only -verify -std=c++14 %s + +#pragma clang diagnostic fatal "-Wall" +#pragma clang diagnostic fatal "-Wold-style-cast" + +template bool operator==(const long long *a, T* b) { + return a == (const long long*)b; // expected-error {{use of old-style cast}} +} + +template +struct S1 { +}; + +template +struct S2 : S1 { + bool m1(const long long *a, T *b) const { return a == b; } +}; + +bool foo1(const long long *a, int *b) { + S2 s2; + return s2.m1(a, b); +}