]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Properly cast integer constant char.
authorhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 25 Nov 2010 13:47:42 +0000 (13:47 +0000)
committerhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 25 Nov 2010 13:47:42 +0000 (13:47 +0000)
gcc/

2010-11-25  H.J. Lu  <hongjiu.lu@intel.com>

PR middle-end/46647
* builtins.c (target_char_cast): Check INTEGER_CST instead of
host_integerp.  Replace tree_low_cst with TREE_INT_CST_LOW.

gcc/testsuite/

2010-11-25  H.J. Lu  <hongjiu.lu@intel.com>

PR middle-end/46647
* gcc.target/i386/pr46647.c: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@167146 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/builtins.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr46647.c [new file with mode: 0644]

index 8c5473b4f88a3a8d3167a97799867d65fe45b029..57536cd907caf173f18f765bf643a9c5939f7b12 100644 (file)
@@ -1,3 +1,9 @@
+2010-11-25  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR middle-end/46647
+       * builtins.c (target_char_cast): Check INTEGER_CST instead of
+       host_integerp.  Replace tree_low_cst with TREE_INT_CST_LOW.
+
 2010-11-25  Joseph Myers  <joseph@codesourcery.com>
 
        * target.def (supports_split_stack, except_unwind_info): Take
index c9e8e684fc8bb655d10d21419b432aa98a865c05..a90bf2fb8f5ee904dfb84fc244c43e68d43b1e58 100644 (file)
@@ -630,11 +630,11 @@ target_char_cast (tree cst, char *p)
 {
   unsigned HOST_WIDE_INT val, hostval;
 
-  if (!host_integerp (cst, 1)
+  if (TREE_CODE (cst) != INTEGER_CST
       || CHAR_TYPE_SIZE > HOST_BITS_PER_WIDE_INT)
     return 1;
 
-  val = tree_low_cst (cst, 1);
+  val = TREE_INT_CST_LOW (cst);
   if (CHAR_TYPE_SIZE < HOST_BITS_PER_WIDE_INT)
     val &= (((unsigned HOST_WIDE_INT) 1) << CHAR_TYPE_SIZE) - 1;
 
index 4dc1eeee11f758bc54f8fd9613e3a8fd166358db..2253a94f0df6b22b77982f602a67eb717672f9d6 100644 (file)
@@ -1,3 +1,8 @@
+2010-11-25  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR middle-end/46647
+       * gcc.target/i386/pr46647.c: New.
+
 2010-11-25  Kai Tietz  <kai.tietz@onevision.com>
 
        * gcc.dg/dll-8.c: New.
diff --git a/gcc/testsuite/gcc.target/i386/pr46647.c b/gcc/testsuite/gcc.target/i386/pr46647.c
new file mode 100644 (file)
index 0000000..c7e1542
--- /dev/null
@@ -0,0 +1,44 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -mtune=generic" } */
+
+char a[5];
+int
+func1 (void)
+{
+  __builtin_memset (a,-1,sizeof (a));
+  return 0;
+}
+
+int a2[5];
+int
+func2 (void)
+{
+  __builtin_memset (a2,-1,sizeof (a2));
+  return 0;
+}
+
+char a3[5];
+int
+func3 (void)
+{
+  __builtin_memset (a3,0x8fffffff,sizeof (a3));
+  return 0;
+}
+
+char a4[5];
+int
+func4 (void)
+{
+  __builtin_memset (a4,0x8fffff00,sizeof (a4));
+  return 0;
+}
+
+int a5[5];
+int
+func5 (void)
+{
+  __builtin_memset (a5,0x8fffffff,sizeof (a5));
+  return 0;
+}
+
+/* { dg-final { scan-assembler-not "call\[\\t \]*_?memset" } } */