aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-02-01 18:56:12 -0500
committerRichard Kenner <kenner@gcc.gnu.org>1994-02-01 18:56:12 -0500
commit09e3dd72329a140027254451c6af253b38689714 (patch)
treee204182d1644b678fbb0862b2e446f307287ceb7 /gcc
parente73735563717fa9dfaf10dfa7dfe8242026d6c67 (diff)
downloadgcc-09e3dd72329a140027254451c6af253b38689714.zip
gcc-09e3dd72329a140027254451c6af253b38689714.tar.gz
gcc-09e3dd72329a140027254451c6af253b38689714.tar.bz2
(decl_attributes): Allow format attributes on old style
(non-prototype) function declarations. From-SVN: r6463
Diffstat (limited to 'gcc')
-rw-r--r--gcc/c-common.c52
1 files changed, 28 insertions, 24 deletions
diff --git a/gcc/c-common.c b/gcc/c-common.c
index 9a9c8ba..73ae7eb 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -1,5 +1,5 @@
/* Subroutines shared by all languages that are variants of C.
- Copyright (C) 1992, 1993 Free Software Foundation, Inc.
+ Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -345,35 +345,39 @@ decl_attributes (decl, attributes)
continue;
}
- /* Verify that the format_num argument is actually a string, in case
- the format attribute is in error. */
+ /* If a parameter list is specified, verify that the format_num
+ argument is actually a string, in case the format attribute
+ is in error. */
argument = TYPE_ARG_TYPES (TREE_TYPE (decl));
- for (arg_num = 1; ; ++arg_num)
+ if (argument)
{
- if (argument == 0 || arg_num == format_num)
- break;
- argument = TREE_CHAIN (argument);
- }
- if (! argument
- || TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE
- || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (argument)))
- != char_type_node))
- {
- error_with_decl (decl,
- "format string arg not a string type, for `%s'");
- continue;
- }
- if (first_arg_num != 0)
- {
- /* Verify that first_arg_num points to the last arg, the ... */
- while (argument)
- arg_num++, argument = TREE_CHAIN (argument);
- if (arg_num != first_arg_num)
+ for (arg_num = 1; ; ++arg_num)
+ {
+ if (argument == 0 || arg_num == format_num)
+ break;
+ argument = TREE_CHAIN (argument);
+ }
+ if (! argument
+ || TREE_CODE (TREE_VALUE (argument)) != POINTER_TYPE
+ || (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (argument)))
+ != char_type_node))
{
error_with_decl (decl,
- "args to be formatted is not ..., for `%s'");
+ "format string arg not a string type, for `%s'");
continue;
}
+ if (first_arg_num != 0)
+ {
+ /* Verify that first_arg_num points to the last arg, the ... */
+ while (argument)
+ arg_num++, argument = TREE_CHAIN (argument);
+ if (arg_num != first_arg_num)
+ {
+ error_with_decl (decl,
+ "args to be formatted is not ..., for `%s'");
+ continue;
+ }
+ }
}
record_function_format (DECL_NAME (decl), DECL_ASSEMBLER_NAME (decl),