re PR other/28322 (GCC new warnings and compatibility)
2008-02-26 Manuel Lopez-Ibanez <manu@gcc.gnu.org> PR 28322 * toplev.c (toplev_main): If there are warnings or error, print errors for ignored options. * opts.c (ignored_options): New static variable. (postpone_unknown_option_error): New. (print_ignored_options): New. (handle_option): Postpone errors for unknown -Wno-* options. * opts.h (print_ignored_options): Declare. testsuite/ * gcc.dg/pr28322.c: New. * gcc.dg/pr28322-2.c: New. * lib/prune.exp: Ignore "At top level" even if there is no ':' preceding it. From-SVN: r132648
This commit is contained in:
parent
23dc794c0e
commit
369dcbd9d2
|
@ -1,3 +1,14 @@
|
|||
2008-02-26 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
|
||||
|
||||
PR 28322
|
||||
* toplev.c (toplev_main): If there are warnings or error, print
|
||||
errors for ignored options.
|
||||
* opts.c (ignored_options): New static variable.
|
||||
(postpone_unknown_option_error): New.
|
||||
(print_ignored_options): New.
|
||||
(handle_option): Postpone errors for unknown -Wno-* options.
|
||||
* opts.h (print_ignored_options): Declare.
|
||||
|
||||
2008-02-25 Richard Sandiford <rsandifo@nildram.co.uk>
|
||||
|
||||
* config/mips/mips.md (loadgp_blockage, blockage): Change type
|
||||
|
|
41
gcc/opts.c
41
gcc/opts.c
|
@ -365,6 +365,12 @@ DEF_VEC_ALLOC_P(char_p,heap);
|
|||
static VEC(char_p,heap) *flag_instrument_functions_exclude_functions;
|
||||
static VEC(char_p,heap) *flag_instrument_functions_exclude_files;
|
||||
|
||||
typedef const char *const_char_p; /* For DEF_VEC_P. */
|
||||
DEF_VEC_P(const_char_p);
|
||||
DEF_VEC_ALLOC_P(const_char_p,heap);
|
||||
|
||||
static VEC(const_char_p,heap) *ignored_options;
|
||||
|
||||
/* Input file names. */
|
||||
const char **in_fnames;
|
||||
unsigned num_in_fnames;
|
||||
|
@ -443,6 +449,33 @@ complain_wrong_lang (const char *text, const struct cl_option *option,
|
|||
free (bad_lang);
|
||||
}
|
||||
|
||||
/* Buffer the unknown option described by the string OPT. Currently,
|
||||
we only complain about unknown -Wno-* options if they may have
|
||||
prevented a diagnostic. Otherwise, we just ignore them. */
|
||||
|
||||
static void postpone_unknown_option_error(const char *opt)
|
||||
{
|
||||
VEC_safe_push (const_char_p, heap, ignored_options, opt);
|
||||
}
|
||||
|
||||
/* Produce an error for each option previously buffered. */
|
||||
|
||||
void print_ignored_options (void)
|
||||
{
|
||||
location_t saved_loc = input_location;
|
||||
|
||||
input_location = 0;
|
||||
|
||||
while (!VEC_empty (const_char_p, ignored_options))
|
||||
{
|
||||
const char *opt;
|
||||
opt = VEC_pop (const_char_p, ignored_options);
|
||||
error ("unrecognized command line option \"%s\"", opt);
|
||||
}
|
||||
|
||||
input_location = saved_loc;
|
||||
}
|
||||
|
||||
/* Handle the switch beginning at ARGV for the language indicated by
|
||||
LANG_MASK. Returns the number of switches consumed. */
|
||||
static unsigned int
|
||||
|
@ -472,6 +505,14 @@ handle_option (const char **argv, unsigned int lang_mask)
|
|||
opt = dup;
|
||||
value = 0;
|
||||
opt_index = find_opt (opt + 1, lang_mask | CL_COMMON | CL_TARGET);
|
||||
if (opt_index == cl_options_count)
|
||||
{
|
||||
/* We don't generate errors for unknown -Wno-* options
|
||||
unless we issue diagnostics. */
|
||||
postpone_unknown_option_error (argv[0]);
|
||||
result = 1;
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
||||
if (opt_index == cl_options_count)
|
||||
|
|
|
@ -105,4 +105,5 @@ extern bool get_option_state (int, struct cl_option_state *);
|
|||
|
||||
extern void enable_warning_as_error (const char *arg, int value,
|
||||
unsigned int lang_mask);
|
||||
extern void print_ignored_options (void);
|
||||
#endif
|
||||
|
|
|
@ -1,3 +1,11 @@
|
|||
2008-02-26 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
|
||||
|
||||
PR 28322
|
||||
* gcc.dg/pr28322.c: New.
|
||||
* gcc.dg/pr28322-2.c: New.
|
||||
* lib/prune.exp: Ignore "At top level" even if there is no ':'
|
||||
preceding it.
|
||||
|
||||
2008-02-25 Paolo Carlini <pcarlini@suse.de>
|
||||
|
||||
PR c++/35333
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
/* PR28322: ignore unknown -Wno-* if no warning is emitted. */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Wall -Wextra -Wno-foobar" } */
|
||||
|
||||
int foo (void)
|
||||
{
|
||||
int i = 1/0; /* { dg-warning "division by zero" } */
|
||||
return i;
|
||||
}
|
||||
|
||||
/* { dg-message "unrecognized command line option .-Wno-foobar." "" { target *-*-* } 0 } */
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
/* PR28322: ignore unknown -Wno-* if no warning is emitted. */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options " -Wno-foobar -Wno-div-by-zero" } */
|
||||
|
||||
void foo(void)
|
||||
{
|
||||
int i = 1/0;
|
||||
}
|
|
@ -21,7 +21,7 @@ proc prune_gcc_output { text } {
|
|||
#send_user "Before:$text\n"
|
||||
|
||||
regsub -all "(^|\n)(\[^\n\]*: )?In ((static member )?function|member|method|(copy )?constructor|destructor|instantiation|program|subroutine|block-data) \[^\n\]*" $text "" text
|
||||
regsub -all "(^|\n)\[^\n\]*: At (top level|global scope):\[^\n\]*" $text "" text
|
||||
regsub -all "(^|\n)\[^\n\]*(: )?At (top level|global scope):\[^\n\]*" $text "" text
|
||||
regsub -all "(^|\n)\[^\n\]*: instantiated from \[^\n\]*" $text "" text
|
||||
regsub -all "(^|\n) inlined from \[^\n\]*" $text "" text
|
||||
regsub -all "(^|\n)collect2: ld returned \[^\n\]*" $text "" text
|
||||
|
|
|
@ -2282,6 +2282,9 @@ toplev_main (unsigned int argc, const char **argv)
|
|||
if (!exit_after_options)
|
||||
do_compile ();
|
||||
|
||||
if (warningcount || errorcount)
|
||||
print_ignored_options ();
|
||||
|
||||
if (errorcount || sorrycount)
|
||||
return (FATAL_EXIT_CODE);
|
||||
|
||||
|
|
Loading…
Reference in New Issue