File nvl665849.patch of Package gcc43

2011-01-21  Richard Guenther  <rguenther@suse.de>

	* tree-ssa-sccvn.c (visit_copy): Make abnormal SSA names varying.

	* gcc.dg/torture/bnc665849.c: New testcase.

--- gcc/tree-ssa-sccvn.c.orig	2011-01-21 12:51:31.000000000 +0100
+++ gcc/tree-ssa-sccvn.c	2011-01-21 12:52:01.000000000 +0100
@@ -1134,6 +1134,8 @@
 static bool
 visit_copy (tree lhs, tree rhs)
 {
+  if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (lhs))
+    return set_ssa_val_to (lhs, lhs);
 
   /* Follow chains of copies to their destination.  */
   while (SSA_VAL (rhs) != rhs && TREE_CODE (SSA_VAL (rhs)) == SSA_NAME)
--- /dev/null	2009-04-14 12:16:40.000000000 +0200
+++ gcc/testsuite/gcc.dg/torture/bnc665849.c	2011-01-21 12:53:15.000000000 +0100
@@ -0,0 +1,63 @@
+/* { dg-do compile } */
+/* { dg-options "-fpreserve-function-arguments" } */
+
+typedef unsigned int __u32;
+typedef unsigned long u_long;
+typedef unsigned int uint;
+typedef unsigned char __uint8_t;
+typedef unsigned short int __uint16_t;
+typedef unsigned int __uint32_t;
+typedef unsigned long long int __uint64_t;
+typedef __u32 xfs_dev_t;
+typedef __uint32_t xfs_agblock_t;
+typedef __uint32_t xfs_extlen_t;
+typedef struct bhv_desc {
+} bhv_desc_t;
+typedef struct bhv_vfs {
+} cred_t;
+typedef struct bhv_vattr {
+    u_long va_blocksize;
+    xfs_dev_t va_rdev;
+} bhv_vattr_t;
+typedef struct xfs_bufhash {
+    xfs_agblock_t sb_rextsize;
+    __uint8_t sb_blocklog;
+} xfs_sb_t;
+typedef struct xfs_mount {
+    xfs_sb_t m_sb;
+    uint m_writeio_log;
+    __uint64_t m_flags;
+    int m_swidth;
+} xfs_mount_t;
+unsigned long xfs_preferred_iosize(xfs_mount_t *mp)
+{
+  return mp->m_swidth << mp->m_sb.sb_blocklog;
+}
+typedef struct xfs_bmbt_rec_64 {
+    __uint16_t di_mode;
+    xfs_extlen_t di_extsize;
+    __uint16_t di_flags;
+} xfs_dinode_core_t;
+typedef struct dm_attrs_s {
+    struct xfs_mount *i_mount;
+    struct bhv_desc i_bhv_desc;
+    xfs_dinode_core_t i_d;
+} xfs_inode_t;
+xfs_extlen_t xfs_get_extsz_hint (xfs_inode_t *ip)
+{
+  xfs_extlen_t extsz = 0;
+  if (__builtin_expect(!!(ip->i_d.di_flags & (1 << 0)), 0))
+    extsz = ip->i_mount->m_sb.sb_rextsize;
+  return extsz;
+}
+void xfs_getattr(  bhv_desc_t *bdp,  bhv_vattr_t *vap)
+{
+  xfs_inode_t *ip;
+  xfs_mount_t *mp;
+  ip = (xfs_inode_t *)((char *)(bdp)-(char *)&(((xfs_inode_t *)0)->i_bhv_desc));
+  mp = ip->i_mount;
+  if (!(ip->i_d.di_flags & (1 << 0)))
+    vap->va_blocksize = xfs_preferred_iosize(mp);
+  else
+    vap->va_blocksize = xfs_get_extsz_hint(ip) << mp->m_sb.sb_blocklog;
+}
openSUSE Build Service is sponsored by