From 3c8ca1abdedb2c0663e24e9dc5942280a8c7820f Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Wed, 7 Aug 2013 17:15:25 +0000 Subject: [PATCH] diagnostic.c (diagnostic_classify_diagnostic): Accept zero index and document its semantics. * diagnostic.c (diagnostic_classify_diagnostic): Accept zero index and document its semantics. (diagnostic_report_diagnostic): Adjust accordingly. From-SVN: r201574 --- gcc/ChangeLog | 6 ++++++ gcc/diagnostic.c | 12 +++++++----- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gnat.dg/warn9.adb | 10 ++++++++++ 4 files changed, 27 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gnat.dg/warn9.adb diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1dd783d7672..d55f0f450fc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2013-08-07 Eric Botcazou + + * diagnostic.c (diagnostic_classify_diagnostic): Accept zero index and + document its semantics. + (diagnostic_report_diagnostic): Adjust accordingly. + 2013-08-07 David Malcolm * config/sparc/sparc.c (insert_pass_work_around_errata): Move diff --git a/gcc/diagnostic.c b/gcc/diagnostic.c index 3612ca09d77..dfc11f2647b 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 ef030b06625..ffa5fcac832 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2013-08-07 Eric Botcazou + + * gnat.dg/warn9.adb: New test. + 2013-08-07 Paolo Carlini PR c++/46206 diff --git a/gcc/testsuite/gnat.dg/warn9.adb b/gcc/testsuite/gnat.dg/warn9.adb new file mode 100644 index 00000000000..38f9d71e410 --- /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; -- 2.30.2