From bc516719eccb6e941f036a763ba5a7bdbd1b0d80 Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Wed, 3 Jun 1998 02:13:21 +0000 Subject: [PATCH] c-common.c (check_format_info): Put back check for C9x `hh' length modifier. * c-common.c (check_format_info): Put back check for C9x `hh' length modifier. Warn about %n format writing into const. Remove obsolete comment. (format_char_info): Fix comments. From-SVN: r20207 --- gcc/ChangeLog | 5 +++++ gcc/c-common.c | 26 +++++++++++++------------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a0e02a33f99..35fde3f67e1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ Wed Jun 3 11:02:24 1998 Andreas Schwab + * c-common.c (check_format_info): Put back check for C9x `hh' + length modifier. Warn about %n format writing into const. Remove + obsolete comment. + (format_char_info): Fix comments. + * configure.in: Set float_format to m68k for all m68k targets that do not override LONG_DOUBLE_TYPE_SIZE. * config/float-m68k.h: New file. diff --git a/gcc/c-common.c b/gcc/c-common.c index 120e3e8060b..9983cdbc5ef 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -979,10 +979,10 @@ typedef struct { int pointer_count; /* Type of argument if no length modifier is used. */ tree *nolen; - /* Type of argument if length modifier for shortening is used. + /* Type of argument if length modifier for shortening to byte is used. If NULL, then this modifier is not allowed. */ tree *hhlen; - /* Type of argument if length modifier for shortening to byte if used. + /* Type of argument if length modifier for shortening is used. If NULL, then this modifier is not allowed. */ tree *hlen; /* Type of argument if length modifier `l' is used. @@ -1556,6 +1556,13 @@ check_format_info (info, params) if (pedantic) warning ("ANSI C does not support the `ll' length modifier"); } + else if (length_char == 'h' && *format_chars == 'h') + { + length_char = 'H', format_chars++; + /* FIXME: Is allowed in ISO C 9x. */ + if (pedantic) + warning ("ANSI C does not support the `hh' length modifier"); + } if (*format_chars == 'a' && info->format_type == scanf_format_type) { if (format_chars[1] == 's' || format_chars[1] == 'S' @@ -1688,15 +1695,6 @@ check_format_info (info, params) warning ("use of `%c' length character with `%c' type character", length_char, format_char); - /* - ** XXX -- should kvetch about stuff such as - ** { - ** const int i; - ** - ** scanf ("%d", &i); - ** } - */ - /* Finally. . .check type of argument against desired type! */ if (info->first_arg_num == 0) continue; @@ -1739,8 +1737,10 @@ check_format_info (info, params) } /* See if this is an attempt to write into a const type with - scanf. */ - if (info->format_type == scanf_format_type + scanf or with printf "%n". */ + if ((info->format_type == scanf_format_type + || (info->format_type == printf_format_type + && format_char == 'n')) && i == fci->pointer_count + aflag && wanted_type != 0 && TREE_CODE (cur_type) != ERROR_MARK