aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Myers <jsm28@cam.ac.uk>2000-10-12 10:28:52 +0100
committerJoseph Myers <jsm28@gcc.gnu.org>2000-10-12 10:28:52 +0100
commit9fa8f75dc90217d4682fc22454b064424b8c9497 (patch)
tree10bcbca131e9d45e6679cdb46afd7506c3c47005
parent1eb1669cd401fa1365febf71fb05bc4c750e19bc (diff)
downloadgcc-9fa8f75dc90217d4682fc22454b064424b8c9497.zip
gcc-9fa8f75dc90217d4682fc22454b064424b8c9497.tar.gz
gcc-9fa8f75dc90217d4682fc22454b064424b8c9497.tar.bz2
c-common.c (decl_attributes): Don't allow strftime formats with first_arg_num nonzero.
* c-common.c (decl_attributes): Don't allow strftime formats with first_arg_num nonzero. (check_format_info): Set wanted_type and wanted_type_name to zero before they are possibly assigned and used. testsuite: * gcc.dg/format-attr-1.c: New test. From-SVN: r36845
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/c-common.c8
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/format-attr-1.c7
4 files changed, 26 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 80a0937..71eae23 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,12 @@
2000-10-12 Joseph S. Myers <jsm28@cam.ac.uk>
+ * c-common.c (decl_attributes): Don't allow strftime formats with
+ first_arg_num nonzero.
+ (check_format_info): Set wanted_type and wanted_type_name to zero
+ before they are possibly assigned and used.
+
+2000-10-12 Joseph S. Myers <jsm28@cam.ac.uk>
+
* c-common.c (scanf_flag_specs): Add flags ' and I.
(strftime_flag_pairs): Disallow any pair of the _, - and 0 flags,
or the ^ and # flags together.
diff --git a/gcc/c-common.c b/gcc/c-common.c
index 07384f8..3d3e7c2 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -962,6 +962,12 @@ decl_attributes (node, attributes, prefix_attributes)
}
}
+ if (format_type == strftime_format_type && first_arg_num != 0)
+ {
+ error ("strftime formats cannot format arguments");
+ continue;
+ }
+
record_function_format (DECL_NAME (decl),
DECL_ASSEMBLER_NAME (decl),
format_type, format_num, first_arg_num);
@@ -2754,6 +2760,8 @@ check_format_info (status, info, params)
status_warning (status, "no closing `]' for `%%[' format");
}
+ wanted_type = 0;
+ wanted_type_name = 0;
if (fki->flags & FMT_FLAG_ARG_CONVERT)
{
wanted_type = (fci->types[length_chars_val].type
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e7dbf2a..369e85c 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,9 @@
2000-10-12 Joseph S. Myers <jsm28@cam.ac.uk>
+ * gcc.dg/format-attr-1.c: New test.
+
+2000-10-12 Joseph S. Myers <jsm28@cam.ac.uk>
+
* gcc.dg/c90-printf-2.c, gcc.dg/c90-scanf-2.c: Use
__LONG_LONG_MAX__ instead of LLONG_MAX.
diff --git a/gcc/testsuite/gcc.dg/format-attr-1.c b/gcc/testsuite/gcc.dg/format-attr-1.c
new file mode 100644
index 0000000..e6ebaf2
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/format-attr-1.c
@@ -0,0 +1,7 @@
+/* Test for strftime format attributes: can't have first_arg_num != 0. */
+/* Origin: Joseph Myers <jsm28@cam.ac.uk> */
+/* { dg-do compile } */
+/* { dg-options "-std=gnu99 -Wformat" } */
+
+extern void foo0 (const char *) __attribute__((__format__(__strftime__, 1, 0)));
+extern void foo1 (const char *, ...) __attribute__((__format__(__strftime__, 1, 2))); /* { dg-error "cannot format" "strftime first_arg_num != 0" } */