aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJoseph Myers <jsm28@cam.ac.uk>2000-09-18 17:31:07 +0100
committerJoseph Myers <jsm28@gcc.gnu.org>2000-09-18 17:31:07 +0100
commiteffa55410383b2a76aee22e37c86c5d11e95aad9 (patch)
treea4b4934fb4b6f3d2e9a66dd7bc5aa58ea1a6e9de /gcc
parent65661a727497d251cb3e39cb9bf8ec46b6b8292a (diff)
downloadgcc-effa55410383b2a76aee22e37c86c5d11e95aad9.zip
gcc-effa55410383b2a76aee22e37c86c5d11e95aad9.tar.gz
gcc-effa55410383b2a76aee22e37c86c5d11e95aad9.tar.bz2
c-common.c (format_char_info): Add 'W' flag to comment.
* c-common.c (format_char_info): Add 'W' flag to comment. (print_char_table, scan_char_table): Use it. (check_format_info): Use the 'W' flag to determine whether a format argument is written into. From-SVN: r36492
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/c-common.c33
2 files changed, 23 insertions, 17 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7de3edd..faaf564 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,12 @@
2000-09-18 Joseph S. Myers <jsm28@cam.ac.uk>
+ * c-common.c (format_char_info): Add 'W' flag to comment.
+ (print_char_table, scan_char_table): Use it.
+ (check_format_info): Use the 'W' flag to determine whether a
+ format argument is written into.
+
+2000-09-18 Joseph S. Myers <jsm28@cam.ac.uk>
+
* c-common.c (check_format_types): Reorganise and clean up,
checking earlier for ERROR_MARKs and making cur_type into its
TYPE_MAIN_VARIANT where convenient.
diff --git a/gcc/c-common.c b/gcc/c-common.c
index 292d946..7cdde8b 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -1299,8 +1299,9 @@ typedef struct
"a" allocation extension (not applicable in C99 mode), "*" for
scanf suppression, "2" for strftime two digit year formats, "3"
for strftime formats giving two digit years in some locales, "E"
- and "O" for those strftime modifiers, and "o" if use of strftime "O"
- is a GNU extension beyond C99. */
+ and "O" for those strftime modifiers, "o" if use of strftime "O"
+ is a GNU extension beyond C99, and "W" if the argument is a
+ pointer which is dereferenced and written into. */
const char *flag_chars;
} format_char_info;
@@ -1444,7 +1445,7 @@ static const format_char_info print_char_table[] =
{ "c", 0, STD_C89, { T89_I, BADLEN, BADLEN, T94_WI, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-w" },
{ "s", 1, STD_C89, { T89_C, BADLEN, BADLEN, T94_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-wpc" },
{ "p", 1, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "-wc" },
- { "n", 1, STD_C89, { T89_I, T99_SC, T89_S, T89_L, T99_LL, BADLEN, T99_SST, T99_PD, T99_IM }, "" },
+ { "n", 1, STD_C89, { T89_I, T99_SC, T89_S, T89_L, T99_LL, BADLEN, T99_SST, T99_PD, T99_IM }, "W" },
/* C99 conversion specifiers. */
{ "F", 0, STD_C99, { T99_D, BADLEN, BADLEN, T99_D, BADLEN, T99_LD, BADLEN, BADLEN, BADLEN }, "-wp0 +#'" },
{ "aA", 0, STD_C99, { T99_D, BADLEN, BADLEN, T99_D, BADLEN, T99_LD, BADLEN, BADLEN, BADLEN }, "-wp0 +#" },
@@ -1459,19 +1460,19 @@ static const format_char_info print_char_table[] =
static const format_char_info scan_char_table[] =
{
/* C89 conversion specifiers. */
- { "di", 1, STD_C89, { T89_I, T99_SC, T89_S, T89_L, T99_LL, TEX_LL, T99_SST, T99_PD, T99_IM }, "*w" },
- { "ouxX", 1, STD_C89, { T89_UI, T99_UC, T89_US, T89_UL, T99_ULL, TEX_ULL, T99_ST, T99_UPD, T99_UIM }, "*w" },
- { "efgEG", 1, STD_C89, { T89_F, BADLEN, BADLEN, T89_D, BADLEN, T89_LD, BADLEN, BADLEN, BADLEN }, "*w" },
- { "c", 1, STD_C89, { T89_C, BADLEN, BADLEN, T94_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "*cw" },
- { "s", 1, STD_C89, { T89_C, BADLEN, BADLEN, T94_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "*acw" },
- { "[", 1, STD_C89, { T89_C, BADLEN, BADLEN, T94_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "*acw" },
- { "p", 2, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "*w" },
- { "n", 1, STD_C89, { T89_I, T99_SC, T89_S, T89_L, T99_LL, BADLEN, T99_SST, T99_PD, T99_IM }, "" },
+ { "di", 1, STD_C89, { T89_I, T99_SC, T89_S, T89_L, T99_LL, TEX_LL, T99_SST, T99_PD, T99_IM }, "*wW" },
+ { "ouxX", 1, STD_C89, { T89_UI, T99_UC, T89_US, T89_UL, T99_ULL, TEX_ULL, T99_ST, T99_UPD, T99_UIM }, "*wW" },
+ { "efgEG", 1, STD_C89, { T89_F, BADLEN, BADLEN, T89_D, BADLEN, T89_LD, BADLEN, BADLEN, BADLEN }, "*wW" },
+ { "c", 1, STD_C89, { T89_C, BADLEN, BADLEN, T94_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "*cwW" },
+ { "s", 1, STD_C89, { T89_C, BADLEN, BADLEN, T94_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "*acwW" },
+ { "[", 1, STD_C89, { T89_C, BADLEN, BADLEN, T94_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "*acwW" },
+ { "p", 2, STD_C89, { T89_V, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "*wW" },
+ { "n", 1, STD_C89, { T89_I, T99_SC, T89_S, T89_L, T99_LL, BADLEN, T99_SST, T99_PD, T99_IM }, "W" },
/* C99 conversion specifiers. */
- { "FaA", 1, STD_C99, { T99_F, BADLEN, BADLEN, T99_D, BADLEN, T99_LD, BADLEN, BADLEN, BADLEN }, "*w" },
+ { "FaA", 1, STD_C99, { T99_F, BADLEN, BADLEN, T99_D, BADLEN, T99_LD, BADLEN, BADLEN, BADLEN }, "*wW" },
/* X/Open conversion specifiers. */
- { "C", 1, STD_EXT, { TEX_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "*w" },
- { "S", 1, STD_EXT, { TEX_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "*aw" },
+ { "C", 1, STD_EXT, { TEX_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "*wW" },
+ { "S", 1, STD_EXT, { TEX_W, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN, BADLEN }, "*awW" },
{ NULL, 0, 0, NOLENGTHS, NULL }
};
@@ -2482,9 +2483,7 @@ check_format_info (info, params)
if (index (fci->flag_chars, 'c') != 0)
main_wanted_type.char_lenient_flag = 1;
main_wanted_type.writing_in_flag = 0;
- if (info->format_type == scanf_format_type
- || (info->format_type == printf_format_type
- && format_char == 'n'))
+ if (index (fci->flag_chars, 'W') != 0)
main_wanted_type.writing_in_flag = 1;
main_wanted_type.name = NULL;
main_wanted_type.param = cur_param;