[clang] Improve clarity of the implicit declaration diagnostic (PR #149314)

Corentin Jabot via cfe-commits cfe-commits at lists.llvm.org
Thu Jul 17 07:47:04 PDT 2025


================
@@ -376,6 +376,33 @@ class Context {
     return getInfo(ID).Header.getName();
   }
 
+  /// Returns true if a library function is declared within a C or C++ standard
+  /// header (like stdio.h) or POSIX header (like malloc.h), false if the
+  /// function is not declared within a header or is declared in a non-standard
+  /// header (like Microsoft or Objective-C headers).
+  bool isDeclaredInStandardHeader(unsigned ID) const {
+    switch (getInfo(ID).Header.ID) {
+    default:
+      return false;
+    case HeaderDesc::COMPLEX_H: // C99
+    case HeaderDesc::CTYPE_H:   // C89
+    case HeaderDesc::MATH_H:    // C89
+    case HeaderDesc::MALLOC_H:  // POSIX
+    case HeaderDesc::MEMORY:    // C++98
+    case HeaderDesc::PTHREAD_H: // POSIX
+    case HeaderDesc::SETJMP_H:  // C89
+    case HeaderDesc::STDARG_H:  // C89
+    case HeaderDesc::STDIO_H:   // C89
+    case HeaderDesc::STDLIB_H:  // C89
+    case HeaderDesc::STRING_H:  // C89
+    case HeaderDesc::STRINGS_H: // POSIX
+    case HeaderDesc::UNISTD_H:  // POSIX
+    case HeaderDesc::UTILITY:   // C++98
+    case HeaderDesc::WCHAR_H:   // C99
+      return true;
+    }
+  }
----------------
cor3ntin wrote:

Can we modify the HEADER macro in BuiltinHeaders.def to generate that automatically?

https://github.com/llvm/llvm-project/pull/149314


More information about the cfe-commits mailing list