================ @@ -804,6 +807,52 @@ void Sema::DiagnoseUnknownTypeName(IdentifierInfo *&II, assert(SS && SS->isInvalid() && "Invalid scope specifier has already been diagnosed"); } + + // don't note standard include files for OpenCL and Objective C + if ((getLangOpts().CPlusPlus || getLangOpts().C99) && !getLangOpts().OpenCL && + !getLangOpts().ObjC) + NoteStandardIncludes(II->getName(), IILoc, SS); +} + +void Sema::NoteStandardIncludes(StringRef SymbolName, SourceLocation IILoc, + StringRef Namespace) { + using clang::tooling::stdlib::Lang; + + llvm::StringRef HeaderName = ""; + tooling::stdlib::Lang LangOption = tooling::stdlib::Lang::C; + if (getLangOpts().CPlusPlus) + LangOption = clang::tooling::stdlib::Lang::CXX; + + if (auto StdSym = + tooling::stdlib::Symbol::named(Namespace, SymbolName, LangOption)) { + if (auto Header = StdSym->header()) { + HeaderName = Header->name(); + Diag(IILoc, diag::note_standard_lib_include_suggestion) + << HeaderName << (Namespace + SymbolName).str(); + + // Noting the C/C++ version as well + if (StdSym->version() != tooling::stdlib::Unknown) { ---------------- erichkeane wrote:
Version stuff we should be handling via our diagnostic, not doing it this way. https://github.com/llvm/llvm-project/pull/146227 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits