@@ -688,7 +688,8 @@ static const format_char_info gcc_diag_char_table[] =
{ "K", NULL, NULL, 0, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q", "", NULL },
{ "r", NULL, NULL, 1, STD_C89, { T89_C, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "", "cR", NULL },
- { "<>'R","<'R", ">'R", 0, STD_C89, NOARGUMENTS, "", "", NULL },
+ { "<>","<", ">", 0, STD_C89, NOARGUMENTS, "", "", NULL },
+ { "'R", NULL, NULL, 0, STD_C89, NOARGUMENTS, "", "", NULL },
{ "m", NULL, NULL, 0, STD_C89, NOARGUMENTS, "q", "", NULL },
{ NULL, NULL, NULL, 0, STD_C89, NOLENGTHS, NULL, NULL, NULL }
};
@@ -706,12 +707,13 @@ static const format_char_info gcc_tdiag_char_table[] =
/* Custom conversion specifiers. */
/* These will require a "tree" at runtime. */
- { "DFKTEV", "EK", "EK", 0, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q+", "", NULL },
-
+ { "DFTV", "", "", 0, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q+", "", NULL },
+ { "EK", NULL, NULL, 0, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q+", "", NULL },
{ "v", NULL, NULL, 0, STD_C89, { T89_I, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q#", "", NULL },
{ "r", NULL, NULL, 1, STD_C89, { T89_C, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "", "cR", NULL },
- { "<>'R", "<'R", ">'R", 0, STD_C89, NOARGUMENTS, "", "", NULL },
+ { "<>", "<", ">", 0, STD_C89, NOARGUMENTS, "", "", NULL },
+ { "'R", NULL, NULL, 0, STD_C89, NOARGUMENTS, "", "", NULL },
{ "m", NULL, NULL, 0, STD_C89, NOARGUMENTS, "q", "", NULL },
{ "Z", NULL, NULL, 1, STD_C89, { T89_I, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "", "", &gcc_tdiag_char_table[0] },
{ NULL, NULL, NULL, 0, STD_C89, NOLENGTHS, NULL, NULL, NULL }
@@ -730,12 +732,14 @@ static const format_char_info gcc_cdiag_char_table[] =
/* Custom conversion specifiers. */
/* These will require a "tree" at runtime. */
- { "DEFKTV", "EK", "EK", 0, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q+", "", NULL },
+ { "DFTV", "", "", 0, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q+", "", NULL },
+ { "EK", NULL, NULL, 0, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q+", "", NULL },
{ "v", NULL, NULL, 0, STD_C89, { T89_I, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q#", "", NULL },
{ "r", NULL, NULL, 1, STD_C89, { T89_C, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "", "cR", NULL },
- { "<>'R", "<'R", ">'R", 0, STD_C89, NOARGUMENTS, "", "", NULL },
+ { "<>", "<", ">", 0, STD_C89, NOARGUMENTS, "", "", NULL },
+ { "'R", NULL, NULL, 0, STD_C89, NOARGUMENTS, "", "", NULL },
{ "m", NULL, NULL, 0, STD_C89, NOARGUMENTS, "q", "", NULL },
{ "Z", NULL, NULL, 1, STD_C89, { T89_I, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "", "", &gcc_tdiag_char_table[0] },
{ NULL, NULL, NULL, 0, STD_C89, NOLENGTHS, NULL, NULL, NULL }
@@ -754,7 +758,8 @@ static const format_char_info gcc_cxxdiag_char_table[] =
/* Custom conversion specifiers. */
/* These will require a "tree" at runtime. */
- { "ADEFKSTVX", "EK", "EK", 0,STD_C89,{ T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q+#", "", NULL },
+ { "ADFSTVX", "", "", 0,STD_C89,{ T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q+#", "", NULL },
+ { "EK", NULL, NULL, 0,STD_C89,{ T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q+#", "", NULL },
{ "v", NULL, NULL, 0,STD_C89, { T89_I, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q#", "", NULL },
@@ -762,7 +767,8 @@ static const format_char_info gcc_cxxdiag_char_table[] =
{ "CLOPQ", NULL, NULL, 0,STD_C89, { T89_I, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "q", "", NULL },
{ "r", NULL, NULL, 1, STD_C89, { T89_C, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "", "cR", NULL },
- { "<>'R", "<'R", ">'R", 0, STD_C89, NOARGUMENTS, "", "", NULL },
+ { "<>", "<", ">", 0, STD_C89, NOARGUMENTS, "", "", NULL },
+ { "'R", NULL, NULL, 0, STD_C89, NOARGUMENTS, "", "", NULL },
{ "m", NULL, NULL, 0, STD_C89, NOARGUMENTS, "q", "", NULL },
{ "Z", NULL, NULL, 1, STD_C89, { T89_I, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "", "", &gcc_tdiag_char_table[0] },
{ NULL, NULL, NULL, 0, STD_C89, NOLENGTHS, NULL, NULL, NULL }
@@ -2829,9 +2835,7 @@ check_format_info_main (format_check_results *res,
const bool suppressed = flag_chars.assignment_suppression_p (fki);
/* Diagnose nested or unmatched quoting directives such as GCC's
- "%<...%<" and "%>...%>". As a special case, a conversion
- specifier that appears in both the BEGIN and END arrays (e.g.,
- GCC's %E) is not diagosed. */
+ "%<...%<" and "%>...%>".. */
bool in_begin_p = (fci->quote_begin_chars
&& strchr (fci->quote_begin_chars, format_char));
bool in_end_p = (fci->quote_end_chars
@@ -137,9 +137,7 @@ struct format_char_info
pairs of which should be matched in the same format string.
Alternatively, strings of conversion specifiers that are expected
to be used within quoted sequences (either by using the 'q' flag or
- by being preceded by the "%<" directive). A specifier that appears
- in both may be used unquoted outside a quoted sequence (such as in
- GCC's "%E"). The pointers may be NULL. */
+ by being preceded by the "%<" directive). The pointers may be NULL. */
const char *quote_begin_chars;
const char *quote_end_chars;
int pointer_count;