From c5412f0646a072dde262a8643ee2494fd55884eb Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Sun, 24 Sep 2000 10:52:53 +0100 Subject: [PATCH] c-common.c (check_format_info): Warn for a wide character string used as a non-wide format argument. * c-common.c (check_format_info): Warn for a wide character string used as a non-wide format argument. testsuite: * gcc.dg/c90-printf-1.c: Add test for wide string format. From-SVN: r36586 --- gcc/ChangeLog | 5 +++++ gcc/c-common.c | 5 +++++ gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/c90-printf-1.c | 1 + 4 files changed, 15 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9fb5b7acc18..55bdbc6cfde 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2000-09-24 Joseph S. Myers + + * c-common.c (check_format_info): Warn for a wide character string + used as a non-wide format argument. + 2000-09-24 Joseph S. Myers * builtins.def (BUILT_IN_LLABS): Add. diff --git a/gcc/c-common.c b/gcc/c-common.c index d72c45b8152..79fef421f03 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -2040,6 +2040,11 @@ check_format_info (status, info, params) status_warning (status, "format not a string literal, argument types not checked"); return; } + if (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (format_tree))) != char_type_node) + { + status_warning (status, "format is a wide character string"); + return; + } format_chars = TREE_STRING_POINTER (format_tree); format_length = TREE_STRING_LENGTH (format_tree); if (format_length <= 1) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1de5ac8dce1..46ab73ba0aa 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2000-09-24 Joseph S. Myers + + * gcc.dg/c90-printf-1.c: Add test for wide string format. + 2000-09-22 Geoff Keating * gcc.c-torture/compile/20000922-1.c: New file. diff --git a/gcc/testsuite/gcc.dg/c90-printf-1.c b/gcc/testsuite/gcc.dg/c90-printf-1.c index ad8adb0a2f7..4c5a6e36088 100644 --- a/gcc/testsuite/gcc.dg/c90-printf-1.c +++ b/gcc/testsuite/gcc.dg/c90-printf-1.c @@ -243,5 +243,6 @@ foo (int i, int i1, int i2, unsigned int u, double d, char *s, void *p, printf ("%"); /* { dg-warning "trailing" "trailing % warning" } */ printf ("%++d", i); /* { dg-warning "repeated" "repeated flag warning" } */ printf ("%n", cn); /* { dg-warning "constant" "%n with const" } */ + printf ((const char *)L"foo"); /* { dg-warning "wide" "wide string" } */ /* Can we test for the warning for unterminated string formats? */ }