diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1dd783d7672a5e1926e921fc12cf6acd74b0e3af..d55f0f450fc739eedb2753e380b4ed39c2650066 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c index 3612ca09d7717f09e0d9af0ff006d7b7430fd9a7..dfc11f2647b10ed0270e2f42c037e1de2aecd61a 100644 --- a/gcc/diagnostic.c +++ b/gcc/diagnostic.c @@ -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) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ef030b0662585276e17cb130888bb641f74ed8d0..ffa5fcac832bd681d4c4f20605aa1baaf6e0363f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 index 0000000000000000000000000000000000000000..38f9d71e4101e3967830f449f8859892513e74a9 --- /dev/null +++ b/gcc/testsuite/gnat.dg/warn9.adb @@ -0,0 +1,10 @@ +-- { dg-do compile } +-- { dg-options "-Wuninitialized" } + +pragma Warnings (Off); + +function Warn9 return Integer is + I : Integer; +begin + return I; +end;