diagnostic.c (diagnostic_classify_diagnostic): Accept zero index and document its...
authorEric Botcazou <ebotcazou@adacore.com>
Wed, 7 Aug 2013 17:15:25 +0000 (17:15 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Wed, 7 Aug 2013 17:15:25 +0000 (17:15 +0000)
* diagnostic.c (diagnostic_classify_diagnostic): Accept zero index and
document its semantics.
(diagnostic_report_diagnostic): Adjust accordingly.

From-SVN: r201574

gcc/ChangeLog
gcc/diagnostic.c
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/warn9.adb [new file with mode: 0644]

index 1dd783d..d55f0f4 100644 (file)
@@ -1,3 +1,9 @@
+2013-08-07  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * diagnostic.c (diagnostic_classify_diagnostic): Accept zero index and
+       document its semantics.
+       (diagnostic_report_diagnostic): Adjust accordingly.
+
 2013-08-07  David Malcolm  <dmalcolm@redhat.com>
 
        * config/sparc/sparc.c (insert_pass_work_around_errata): Move
index 3612ca0..dfc11f2 100644 (file)
@@ -554,7 +554,8 @@ default_diagnostic_finalizer (diagnostic_context *context ATTRIBUTE_UNUSED,
 
 /* Interface to specify diagnostic kind overrides.  Returns the
    previous setting, or DK_UNSPECIFIED if the parameters are out of
-   range.  */
+   range.  If OPTION_INDEX is zero, the new setting is for all the
+   diagnostics.  */
 diagnostic_t
 diagnostic_classify_diagnostic (diagnostic_context *context,
                                int option_index,
@@ -563,7 +564,7 @@ diagnostic_classify_diagnostic (diagnostic_context *context,
 {
   diagnostic_t old_kind;
 
-  if (option_index <= 0
+  if (option_index < 0
       || option_index >= context->n_opts
       || new_kind >= DK_LAST_DIAGNOSTIC_KIND)
     return DK_UNSPECIFIED;
@@ -695,9 +696,8 @@ diagnostic_report_diagnostic (diagnostic_context *context,
       /* This tests for #pragma diagnostic changes.  */
       if (context->n_classification_history > 0)
        {
-         int i;
          /* FIXME: Stupid search.  Optimize later. */
-         for (i = context->n_classification_history - 1; i >= 0; i --)
+         for (int i = context->n_classification_history - 1; i >= 0; i --)
            {
              if (linemap_location_before_p
                  (line_table,
@@ -709,7 +709,9 @@ diagnostic_report_diagnostic (diagnostic_context *context,
                      i = context->classification_history[i].option;
                      continue;
                    }
-                 if (context->classification_history[i].option == diagnostic->option_index)
+                 int option = context->classification_history[i].option;
+                 /* The option 0 is for all the diagnostics.  */
+                 if (option == 0 || option == diagnostic->option_index)
                    {
                      diag_class = context->classification_history[i].kind;
                      if (diag_class != DK_UNSPECIFIED)
index ef030b0..ffa5fca 100644 (file)
@@ -1,3 +1,7 @@
+2013-08-07  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gnat.dg/warn9.adb: New test.
+
 2013-08-07  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/46206
diff --git a/gcc/testsuite/gnat.dg/warn9.adb b/gcc/testsuite/gnat.dg/warn9.adb
new file mode 100644 (file)
index 0000000..38f9d71
--- /dev/null
@@ -0,0 +1,10 @@
+-- { dg-do compile }
+-- { dg-options "-Wuninitialized" }
+
+pragma Warnings (Off);
+
+function Warn9 return Integer is
+  I : Integer;
+begin
+  return I;
+end;