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:
parent
c84d88e45c
commit
3ba421e8be
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
}
|
Loading…
Reference in New Issue