blob: 93bfeb36951ff9dfaccaadb59a1d533069749e59 [file] [log] [blame]
/* 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;
}