aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2014-02-19 23:27:40 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2014-02-19 23:27:40 +0100
commitcca615afc0ba4f42c57636c910ffb0d3a5c3a169 (patch)
treeca2875d388e570e95882bcfda1b550dd08df156b /gcc
parent9254148e5b99e09b9f1da76f74a42bed3d88a2dc (diff)
downloadgcc-cca615afc0ba4f42c57636c910ffb0d3a5c3a169.zip
gcc-cca615afc0ba4f42c57636c910ffb0d3a5c3a169.tar.gz
gcc-cca615afc0ba4f42c57636c910ffb0d3a5c3a169.tar.bz2
re PR c/37743 (Bogus printf format warning with __builtin_bswap32.)
PR c/37743 * c-common.c (c_common_nodes_and_builtins): When initializing c_uint{16,32,64}_type_node, also set corresponding uint{16,32,64}_type_node to the same value. * g++.dg/ext/builtin-bswap1.C: New test. * c-c++-common/pr37743.c: New test. From-SVN: r207924
Diffstat (limited to 'gcc')
-rw-r--r--gcc/c-family/ChangeLog5
-rw-r--r--gcc/c-family/c-common.c6
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/c-c++-common/pr37743.c13
-rw-r--r--gcc/testsuite/g++.dg/ext/builtin-bswap1.C22
5 files changed, 49 insertions, 3 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index 972be93..2bb5935 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,5 +1,10 @@
2014-02-19 Jakub Jelinek <jakub@redhat.com>
+ PR c/37743
+ * c-common.c (c_common_nodes_and_builtins): When initializing
+ c_uint{16,32,64}_type_node, also set corresponding
+ uint{16,32,64}_type_node to the same value.
+
PR c++/60267
* c-pragma.c (init_pragma): Don't call cpp_register_deferred_pragma
for PRAGMA_IVDEP if flag_preprocess_only.
diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c
index bfc5797..e23a9df 100644
--- a/gcc/c-family/c-common.c
+++ b/gcc/c-family/c-common.c
@@ -5610,13 +5610,13 @@ c_common_nodes_and_builtins (void)
uint8_type_node =
TREE_TYPE (identifier_global_value (c_get_ident (UINT8_TYPE)));
if (UINT16_TYPE)
- c_uint16_type_node =
+ c_uint16_type_node = uint16_type_node =
TREE_TYPE (identifier_global_value (c_get_ident (UINT16_TYPE)));
if (UINT32_TYPE)
- c_uint32_type_node =
+ c_uint32_type_node = uint32_type_node =
TREE_TYPE (identifier_global_value (c_get_ident (UINT32_TYPE)));
if (UINT64_TYPE)
- c_uint64_type_node =
+ c_uint64_type_node = uint64_type_node =
TREE_TYPE (identifier_global_value (c_get_ident (UINT64_TYPE)));
if (INT_LEAST8_TYPE)
int_least8_type_node =
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ad6194f..fd796d7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2014-02-19 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/37743
+ * g++.dg/ext/builtin-bswap1.C: New test.
+ * c-c++-common/pr37743.c: New test.
+
2014-02-19 Prathamesh Kulkarni <bilbotheelffriend@gmail.com>
* gcc.dg/decl-10.c: New test.
diff --git a/gcc/testsuite/c-c++-common/pr37743.c b/gcc/testsuite/c-c++-common/pr37743.c
new file mode 100644
index 0000000..2ea678e
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr37743.c
@@ -0,0 +1,13 @@
+/* PR c/37743 */
+/* This needs to be run only on targets where __UINT32_TYPE__ is defined
+ to unsigned int. */
+/* { dg-do compile { target *-*-linux-gnu* } } */
+/* { dg-options "-Wformat" } */
+
+int foo (const char *, ...) __attribute__ ((format (printf, 1, 2)));
+
+void
+bar (unsigned int x)
+{
+ foo ("%x", __builtin_bswap32 (x));
+}
diff --git a/gcc/testsuite/g++.dg/ext/builtin-bswap1.C b/gcc/testsuite/g++.dg/ext/builtin-bswap1.C
new file mode 100644
index 0000000..787ecba
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ext/builtin-bswap1.C
@@ -0,0 +1,22 @@
+// PR c/37743
+// { dg-do compile }
+
+#if defined(__UINT32_TYPE__) && defined(__INT32_TYPE__)
+
+void foo (__UINT32_TYPE__);
+void foo (__INT32_TYPE__);
+
+void
+bar (__UINT32_TYPE__ x)
+{
+ foo (__builtin_bswap32 (x));
+}
+
+#else
+
+void
+bar ()
+{
+}
+
+#endif