aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-common.c
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1993-12-22 07:11:59 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1993-12-22 07:11:59 -0500
commitaf3c5588abd4ddfd04435045fc7a526a0d1b141f (patch)
treebc6c0e1502d778eb870a64875e5a3fa191a06886 /gcc/c-common.c
parent3b0ad9f9c4588e0443e5d9c05ea1e8e1b54ec88e (diff)
downloadgcc-af3c5588abd4ddfd04435045fc7a526a0d1b141f.zip
gcc-af3c5588abd4ddfd04435045fc7a526a0d1b141f.tar.gz
gcc-af3c5588abd4ddfd04435045fc7a526a0d1b141f.tar.bz2
(T_ST): New macro.
(scan_char_table): With s, c and [, allow `a' flag. (print_char_table): Accept Z and m codes. (check_format_info): Handle the `a' flag. From-SVN: r6258
Diffstat (limited to 'gcc/c-common.c')
-rw-r--r--gcc/c-common.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/gcc/c-common.c b/gcc/c-common.c
index 4e80cd8..968d369 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -357,6 +357,7 @@ decl_attributes (decl, attributes)
#define T_C &char_type_node
#define T_V &void_type_node
#define T_W &wchar_type_node
+#define T_ST &size_type
typedef struct {
char *format_chars;
@@ -380,6 +381,9 @@ static format_char_info print_char_table[] = {
{ "di", 0, T_I, T_I, T_L, NULL, "-wp0 +" },
{ "oxX", 0, T_UI, T_UI, T_UL, NULL, "-wp0#" },
{ "u", 0, T_UI, T_UI, T_UL, NULL, "-wp0" },
+/* Two GNU extensions. */
+ { "Z", 0, T_ST, NULL, NULL, NULL, "-wp0" },
+ { "m", 0, T_UI, T_UI, T_UL, NULL, "-wp" },
{ "feEgG", 0, T_D, NULL, NULL, T_LD, "-wp0 +#" },
{ "c", 0, T_I, NULL, T_W, NULL, "-w" },
{ "C", 0, T_W, NULL, NULL, NULL, "-w" },
@@ -394,8 +398,8 @@ static format_char_info scan_char_table[] = {
{ "di", 1, T_I, T_S, T_L, NULL, "*" },
{ "ouxX", 1, T_UI, T_US, T_UL, NULL, "*" },
{ "efgEG", 1, T_F, NULL, T_D, T_LD, "*" },
- { "sc", 1, T_C, NULL, T_W, NULL, "*" },
- { "[", 1, T_C, NULL, NULL, NULL, "*" },
+ { "sc", 1, T_C, NULL, T_W, NULL, "*a" },
+ { "[", 1, T_C, NULL, NULL, NULL, "*a" },
{ "C", 1, T_W, NULL, NULL, NULL, "*" },
{ "S", 1, T_W, NULL, NULL, NULL, "*" },
{ "p", 2, T_V, NULL, NULL, NULL, "*" },
@@ -583,6 +587,7 @@ check_format_info (info, params)
first_fillin_param = params;
while (1)
{
+ int aflag;
if (*format_chars == 0)
{
if (format_chars - TREE_STRING_POINTER (format_tree) != format_length)
@@ -748,6 +753,12 @@ check_format_info (info, params)
length_char = *format_chars++;
else
length_char = 0;
+ aflag = 0;
+ if (*format_chars == 'a')
+ {
+ aflag = 1;
+ format_chars++;
+ }
if (suppressed && length_char != 0)
{
sprintf (message,
@@ -791,6 +802,12 @@ check_format_info (info, params)
format_char);
warning (message);
}
+ if (aflag && index (fci->flag_chars, 'a') == 0)
+ {
+ sprintf (message, "`a' flag used with `%c' format",
+ format_char);
+ warning (message);
+ }
if (info->is_scan && format_char == '[')
{
/* Skip over scan set, in case it happens to have '%' in it. */