/* In this snippet, there was a missed subc case:
	tst	#1,r0
	movt	r0
	neg	r0,r0

   which should be:
	tst	#1,r0
	subc	r0,r0
*/

/* { dg-do compile }  */
/* { dg-options "-O2 -fno-tree-forwprop" }  */

/* { dg-final { scan-assembler-times {tst	#1,r0} 1 } }  */
/* { dg-final { scan-assembler-times {subc	r} 1 } }  */

/* { dg-final { scan-assembler-not "movt|not\t|neg\t|movrt" } }  */


struct inode
{
  unsigned int i_gid;
};

struct iattr
{
  unsigned int ia_valid;
  unsigned int ia_gid;
};

struct task_struct
{
  unsigned long flags;
  unsigned int cap_effective;
};

extern int in_group_p (unsigned int);

static inline struct task_struct*
get_current (void)
{
  struct task_struct *current;
  return current;
}

static inline int
capable (int cap)
{
  if (((get_current()->cap_effective) & (1 << (cap))))
    {
      get_current()->flags |= 0x00000100;
      return 1;
    }
  return 0;
}

int
inode_change_ok (struct inode *inode, struct iattr *attr)
{
  int retval = -1;
  unsigned int ia_valid = attr->ia_valid;

  if (ia_valid & 512)
    goto fine;

  if ((ia_valid & 4)
      && (!in_group_p(attr->ia_gid) && attr->ia_gid != inode->i_gid)
      && !capable(0))
    goto error;

fine:
 retval = 0;
error:
 return retval;
}
