Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu.
Pushed to trunk as r13-1145-gf0da5f0a316131.

gcc/analyzer/ChangeLog:
        * varargs.cc (va_arg_type_mismatch::emit): Associate the warning
        with CWE-686 ("Function Call With Incorrect Argument Type").

gcc/testsuite/ChangeLog:
        * gcc.dg/analyzer/stdarg-1.c
        (__analyzer_called_by_test_type_mismatch_1): Verify that
        -Wanalyzer-va-arg-type-mismatch is associated with CWE-686.

Signed-off-by: David Malcolm <dmalc...@redhat.com>
---
 gcc/analyzer/varargs.cc                  | 13 ++++++++-----
 gcc/testsuite/gcc.dg/analyzer/stdarg-1.c |  2 +-
 2 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/gcc/analyzer/varargs.cc b/gcc/analyzer/varargs.cc
index 3baba7988c1..c92a56dd2f9 100644
--- a/gcc/analyzer/varargs.cc
+++ b/gcc/analyzer/varargs.cc
@@ -857,12 +857,15 @@ public:
   bool emit (rich_location *rich_loc) final override
   {
     auto_diagnostic_group d;
+    diagnostic_metadata m;
+    /* "CWE-686: Function Call With Incorrect Argument Type".  */
+    m.add_cwe (686);
     bool warned
-      = warning_at (rich_loc, get_controlling_option (),
-                   "%<va_arg%> expected %qT but received %qT"
-                   " for variadic argument %i of %qE",
-                   m_expected_type, m_actual_type,
-                   get_variadic_index_for_diagnostic (), m_va_list_tree);
+      = warning_meta (rich_loc, m, get_controlling_option (),
+                     "%<va_arg%> expected %qT but received %qT"
+                     " for variadic argument %i of %qE",
+                     m_expected_type, m_actual_type,
+                     get_variadic_index_for_diagnostic (), m_va_list_tree);
     return warned;
   }
 
diff --git a/gcc/testsuite/gcc.dg/analyzer/stdarg-1.c 
b/gcc/testsuite/gcc.dg/analyzer/stdarg-1.c
index 41935f74cc3..f23d28c5b89 100644
--- a/gcc/testsuite/gcc.dg/analyzer/stdarg-1.c
+++ b/gcc/testsuite/gcc.dg/analyzer/stdarg-1.c
@@ -195,7 +195,7 @@ __analyzer_called_by_test_type_mismatch_1 (int placeholder, 
...)
   __builtin_va_list ap;
   __builtin_va_start (ap, placeholder);
 
-  i = __builtin_va_arg (ap, int); /* { dg-warning "'va_arg' expected 'int' but 
received '\[^\n\r\]*' for variadic argument 1 of 'ap'" } */
+  i = __builtin_va_arg (ap, int); /* { dg-warning "'va_arg' expected 'int' but 
received '\[^\n\r\]*' for variadic argument 1 of 'ap' \\\[CWE-686\\\]" } */
 
   __builtin_va_end (ap);
 }
-- 
2.26.3

Reply via email to