summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2005-07-03 01:38:49 +0100
committerJoseph Myers <jsm28@gcc.gnu.org>2005-07-03 01:38:49 +0100
commitea40ba9c04882ea2ddf987e2783f98cc38bac081 (patch)
tree8a19c399c9e578fcd71ada4df98540c8fc66eb48 /gcc
parent3be91f647000940ada4a7c512a2cf5d6e2971817 (diff)
downloadgcc-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/ChangeLog26
-rw-r--r--gcc/c-common.h9
-rw-r--r--gcc/c-format.c66
-rw-r--r--gcc/c-tree.h3
-rw-r--r--gcc/config/arm/arm.c6
-rw-r--r--gcc/config/i386/i386.c2
-rw-r--r--gcc/config/mmix/mmix.c4
-rw-r--r--gcc/config/pdp11/pdp11.c4
-rw-r--r--gcc/config/rs6000/rs6000.c2
-rw-r--r--gcc/config/v850/v850-protos.h2
-rw-r--r--gcc/config/v850/v850.c2
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/cp-tree.h6
-rw-r--r--gcc/stor-layout.c3
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/format/gcc_diag-1.c43
-rw-r--r--gcc/toplev.h25
-rw-r--r--gcc/tree-eh.c2
-rw-r--r--gcc/tree-ssa.c2
-rw-r--r--gcc/varasm.c8
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));
}
}