diff options
author | Joseph Myers <joseph@codesourcery.com> | 2005-07-03 01:38:49 +0100 |
---|---|---|
committer | Joseph Myers <jsm28@gcc.gnu.org> | 2005-07-03 01:38:49 +0100 |
commit | ea40ba9c04882ea2ddf987e2783f98cc38bac081 (patch) | |
tree | 8a19c399c9e578fcd71ada4df98540c8fc66eb48 /gcc | |
parent | 3be91f647000940ada4a7c512a2cf5d6e2971817 (diff) | |
download | gcc-ea40ba9c04882ea2ddf987e2783f98cc38bac081.tar.gz |
c-common.h (GCC_DIAG_STYLE): Define.
* c-common.h (GCC_DIAG_STYLE): Define.
* c-tree.h (GCC_DIAG_STYLE): Do not define. Change minimum GCC
version for format checking to 4.1.
* c-format.c: Include toplev.h after c-common.h.
(enum format_type): Add gcc_tdiag_format_type.
(gcc_tdiag_length_specs, gcc_tdiag_flag_pairs,
gcc_tdiag_flag_specs, gcc_tdiag_char_table): New.
(format_types_orig): Add gcc_tdiag.
(init_dynamic_diag_info): Support gcc_tdiag formats.
(handle_format_attribute): Likewise.
* toplev.h (NO_FRONT_END_DIAG, ATTRIBUTE_GCC_FE_DIAG): Remove.
(GCC_DIAG_STYLE): Default to __gcc_tdiag__. Change minimum GCC
version for format checking to 4.1.
(warning0, warning, error, pedwarn, sorry): Use
ATTRIBUTE_GCC_DIAG.
* config/rs6000/rs6000.c (altivec_expand_builtin), varasm.c
(finish_aliases_1): Do not use %qE.
* config/arm/arm.c, config/i386/i386.c, config/mmix/mmix.c,
config/pdp11/pdp11.c, stor-layout.c, tree-eh.c, tree-ssa.c:
Correct format bugs.
* config/v850/v850-protos.h (v850_output_aligned_bss): Change size
parameter to unsigned HOST_WIDE_INT.
* config/v850/v850.c (v850_output_aligned_bss): Likewise.
cp:
* cp-tree.h (GCC_DIAG_STYLE): #undef before defining. Change
minimum GCC version for format checking to 4.1.
testsuite:
* gcc.dg/format/gcc_diag-1.c: Update.
From-SVN: r101543
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 26 | ||||
-rw-r--r-- | gcc/c-common.h | 9 | ||||
-rw-r--r-- | gcc/c-format.c | 66 | ||||
-rw-r--r-- | gcc/c-tree.h | 3 | ||||
-rw-r--r-- | gcc/config/arm/arm.c | 6 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 2 | ||||
-rw-r--r-- | gcc/config/mmix/mmix.c | 4 | ||||
-rw-r--r-- | gcc/config/pdp11/pdp11.c | 4 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 2 | ||||
-rw-r--r-- | gcc/config/v850/v850-protos.h | 2 | ||||
-rw-r--r-- | gcc/config/v850/v850.c | 2 | ||||
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/cp-tree.h | 6 | ||||
-rw-r--r-- | gcc/stor-layout.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/format/gcc_diag-1.c | 43 | ||||
-rw-r--r-- | gcc/toplev.h | 25 | ||||
-rw-r--r-- | gcc/tree-eh.c | 2 | ||||
-rw-r--r-- | gcc/tree-ssa.c | 2 | ||||
-rw-r--r-- | gcc/varasm.c | 8 |
20 files changed, 182 insertions, 42 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fc32d271f60..84e8a85ddc3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,29 @@ +2005-07-03 Joseph S. Myers <joseph@codesourcery.com> + + * c-common.h (GCC_DIAG_STYLE): Define. + * c-tree.h (GCC_DIAG_STYLE): Do not define. Change minimum GCC + version for format checking to 4.1. + * c-format.c: Include toplev.h after c-common.h. + (enum format_type): Add gcc_tdiag_format_type. + (gcc_tdiag_length_specs, gcc_tdiag_flag_pairs, + gcc_tdiag_flag_specs, gcc_tdiag_char_table): New. + (format_types_orig): Add gcc_tdiag. + (init_dynamic_diag_info): Support gcc_tdiag formats. + (handle_format_attribute): Likewise. + * toplev.h (NO_FRONT_END_DIAG, ATTRIBUTE_GCC_FE_DIAG): Remove. + (GCC_DIAG_STYLE): Default to __gcc_tdiag__. Change minimum GCC + version for format checking to 4.1. + (warning0, warning, error, pedwarn, sorry): Use + ATTRIBUTE_GCC_DIAG. + * config/rs6000/rs6000.c (altivec_expand_builtin), varasm.c + (finish_aliases_1): Do not use %qE. + * config/arm/arm.c, config/i386/i386.c, config/mmix/mmix.c, + config/pdp11/pdp11.c, stor-layout.c, tree-eh.c, tree-ssa.c: + Correct format bugs. + * config/v850/v850-protos.h (v850_output_aligned_bss): Change size + parameter to unsigned HOST_WIDE_INT. + * config/v850/v850.c (v850_output_aligned_bss): Likewise. + 2005-07-02 David Edelsohn <edelsohn@gnu.org> PR middle-end/21742 diff --git a/gcc/c-common.h b/gcc/c-common.h index fabb67e6b20..76a96500360 100644 --- a/gcc/c-common.h +++ b/gcc/c-common.h @@ -926,4 +926,13 @@ extern void preprocess_file (cpp_reader *); extern void pp_file_change (const struct line_map *); extern void pp_dir_change (cpp_reader *, const char *); +/* In order for the format checking to accept the C frontend + diagnostic framework extensions, you must include this file before + toplev.h, not after. The C front end formats are a subset of those + for C++, so they are the appropriate set to use in common code; + cp-tree.h overrides this for C++. */ +#ifndef GCC_DIAG_STYLE +#define GCC_DIAG_STYLE __gcc_cdiag__ +#endif + #endif /* ! GCC_C_COMMON_H */ diff --git a/gcc/c-format.c b/gcc/c-format.c index 5c4bb67dcde..49af5762298 100644 --- a/gcc/c-format.c +++ b/gcc/c-format.c @@ -25,8 +25,8 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA #include "tm.h" #include "tree.h" #include "flags.h" -#include "toplev.h" #include "c-common.h" +#include "toplev.h" #include "intl.h" #include "diagnostic.h" #include "langhooks.h" @@ -58,7 +58,8 @@ set_Wformat (int setting) format_type_error. Target-specific format types do not have matching enum values. */ enum format_type { printf_format_type, asm_fprintf_format_type, - gcc_diag_format_type, gcc_cdiag_format_type, + gcc_diag_format_type, gcc_tdiag_format_type, + gcc_cdiag_format_type, gcc_cxxdiag_format_type, scanf_format_type, strftime_format_type, strfmon_format_type, format_type_error = -1}; @@ -310,6 +311,7 @@ static const format_length_info gcc_diag_length_specs[] = }; /* The custom diagnostics all accept the same length specifiers. */ +#define gcc_tdiag_length_specs gcc_diag_length_specs #define gcc_cdiag_length_specs gcc_diag_length_specs #define gcc_cxxdiag_length_specs gcc_diag_length_specs @@ -386,6 +388,7 @@ static const format_flag_pair gcc_diag_flag_pairs[] = { 0, 0, 0, 0 } }; +#define gcc_tdiag_flag_pairs gcc_diag_flag_pairs #define gcc_cdiag_flag_pairs gcc_diag_flag_pairs #define gcc_cxxdiag_flag_pairs gcc_diag_flag_pairs @@ -398,6 +401,7 @@ static const format_flag_spec gcc_diag_flag_specs[] = { 0, 0, 0, NULL, NULL, 0 } }; +#define gcc_tdiag_flag_specs gcc_diag_flag_specs #define gcc_cdiag_flag_specs gcc_diag_flag_specs static const format_flag_spec gcc_cxxdiag_flag_specs[] = @@ -543,6 +547,29 @@ static const format_char_info gcc_diag_char_table[] = { NULL, 0, 0, NOLENGTHS, NULL, NULL, NULL } }; +static const format_char_info gcc_tdiag_char_table[] = +{ + /* C89 conversion specifiers. */ + { "di", 0, STD_C89, { T89_I, BADLEN, BADLEN, T89_L, T9L_LL, BADLEN, BADLEN, BADLEN, BADLEN }, "q", "", NULL }, + { "ox", 0, STD_C89, { T89_UI, BADLEN, BADLEN, T89_UL, T9L_ULL, BADLEN, BADLEN, BADLEN, BADLEN }, "q", "", NULL }, + { "u", 0, STD_C89, { T89_UI, BADLEN, BADLEN, T89_UL, T9L_ULL, BADLEN, BADLEN, BADLEN, BADLEN }, "q", "", NULL }, + { "c", 0, STD_C89, { T89_I, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q", "", NULL }, + { "s", 1, STD_C89, { T89_C, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "pq", "cR", NULL }, + { "p", 1, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q", "c", NULL }, + + /* Custom conversion specifiers. */ + + /* %H will require "location_t" at runtime. */ + { "H", 0, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q", "", NULL }, + + /* These will require a "tree" at runtime. */ + { "DFJT", 0, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q+", "", NULL }, + + { "<>'", 0, STD_C89, NOARGUMENTS, "", "", NULL }, + { "m", 0, STD_C89, NOARGUMENTS, "q", "", NULL }, + { NULL, 0, 0, NOLENGTHS, NULL, NULL, NULL } +}; + static const format_char_info gcc_cdiag_char_table[] = { /* C89 conversion specifiers. */ @@ -666,6 +693,12 @@ static const format_kind_info format_types_orig[] = 0, 0, 'p', 0, 'L', NULL, &integer_type_node }, + { "gcc_tdiag", gcc_tdiag_length_specs, gcc_tdiag_char_table, "q+", NULL, + gcc_tdiag_flag_specs, gcc_tdiag_flag_pairs, + FMT_FLAG_ARG_CONVERT, + 0, 0, 'p', 0, 'L', + NULL, &integer_type_node + }, { "gcc_cdiag", gcc_cdiag_length_specs, gcc_cdiag_char_table, "q+", NULL, gcc_cdiag_flag_specs, gcc_cdiag_flag_pairs, FMT_FLAG_ARG_CONVERT, @@ -2360,7 +2393,7 @@ init_dynamic_diag_info (void) if (!loc || !t || !hwi) { - static format_char_info *diag_fci, *cdiag_fci, *cxxdiag_fci; + static format_char_info *diag_fci, *tdiag_fci, *cdiag_fci, *cxxdiag_fci; static format_length_info *diag_ls; unsigned int i; @@ -2441,6 +2474,7 @@ init_dynamic_diag_info (void) /* All the GCC diag formats use the same length specs. */ if (!diag_ls) dynamic_format_types[gcc_diag_format_type].length_char_specs = + dynamic_format_types[gcc_tdiag_format_type].length_char_specs = dynamic_format_types[gcc_cdiag_format_type].length_char_specs = dynamic_format_types[gcc_cxxdiag_format_type].length_char_specs = diag_ls = (format_length_info *) @@ -2479,6 +2513,30 @@ init_dynamic_diag_info (void) diag_fci[i].pointer_count = 1; } + /* Handle the __gcc_tdiag__ format specifics. */ + if (!tdiag_fci) + dynamic_format_types[gcc_tdiag_format_type].conversion_specs = + tdiag_fci = (format_char_info *) + xmemdup (gcc_tdiag_char_table, + sizeof (gcc_tdiag_char_table), + sizeof (gcc_tdiag_char_table)); + if (loc) + { + i = find_char_info_specifier_index (tdiag_fci, 'H'); + tdiag_fci[i].types[0].type = &loc; + tdiag_fci[i].pointer_count = 1; + } + if (t) + { + /* All specifiers taking a tree share the same struct. */ + i = find_char_info_specifier_index (tdiag_fci, 'D'); + tdiag_fci[i].types[0].type = &t; + tdiag_fci[i].pointer_count = 1; + i = find_char_info_specifier_index (tdiag_fci, 'J'); + tdiag_fci[i].types[0].type = &t; + tdiag_fci[i].pointer_count = 1; + } + /* Handle the __gcc_cdiag__ format specifics. */ if (!cdiag_fci) dynamic_format_types[gcc_cdiag_format_type].conversion_specs = @@ -2603,6 +2661,7 @@ handle_format_attribute (tree *node, tree ARG_UNUSED (name), tree args, initialize certain bits a runtime. */ if (info.format_type == asm_fprintf_format_type || info.format_type == gcc_diag_format_type + || info.format_type == gcc_tdiag_format_type || info.format_type == gcc_cdiag_format_type || info.format_type == gcc_cxxdiag_format_type) { @@ -2620,6 +2679,7 @@ handle_format_attribute (tree *node, tree ARG_UNUSED (name), tree args, /* If this is one of the diagnostic attributes, then we have to initialize 'location_t' and 'tree' at runtime. */ else if (info.format_type == gcc_diag_format_type + || info.format_type == gcc_tdiag_format_type || info.format_type == gcc_cdiag_format_type || info.format_type == gcc_cxxdiag_format_type) init_dynamic_diag_info (); diff --git a/gcc/c-tree.h b/gcc/c-tree.h index e92006c6147..4cf6fa7c3ef 100644 --- a/gcc/c-tree.h +++ b/gcc/c-tree.h @@ -608,8 +608,7 @@ extern void c_write_global_declarations (void); /* In order for the format checking to accept the C frontend diagnostic framework extensions, you must include this file before toplev.h, not after. */ -#define GCC_DIAG_STYLE __gcc_cdiag__ -#if GCC_VERSION >= 3005 +#if GCC_VERSION >= 4001 #define ATTRIBUTE_GCC_CDIAG(m, n) __attribute__ ((__format__ (GCC_DIAG_STYLE, m ,n))) ATTRIBUTE_NONNULL(m) #else #define ATTRIBUTE_GCC_CDIAG(m, n) ATTRIBUTE_NONNULL(m) diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 4e17d3a7fe3..4a87848a35a 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -14750,7 +14750,7 @@ arm_unwind_emit_stm (FILE * asm_out_file, rtx p) else if (reg >= FIRST_FPA_REGNUM && reg <= LAST_FPA_REGNUM) { /* FPA registers are done differently. */ - asm_fprintf (asm_out_file, "\t.save %r, %d\n", reg, nregs); + asm_fprintf (asm_out_file, "\t.save %r, %wd\n", reg, nregs); return; } else @@ -14848,7 +14848,7 @@ arm_unwind_emit_set (FILE * asm_out_file, rtx p) || GET_CODE (XEXP (e1, 1)) != CONST_INT) abort (); - asm_fprintf (asm_out_file, "\t.pad #%d\n", + asm_fprintf (asm_out_file, "\t.pad #%wd\n", -INTVAL (XEXP (e1, 1))); } else if (REGNO (e0) == HARD_FRAME_POINTER_REGNUM) @@ -14863,7 +14863,7 @@ arm_unwind_emit_set (FILE * asm_out_file, rtx p) abort (); reg = REGNO (XEXP (e1, 0)); offset = INTVAL (XEXP (e1, 1)); - asm_fprintf (asm_out_file, "\t.setfp %r, %r, #%d\n", + asm_fprintf (asm_out_file, "\t.setfp %r, %r, #%wd\n", HARD_FRAME_POINTER_REGNUM, reg, INTVAL (XEXP (e1, 1))); } diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 77437046621..f3d4376459e 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -14659,7 +14659,7 @@ get_element_number (tree vec_type, tree arg) if (!host_integerp (arg, 1) || (elt = tree_low_cst (arg, 1), elt > max)) { - error ("selector must be an integer constant in the range 0..%i", max); + error ("selector must be an integer constant in the range 0..%wi", max); return 0; } diff --git a/gcc/config/mmix/mmix.c b/gcc/config/mmix/mmix.c index fd97268ea1b..1b5acc43306 100644 --- a/gcc/config/mmix/mmix.c +++ b/gcc/config/mmix/mmix.c @@ -1891,7 +1891,7 @@ mmix_expand_prologue (void) /* Make sure we don't get an unaligned stack. */ if ((stack_space_to_allocate % 8) != 0) - internal_error ("stack frame not a multiple of 8 bytes: %d", + internal_error ("stack frame not a multiple of 8 bytes: %wd", stack_space_to_allocate); if (current_function_pretend_args_size) @@ -2127,7 +2127,7 @@ mmix_expand_epilogue (void) /* Make sure we don't get an unaligned stack. */ if ((stack_space_to_deallocate % 8) != 0) - internal_error ("stack frame not a multiple of octabyte: %d", + internal_error ("stack frame not a multiple of octabyte: %wd", stack_space_to_deallocate); /* We will add back small offsets to the stack pointer as we go. diff --git a/gcc/config/pdp11/pdp11.c b/gcc/config/pdp11/pdp11.c index 3ba5bc94f8e..4036b12449a 100644 --- a/gcc/config/pdp11/pdp11.c +++ b/gcc/config/pdp11/pdp11.c @@ -245,7 +245,7 @@ pdp11_output_function_prologue (FILE *stream, HOST_WIDE_INT size) { fprintf (stream, "\t/*abuse empty parameter slot for locals!*/\n"); if (size > 2) - fprintf(stream, "\tsub $%#o, sp\n", size - 2); + asm_fprintf (stream, "\tsub $%#wo, sp\n", size - 2); } } @@ -285,7 +285,7 @@ pdp11_output_function_prologue (FILE *stream, HOST_WIDE_INT size) /* make frame */ if (fsize) - fprintf (stream, "\tsub $%#o, sp\n", fsize); + asm_fprintf (stream, "\tsub $%#wo, sp\n", fsize); /* save CPU registers */ for (regno = 0; regno < 8; regno++) diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index a1cf22bedcf..04721695b88 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -6826,7 +6826,7 @@ altivec_expand_builtin (tree exp, rtx target, bool *expandedp) && fcode <= ALTIVEC_BUILTIN_OVERLOADED_LAST) { *expandedp = true; - error ("unresolved overload for Altivec builtin %qE", fndecl); + error ("unresolved overload for Altivec builtin %qF", fndecl); return const0_rtx; } diff --git a/gcc/config/v850/v850-protos.h b/gcc/config/v850/v850-protos.h index 08e9f8b1eef..aff12412fed 100644 --- a/gcc/config/v850/v850-protos.h +++ b/gcc/config/v850/v850-protos.h @@ -61,7 +61,7 @@ extern rtx function_arg (CUMULATIVE_ARGS *, Mmode, tree, int #ifdef TREE_CODE extern int v850_interrupt_function_p (tree); -extern void v850_output_aligned_bss (FILE *, tree, const char *, int, int); +extern void v850_output_aligned_bss (FILE *, tree, const char *, unsigned HOST_WIDE_INT, int); extern void v850_output_common (FILE *, tree, const char *, int, int); extern void v850_output_local (FILE *, tree, const char *, int, int); extern v850_data_area v850_get_data_area (tree); diff --git a/gcc/config/v850/v850.c b/gcc/config/v850/v850.c index efc83203c3a..676c516ff2e 100644 --- a/gcc/config/v850/v850.c +++ b/gcc/config/v850/v850.c @@ -2485,7 +2485,7 @@ void v850_output_aligned_bss (FILE * file, tree decl, const char * name, - int size, + unsigned HOST_WIDE_INT size, int align) { switch (v850_get_data_area (decl)) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f72156df9af..2f0ecd2acae 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2005-07-03 Joseph S. Myers <joseph@codesourcery.com> + + * cp-tree.h (GCC_DIAG_STYLE): #undef before defining. Change + minimum GCC version for format checking to 4.1. + 2005-07-02 Kazu Hirata <kazu@codesourcery.com> * Make-lang.in (cc1plus-checksum.c): Use diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 2cef23460cf..7edb1e639e4 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -4367,9 +4367,11 @@ extern void cp_genericize (tree); /* In order for the format checking to accept the C++ frontend diagnostic framework extensions, you must include this file before - toplev.h, not after. */ + toplev.h, not after. We override the definition of GCC_DIAG_STYLE + in c-common.h. */ +#undef GCC_DIAG_STYLE #define GCC_DIAG_STYLE __gcc_cxxdiag__ -#if GCC_VERSION >= 3004 +#if GCC_VERSION >= 4001 #define ATTRIBUTE_GCC_CXXDIAG(m, n) __attribute__ ((__format__ (GCC_DIAG_STYLE, m, n))) ATTRIBUTE_NONNULL(m) #else #define ATTRIBUTE_GCC_CXXDIAG(m, n) ATTRIBUTE_NONNULL(m) diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c index a2d55a8a1eb..77dfc192775 100644 --- a/gcc/stor-layout.c +++ b/gcc/stor-layout.c @@ -30,6 +30,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA #include "flags.h" #include "function.h" #include "expr.h" +#include "output.h" #include "toplev.h" #include "ggc.h" #include "target.h" @@ -453,7 +454,7 @@ layout_decl (tree decl, unsigned int known_align) if (compare_tree_int (size, size_as_int) == 0) warning (0, "size of %q+D is %d bytes", decl, size_as_int); else - warning (0, "size of %q+D is larger than %d bytes", + warning (0, "size of %q+D is larger than %wd bytes", decl, larger_than_size); } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 320f6ecf10a..5d94b114862 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2005-07-03 Joseph S. Myers <joseph@codesourcery.com> + + * gcc.dg/format/gcc_diag-1.c: Update. + 2005-07-02 Jeff Law <law@redhat.com> * gcc.dg/tree-ssa/pr22051-1.c: New test. diff --git a/gcc/testsuite/gcc.dg/format/gcc_diag-1.c b/gcc/testsuite/gcc.dg/format/gcc_diag-1.c index e7340063df0..f8af0ea4d9e 100644 --- a/gcc/testsuite/gcc.dg/format/gcc_diag-1.c +++ b/gcc/testsuite/gcc.dg/format/gcc_diag-1.c @@ -21,6 +21,7 @@ union tree_node; typedef union tree_node *tree; extern int diag (const char *, ...) ATTRIBUTE_DIAG(__gcc_diag__); +extern int tdiag (const char *, ...) ATTRIBUTE_DIAG(__gcc_tdiag__); extern int cdiag (const char *, ...) ATTRIBUTE_DIAG(__gcc_cdiag__); extern int cxxdiag (const char *, ...) ATTRIBUTE_DIAG(__gcc_cxxdiag__); @@ -35,42 +36,57 @@ foo (int i, int i1, int i2, unsigned int u, double d, char *s, void *p, { /* Acceptable C90 specifiers, flags and modifiers. */ diag ("%%"); + tdiag ("%%"); cdiag ("%%"); cxxdiag ("%%"); diag ("%d%i%o%u%x%c%s%p%%", i, i, u, u, u, i, s, p); + tdiag ("%d%i%o%u%x%c%s%p%%", i, i, u, u, u, i, s, p); cdiag ("%d%i%o%u%x%c%s%p%%", i, i, u, u, u, i, s, p); cxxdiag ("%d%i%o%u%x%c%s%p%%", i, i, u, u, u, i, s, p); diag ("%qd%qi%qo%qu%qx%qc%qs%qp%<%%%'%>", i, i, u, u, u, i, s, p); + tdiag ("%qd%qi%qo%qu%qx%qc%qs%qp%<%%%'%>", i, i, u, u, u, i, s, p); cdiag ("%qd%qi%qo%qu%qx%qc%qs%qp%<%%%'%>", i, i, u, u, u, i, s, p); cxxdiag ("%qd%qi%qo%qu%qx%qc%qs%qp%<%%%'%>", i, i, u, u, u, i, s, p); diag ("%ld%li%lo%lu%lx", l, l, ul, ul, ul); + tdiag ("%ld%li%lo%lu%lx", l, l, ul, ul, ul); cdiag ("%ld%li%lo%lu%lx", l, l, ul, ul, ul); cxxdiag ("%ld%li%lo%lu%lx", l, l, ul, ul, ul); diag ("%lld%lli%llo%llu%llx", ll, ll, ull, ull, ull); + tdiag ("%lld%lli%llo%llu%llx", ll, ll, ull, ull, ull); cdiag ("%lld%lli%llo%llu%llx", ll, ll, ull, ull, ull); cxxdiag ("%lld%lli%llo%llu%llx", ll, ll, ull, ull, ull); diag ("%wd%wi%wo%wu%wx", ll, ll, ull, ull, ull); + tdiag ("%wd%wi%wo%wu%wx", ll, ll, ull, ull, ull); cdiag ("%wd%wi%wo%wu%wx", ll, ll, ull, ull, ull); cxxdiag ("%wd%wi%wo%wu%wx", ll, ll, ull, ull, ull); diag ("%.*s", i, s); + tdiag ("%.*s", i, s); cdiag ("%.*s", i, s); cxxdiag ("%.*s", i, s); /* Extensions provided in the diagnostic framework. */ diag ("%m"); + tdiag ("%m"); cdiag ("%m"); cxxdiag ("%m"); diag ("%H", loc); + tdiag ("%H", loc); cdiag ("%H", loc); cxxdiag ("%H", loc); diag ("%J", t1); + tdiag ("%J", t1); cdiag ("%J", t1); cxxdiag ("%J", t1); + tdiag ("%D%F%T", t1, t1, t1); + tdiag ("%+D%+F%+T", t1, t1, t1); + tdiag ("%q+D%q+F%q+T", t1, t1, t1); + tdiag ("%D%D%D%D", t1, t2, *t3, t4[5]); cdiag ("%D%F%T", t1, t1, t1); cdiag ("%+D%+F%+T", t1, t1, t1); cdiag ("%q+D%q+F%q+T", t1, t1, t1); cdiag ("%D%D%D%D", t1, t2, *t3, t4[5]); + cdiag ("%E", t1); cxxdiag ("%A%D%E%F%T%V", t1, t1, t1, t1, t1, t1); cxxdiag ("%D%D%D%D", t1, t2, *t3, t4[5]); cxxdiag ("%#A%#D%#E%#F%#T%#V", t1, t1, t1, t1, t1, t1); @@ -80,36 +96,49 @@ foo (int i, int i1, int i2, unsigned int u, double d, char *s, void *p, /* Bad stuff with extensions. */ diag ("%m", i); /* { dg-warning "format" "extra arg" } */ + tdiag ("%m", i); /* { dg-warning "format" "extra arg" } */ cdiag ("%m", i); /* { dg-warning "format" "extra arg" } */ cxxdiag ("%m", i); /* { dg-warning "format" "extra arg" } */ diag ("%#m"); /* { dg-warning "format" "bogus modifier" } */ + tdiag ("%#m"); /* { dg-warning "format" "bogus modifier" } */ cdiag ("%#m"); /* { dg-warning "format" "bogus modifier" } */ cxxdiag ("%#m"); /* { dg-warning "format" "bogus modifier" } */ diag ("%+m"); /* { dg-warning "format" "bogus modifier" } */ + tdiag ("%+m"); /* { dg-warning "format" "bogus modifier" } */ cdiag ("%+m"); /* { dg-warning "format" "bogus modifier" } */ cxxdiag ("%+m"); /* { dg-warning "format" "bogus modifier" } */ diag ("%H"); /* { dg-warning "format" "missing arg" } */ + tdiag ("%H"); /* { dg-warning "format" "missing arg" } */ cdiag ("%H"); /* { dg-warning "format" "missing arg" } */ cxxdiag ("%H"); /* { dg-warning "format" "missing arg" } */ diag ("%J"); /* { dg-warning "format" "missing arg" } */ + tdiag ("%J"); /* { dg-warning "format" "missing arg" } */ cdiag ("%J"); /* { dg-warning "format" "missing arg" } */ cxxdiag ("%J"); /* { dg-warning "format" "missing arg" } */ diag ("%H", i); /* { dg-warning "format" "wrong arg" } */ + tdiag ("%H", i); /* { dg-warning "format" "wrong arg" } */ cdiag ("%H", i); /* { dg-warning "format" "wrong arg" } */ cxxdiag ("%H", i); /* { dg-warning "format" "wrong arg" } */ diag ("%H", p); /* { dg-warning "format" "wrong arg" } */ + tdiag ("%H", p); /* { dg-warning "format" "wrong arg" } */ cdiag ("%H", p); /* { dg-warning "format" "wrong arg" } */ cxxdiag ("%H", p); /* { dg-warning "format" "wrong arg" } */ diag ("%J", loc); /* { dg-warning "format" "wrong arg" } */ + tdiag ("%J", loc); /* { dg-warning "format" "wrong arg" } */ cdiag ("%J", loc); /* { dg-warning "format" "wrong arg" } */ cxxdiag ("%J", loc); /* { dg-warning "format" "wrong arg" } */ diag ("%#H", loc); /* { dg-warning "format" "bogus modifier" } */ + tdiag ("%#H", loc); /* { dg-warning "format" "bogus modifier" } */ cdiag ("%#H", loc); /* { dg-warning "format" "bogus modifier" } */ cxxdiag ("%#H", loc); /* { dg-warning "format" "bogus modifier" } */ diag ("%+H", loc); /* { dg-warning "format" "bogus modifier" } */ + tdiag ("%+H", loc); /* { dg-warning "format" "bogus modifier" } */ cdiag ("%+H", loc); /* { dg-warning "format" "bogus modifier" } */ cxxdiag ("%+H", loc); /* { dg-warning "format" "bogus modifier" } */ diag ("%D", t1); /* { dg-warning "format" "bogus tree" } */ + tdiag ("%A", t1); /* { dg-warning "format" "bogus tree" } */ + tdiag ("%E", t1); /* { dg-warning "format" "bogus tree" } */ + tdiag ("%#D", t1); /* { dg-warning "format" "bogus modifier" } */ cdiag ("%A", t1); /* { dg-warning "format" "bogus tree" } */ cdiag ("%#D", t1); /* { dg-warning "format" "bogus modifier" } */ cdiag ("%+D", t1); @@ -118,10 +147,13 @@ foo (int i, int i1, int i2, unsigned int u, double d, char *s, void *p, cxxdiag ("%C", i, i); /* { dg-warning "format" "extra arg" } */ cxxdiag ("%#C", i); /* { dg-warning "format" "bogus modifier" } */ cxxdiag ("%+C", i); /* { dg-warning "format" "bogus modifier" } */ + tdiag ("%D"); /* { dg-warning "format" "missing arg" } */ cdiag ("%D"); /* { dg-warning "format" "missing arg" } */ cxxdiag ("%D"); /* { dg-warning "format" "missing arg" } */ + tdiag ("%D", i); /* { dg-warning "format" "wrong arg" } */ cdiag ("%D", i); /* { dg-warning "format" "wrong arg" } */ cxxdiag ("%D", i); /* { dg-warning "format" "wrong arg" } */ + tdiag ("%D", t1, t1); /* { dg-warning "format" "extra arg" } */ cdiag ("%D", t1, t1); /* { dg-warning "format" "extra arg" } */ cxxdiag ("%D", t1, t1); /* { dg-warning "format" "extra arg" } */ @@ -137,36 +169,47 @@ foo (int i, int i1, int i2, unsigned int u, double d, char *s, void *p, /* Various tests of bad argument types. */ diag ("%-d", i); /* { dg-warning "format" "bad flag" } */ + tdiag ("%-d", i); /* { dg-warning "format" "bad flag" } */ cdiag ("%-d", i); /* { dg-warning "format" "bad flag" } */ cxxdiag ("%-d", i); /* { dg-warning "format" "bad flag" } */ diag ("% d", i); /* { dg-warning "format" "bad flag" } */ + tdiag ("% d", i); /* { dg-warning "format" "bad flag" } */ cdiag ("% d", i); /* { dg-warning "format" "bad flag" } */ cxxdiag ("% d", i); /* { dg-warning "format" "bad flag" } */ diag ("%#o", u); /* { dg-warning "format" "bad flag" } */ + tdiag ("%#o", u); /* { dg-warning "format" "bad flag" } */ cdiag ("%#o", u); /* { dg-warning "format" "bad flag" } */ cxxdiag ("%#o", u); /* { dg-warning "format" "bad flag" } */ diag ("%0d", i); /* { dg-warning "format" "bad flag" } */ + tdiag ("%0d", i); /* { dg-warning "format" "bad flag" } */ cdiag ("%0d", i); /* { dg-warning "format" "bad flag" } */ cxxdiag ("%0d", i); /* { dg-warning "format" "bad flag" } */ diag ("%08d", i); /* { dg-warning "format" "bad flag" } */ + tdiag ("%08d", i); /* { dg-warning "format" "bad flag" } */ cdiag ("%08d", i); /* { dg-warning "format" "bad flag" } */ cxxdiag ("%08d", i); /* { dg-warning "format" "bad flag" } */ diag ("%+d\n", i); /* { dg-warning "format" "bad flag" } */ + tdiag ("%+d\n", i); /* { dg-warning "format" "bad flag" } */ cdiag ("%+d\n", i); /* { dg-warning "format" "bad flag" } */ cxxdiag ("%+d\n", i); /* { dg-warning "format" "bad flag" } */ diag ("%3d\n", i); /* { dg-warning "format" "bad flag" } */ + tdiag ("%3d\n", i); /* { dg-warning "format" "bad flag" } */ cdiag ("%3d\n", i); /* { dg-warning "format" "bad flag" } */ cxxdiag ("%3d\n", i); /* { dg-warning "format" "bad flag" } */ diag ("%-3d\n", i); /* { dg-warning "format" "bad flag" } */ + tdiag ("%-3d\n", i); /* { dg-warning "format" "bad flag" } */ cdiag ("%-3d\n", i); /* { dg-warning "format" "bad flag" } */ cxxdiag ("%-3d\n", i); /* { dg-warning "format" "bad flag" } */ diag ("%.7d\n", i); /* { dg-warning "format" "bad flag" } */ + tdiag ("%.7d\n", i); /* { dg-warning "format" "bad flag" } */ cdiag ("%.7d\n", i); /* { dg-warning "format" "bad flag" } */ cxxdiag ("%.7d\n", i); /* { dg-warning "format" "bad flag" } */ diag ("%+9.4d\n", i); /* { dg-warning "format" "bad flag" } */ + tdiag ("%+9.4d\n", i); /* { dg-warning "format" "bad flag" } */ cdiag ("%+9.4d\n", i); /* { dg-warning "format" "bad flag" } */ cxxdiag ("%+9.4d\n", i); /* { dg-warning "format" "bad flag" } */ diag ("%.3ld\n", l); /* { dg-warning "format" "bad flag" } */ + tdiag ("%.3ld\n", l); /* { dg-warning "format" "bad flag" } */ cdiag ("%.3ld\n", l); /* { dg-warning "format" "bad flag" } */ cxxdiag ("%.3ld\n", l); /* { dg-warning "format" "bad flag" } */ diag ("%d %lu\n", i, ul); diff --git a/gcc/toplev.h b/gcc/toplev.h index 827b17f3ca9..ddd6b61fe54 100644 --- a/gcc/toplev.h +++ b/gcc/toplev.h @@ -44,34 +44,25 @@ extern void _fatal_insn (const char *, rtx, const char *, int, const char *) /* If we haven't already defined a frontend specific diagnostics style, use the generic one. */ #ifndef GCC_DIAG_STYLE -#define GCC_DIAG_STYLE __gcc_diag__ -#define NO_FRONT_END_DIAG +#define GCC_DIAG_STYLE __gcc_tdiag__ #endif /* None of these functions are suitable for ATTRIBUTE_PRINTF, because each language front end can extend them with its own set of format - specifiers. We must use custom format checks. Note that at present - the front-end %D specifier is used in non-front-end code with some - functions, and those formats can only be checked in front-end code. */ -#if GCC_VERSION >= 3005 + specifiers. We must use custom format checks. */ +#if GCC_VERSION >= 4001 #define ATTRIBUTE_GCC_DIAG(m, n) __attribute__ ((__format__ (GCC_DIAG_STYLE, m, n))) ATTRIBUTE_NONNULL(m) -#ifdef NO_FRONT_END_DIAG -#define ATTRIBUTE_GCC_FE_DIAG(m, n) ATTRIBUTE_NONNULL(m) -#else -#define ATTRIBUTE_GCC_FE_DIAG(m, n) __attribute__ ((__format__ (GCC_DIAG_STYLE, m, n))) ATTRIBUTE_NONNULL(m) -#endif #else #define ATTRIBUTE_GCC_DIAG(m, n) ATTRIBUTE_NONNULL(m) -#define ATTRIBUTE_GCC_FE_DIAG(m, n) ATTRIBUTE_NONNULL(m) #endif extern void internal_error (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2) ATTRIBUTE_NORETURN; -extern void warning0 (const char *, ...) ATTRIBUTE_GCC_FE_DIAG(1,2); -extern void warning (int, const char *, ...) ATTRIBUTE_GCC_FE_DIAG(2,3); -extern void error (const char *, ...) ATTRIBUTE_GCC_FE_DIAG(1,2); +extern void warning0 (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2); +extern void warning (int, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3); +extern void error (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2); extern void fatal_error (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2) ATTRIBUTE_NORETURN; -extern void pedwarn (const char *, ...) ATTRIBUTE_GCC_FE_DIAG(1,2); -extern void sorry (const char *, ...) ATTRIBUTE_GCC_FE_DIAG(1,2); +extern void pedwarn (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2); +extern void sorry (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2); extern void inform (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2); extern void verbatim (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2); diff --git a/gcc/tree-eh.c b/gcc/tree-eh.c index b294cf257cf..9449d5b861a 100644 --- a/gcc/tree-eh.c +++ b/gcc/tree-eh.c @@ -1764,7 +1764,7 @@ mark_eh_edge (struct eh_region *region, void *data) e = find_edge (src, dst); if (!e) { - error ("EH edge %i->%i is missing %i %i.", src->index, dst->index, src, dst); + error ("EH edge %i->%i is missing.", src->index, dst->index); mark_eh_edge_found_error = true; } else if (!(e->flags & EDGE_EH)) diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index 9836bb184fd..c4fbf8a8ab1 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -346,7 +346,7 @@ verify_phi_args (tree phi, basic_block bb, basic_block *definition_block) if (e->dest != bb) { error ("Wrong edge %d->%d for PHI argument\n", - e->src->index, e->dest->index, bb->index); + e->src->index, e->dest->index); err = true; } diff --git a/gcc/varasm.c b/gcc/varasm.c index 2a11dd2ebb1..59abefbdf12 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -4583,11 +4583,11 @@ finish_aliases_1 (void) target_decl = find_decl_and_mark_needed (p->decl, p->target); if (target_decl == NULL) - error ("%q+D aliased to undefined symbol %qE", - p->decl, p->target); + error ("%q+D aliased to undefined symbol %qs", + p->decl, IDENTIFIER_POINTER (p->target)); else if (DECL_EXTERNAL (target_decl)) - error ("%q+D aliased to external symbol %qE", - p->decl, p->target); + error ("%q+D aliased to external symbol %qs", + p->decl, IDENTIFIER_POINTER (p->target)); } } |