[clang] [clang][Sema] Suggest/Hint Standard Library Include File (PR #146227)
Erich Keane via cfe-commits
cfe-commits at lists.llvm.org
Tue Jul 1 06:22:00 PDT 2025
================
@@ -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
More information about the cfe-commits
mailing list