re PR c/59304 (#pragma diagnostic pop after warning fails for options unspecified in the command-line and disabled by default)

gcc/ChangeLog:

2014-08-20  Manuel López-Ibáñez  <manu@gcc.gnu.org>

	PR c/59304
	* opts-common.c (set_option): Call diagnostic_classify_diagnostic
	before setting the option.
	* diagnostic.c (diagnostic_classify_diagnostic): Record
	command-line status.

gcc/testsuite/ChangeLog:

2014-08-20  Manuel López-Ibáñez  <manu@gcc.gnu.org>

	PR c/59304
	* gcc.dg/pr59304.c: New test.

From-SVN: r214221
This commit is contained in:
Manuel López-Ibáñez 2014-08-20 12:48:16 +00:00
parent c84d88e45c
commit 3ba421e8be
5 changed files with 68 additions and 4 deletions

View File

@ -1,3 +1,11 @@
2014-08-20 Manuel López-Ibáñez <manu@gcc.gnu.org>
PR c/59304
* opts-common.c (set_option): Call diagnostic_classify_diagnostic
before setting the option.
* diagnostic.c (diagnostic_classify_diagnostic): Record
command-line status.
2014-08-20 Richard Biener <rguenther@suse.de>
PR lto/62190

View File

@ -584,6 +584,15 @@ diagnostic_classify_diagnostic (diagnostic_context *context,
{
int i;
/* Record the command-line status, so we can reset it back on DK_POP. */
if (old_kind == DK_UNSPECIFIED)
{
old_kind = context->option_enabled (option_index,
context->option_state)
? DK_WARNING : DK_IGNORED;
context->classify_diagnostic[option_index] = old_kind;
}
for (i = context->n_classification_history - 1; i >= 0; i --)
if (context->classification_history[i].option == option_index)
{

View File

@ -1119,6 +1119,9 @@ set_option (struct gcc_options *opts, struct gcc_options *opts_set,
if (!flag_var)
return;
if ((diagnostic_t) kind != DK_UNSPECIFIED && dc != NULL)
diagnostic_classify_diagnostic (dc, opt_index, (diagnostic_t) kind, loc);
if (opts_set != NULL)
set_flag_var = option_flag_var (opt_index, opts_set);
@ -1198,10 +1201,6 @@ set_option (struct gcc_options *opts, struct gcc_options *opts_set,
}
break;
}
if ((diagnostic_t) kind != DK_UNSPECIFIED
&& dc != NULL)
diagnostic_classify_diagnostic (dc, opt_index, (diagnostic_t) kind, loc);
}
/* Return the address of the flag variable for option OPT_INDEX in

View File

@ -1,3 +1,11 @@
2014-08-20 Manuel López-Ibáñez <manu@gcc.gnu.org>
PR c/59304
* opts-common.c (set_option): Call diagnostic_classify_diagnostic
before setting the option.
* diagnostic.c (diagnostic_classify_diagnostic): Record
command-line status.
2014-08-20 Mark Wielaard <mjw@redhat.com>
* gcc.dg/guality/restrict.c: Add `used' attribute to all variables.

View File

@ -0,0 +1,40 @@
/* { dg-do compile } */
enum EE
{
ONE, TWO, THREE
};
int f (enum EE e)
{
int r = 0;
#pragma GCC diagnostic push
#pragma GCC diagnostic error "-Wswitch-enum"
switch (e)
{
case ONE:
r = 1;
break;
case TWO:
r = 2;
break;
case THREE:
r = 3;
break;
}
#pragma GCC diagnostic pop
switch (e)
{
case ONE:
r = 1;
break;
case TWO:
r = 2;
break;
}
return r;
}