diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1994-02-01 18:56:12 -0500 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1994-02-01 18:56:12 -0500 |
commit | 09e3dd72329a140027254451c6af253b38689714 (patch) | |
tree | e204182d1644b678fbb0862b2e446f307287ceb7 /gcc | |
parent | e73735563717fa9dfaf10dfa7dfe8242026d6c67 (diff) | |
download | gcc-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.c | 52 |
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), |