aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-common.c
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@issan.informatik.uni-dortmund.de>1998-06-03 02:13:21 +0000
committerAndreas Schwab <schwab@gcc.gnu.org>1998-06-03 02:13:21 +0000
commitbc516719eccb6e941f036a763ba5a7bdbd1b0d80 (patch)
tree1be42e6b3c97dc34ee2b190ab6f70fcfa5215f16 /gcc/c-common.c
parent7fdc2757cbeda7edde71bdcf75ba55d1c18a6448 (diff)
downloadgcc-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/c-common.c')
-rw-r--r--gcc/c-common.c26
1 files changed, 13 insertions, 13 deletions
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