aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorKaveh R. Ghazi <ghazi@caip.rutgers.edu>2005-11-29 05:17:20 +0000
committerKaveh Ghazi <ghazi@gcc.gnu.org>2005-11-29 05:17:20 +0000
commit000ba23d0465bedacdce9c33274da8b498c2222c (patch)
tree06742bbf23f884a91f39fba3c642b62451a1d03a /gcc/testsuite
parent8fdb0857e96aee3af730b7d12be80cb50aabb24d (diff)
downloadgcc-000ba23d0465bedacdce9c33274da8b498c2222c.zip
gcc-000ba23d0465bedacdce9c33274da8b498c2222c.tar.gz
gcc-000ba23d0465bedacdce9c33274da8b498c2222c.tar.bz2
re PR middle-end/20109 (printf optimizations and non-ASCII character sets)
PR middle-end/20109 PR middle-end/25120 * builtins.c (init_target_chars): New. (expand_builtin_printf, expand_builtin_fprintf, expand_builtin_sprintf, fold_builtin_sprintf, maybe_emit_sprintf_chk_warning, fold_builtin_sprintf_chk, fold_builtin_snprintf_chk, fold_builtin_printf, fold_builtin_fprintf): Check for matching format strings using the target charset. testsuite: * gcc.dg/charset/builtin2.c: New test. From-SVN: r107652
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.dg/charset/builtin2.c32
2 files changed, 36 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5a6f240..fc737a8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2005-11-29 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * gcc.dg/charset/builtin2.c: New test.
+
2005-11-28 Jakub Jelinek <jakub@redhat.com>
* gcc.dg/compat/struct-layout-1_generate.c: Add -w option
diff --git a/gcc/testsuite/gcc.dg/charset/builtin2.c b/gcc/testsuite/gcc.dg/charset/builtin2.c
new file mode 100644
index 0000000..bfe9a20
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/charset/builtin2.c
@@ -0,0 +1,32 @@
+/* Ensure that transformations of *printf are performed correctly
+ regardless of -fexec-charset. See PR 25120. */
+
+/* { dg-do compile } */
+/* { dg-require-iconv "IBM1047" } */
+/* { dg-options "-O2 -fexec-charset=IBM1047" } */
+/* { dg-final { scan-assembler-not "printf" } } */
+/* { dg-final { scan-assembler-not "fprintf" } } */
+/* { dg-final { scan-assembler-not "sprintf" } } */
+
+#include <stdio.h>
+
+void foo (char *dst, const char *src)
+{
+ printf ("\n");
+ printf ("hello world\n");
+ printf ("%s", "\n");
+ printf ("%s", "hello world\n");
+ printf ("%c", '\n');
+ printf ("%s\n", "hello world");
+ printf ("%s\n", src);
+
+ fprintf (stdout, "\n");
+ fprintf (stdout, "hello world\n");
+ fprintf (stdout, "%s", "\n");
+ fprintf (stdout, "%s", "hello world\n");
+ fprintf (stdout, "%c", '\n');
+ fprintf (stdout, "%s", src);
+
+ sprintf (dst, "hello world\n");
+ sprintf (dst, "%s", src);
+}