Add tiny memory model GD test cases.
[deliverable/binutils-gdb.git] / gdb / complaints.c
index 739f5ec924ac07f6848cb38e5d9f09dc7ca4e489..dbacb2ad1e430b8242c58d893a22efb7035e90b5 100644 (file)
@@ -1,6 +1,6 @@
 /* Support for complaint handling during symbol reading in GDB.
 
-   Copyright (C) 1990-2013 Free Software Foundation, Inc.
+   Copyright (C) 1990-2015 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -19,7 +19,6 @@
 
 #include "defs.h"
 #include "complaints.h"
-#include "gdb_assert.h"
 #include "command.h"
 #include "gdbcmd.h"
 
@@ -112,7 +111,7 @@ get_complaints (struct complaints **c)
 {
   if ((*c) != NULL)
     return (*c);
-  (*c) = XMALLOC (struct complaints);
+  (*c) = XNEW (struct complaints);
   (*c)->root = &complaint_sentinel;
   (*c)->series = ISOLATED_MESSAGE;
   (*c)->explanation = NULL;
@@ -140,7 +139,7 @@ find_complaint (struct complaints *complaints, const char *file,
     }
 
   /* Oops not seen before, fill in a new complaint.  */
-  complaint = XMALLOC (struct complain);
+  complaint = XNEW (struct complain);
   complaint->fmt = fmt;
   complaint->file = file;
   complaint->line = line;
@@ -184,21 +183,27 @@ vcomplaint (struct complaints **c, const char *file,
   else
     series = complaints->series;
 
+  /* Pass 'fmt' instead of 'complaint->fmt' to printf-like callees
+     from here on, to avoid "format string is not a string literal"
+     warnings.  'fmt' is this function's printf-format parameter, so
+     the compiler can assume the passed in argument is a literal
+     string somewhere up the call chain.  */
+  gdb_assert (complaint->fmt == fmt);
+
   if (complaint->file != NULL)
-    internal_vwarning (complaint->file, complaint->line, 
-                      complaint->fmt, args);
+    internal_vwarning (complaint->file, complaint->line, fmt, args);
   else if (deprecated_warning_hook)
-    (*deprecated_warning_hook) (complaint->fmt, args);
+    (*deprecated_warning_hook) (fmt, args);
   else
     {
       if (complaints->explanation == NULL)
        /* A [v]warning() call always appends a newline.  */
-       vwarning (complaint->fmt, args);
+       vwarning (fmt, args);
       else
        {
          char *msg;
          struct cleanup *cleanups;
-         msg = xstrvprintf (complaint->fmt, args);
+         msg = xstrvprintf (fmt, args);
          cleanups = make_cleanup (xfree, msg);
          wrap_here ("");
          if (series != SUBSEQUENT_MESSAGE)
This page took 0.025359 seconds and 4 git commands to generate.