[clang] [clang][analyzer] Extend CallAndMessageChecker argument initializedness check (PR #173854)

Artem Dergachev via cfe-commits cfe-commits at lists.llvm.org
Mon Dec 29 03:17:27 PST 2025


================
@@ -0,0 +1,57 @@
+// RUN: %clang_analyze_cc1 -verify %s \
+// RUN:   -analyzer-checker=core \
+// RUN:   -analyzer-config core.CallAndMessage:ArgPointeeInitializedness=true \
+// RUN:   -analyzer-config core.CallAndMessage:ArgPointeeInitializednessComplete=true \
+// RUN:   -analyzer-config core.CallAndMessage:ArgInitializedness=false
+
+// RUN: %clang_analyze_cc1 -verify %s \
+// RUN:   -analyzer-checker=core \
+// RUN:   -analyzer-config core.CallAndMessage:ArgPointeeInitializedness=true \
+// RUN:   -analyzer-config core.CallAndMessage:ArgInitializedness=false
+
+typedef __typeof(sizeof(int)) size_t;
+typedef __WCHAR_TYPE__ wchar_t;
+typedef __CHAR16_TYPE__ char16_t;
+typedef long time_t;
+typedef struct {
+  int x;
+  int y;
+} mbstate_t;
+struct tm {
+  int x;
+  int y;
+};
+extern size_t mbrlen(const char *restrict, size_t, mbstate_t *restrict);
+extern size_t wcsnrtombs(char *restrict dst, const wchar_t **restrict src,
+       size_t nwc, size_t len, mbstate_t *restrict ps);
+extern size_t mbrtoc16(char16_t *restrict pc16, const char *restrict s,
+       size_t n, mbstate_t *restrict ps);
+extern time_t mktime(struct tm *timeptr);
+
+void uninit_mbrlen(const char *mbs) {
+  mbstate_t state;
+  mbrlen(mbs, 1, &state); // expected-warning{{3rd function call argument points to an uninitialized value}}
----------------
haoNoQ wrote:

(The checker is overdue for wordsmithing anyway. It probably makes sense to call out the function by name too. Also, linguistically speaking, pointers don't point to values, they point to memory that contains values. So don't worry about it^^)

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


More information about the cfe-commits mailing list