================
@@ -0,0 +1,261 @@
+// RUN: %clang_analyze_cc1 -triple hexagon-unknown-linux -verify %s \
+// RUN:   -analyzer-checker=core,optin.core.UnconditionalVAArg \
+// RUN:   -analyzer-disable-checker=core.CallAndMessage \
+// RUN:   -analyzer-output=text
+//
+// RUN: %clang_analyze_cc1 -triple x86_64-pc-linux-gnu -verify %s \
+// RUN:   -analyzer-checker=core,optin.core.UnconditionalVAArg \
+// RUN:   -analyzer-disable-checker=core.CallAndMessage \
+// RUN:   -analyzer-output=text
+
+#include "Inputs/system-header-simulator-for-valist.h"
+int printf(const char *format, ...);
+void abort(void);
+
+void log_message(const char *msg, ...) {
+  // This artifical but plausible example function expects that the list of
+  // variadic arguments is terminated by a NULL pointer. Although careful use
+  // of this function is well-defined, passing no variadic arguments would
+  // trigger undefined behavior, so it may be better to choose a different way
+  // to mark the count of variadic arguments.
+  va_list va;
+  const char *arg;
+  printf("%s\n", msg);
+  va_start(va, msg);
+  while ((arg = va_arg(va, const char *))) {
+    // expected-warning@-1 {{Unconditional use of va_arg()}}
+    // expected-note@-2 {{Calls to 'log_message' always reach this va_arg() 
expression, so calling 'log_message' with no variadic arguments would be 
undefined behavior}}
+    printf(" * %s\n", arg);
+  }
+  va_end(va);
+}
+
+
+void never_called(int fst, ...) {
+  // This simple test function is not called in this test file.
+  va_list va;
+  va_start(va, fst);
+  (void)va_arg(va, int); // expected-warning{{Unconditional use of va_arg()}}
+  // expected-note@-1 {{Calls to 'never_called' always reach this va_arg() 
expression, so calling 'never_called' with no variadic arguments would be 
undefined behavior}}
+  va_end(va);
+}
----------------
NagyDonat wrote:

Done in 
https://github.com/llvm/llvm-project/pull/175602/commits/efdc24c27e382de782a2cb4aea355c2103a7b140

https://github.com/llvm/llvm-project/pull/175602
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to