diff options
author | Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> | 1998-06-03 02:13:21 +0000 |
---|---|---|
committer | Andreas Schwab <schwab@gcc.gnu.org> | 1998-06-03 02:13:21 +0000 |
commit | bc516719eccb6e941f036a763ba5a7bdbd1b0d80 (patch) | |
tree | 1be42e6b3c97dc34ee2b190ab6f70fcfa5215f16 /gcc | |
parent | 7fdc2757cbeda7edde71bdcf75ba55d1c18a6448 (diff) | |
download | gcc-bc516719eccb6e941f036a763ba5a7bdbd1b0d80.zip gcc-bc516719eccb6e941f036a763ba5a7bdbd1b0d80.tar.gz gcc-bc516719eccb6e941f036a763ba5a7bdbd1b0d80.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/c-common.c | 26 |
2 files changed, 18 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a0e02a3..35fde3f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ Wed Jun 3 11:02:24 1998 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + * 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 120e3e8..9983cdb 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 |