(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
sh/
pr54236-6.c
       1  /* In this snippet, there was a missed subc case:
       2  	tst	#1,r0
       3  	movt	r0
       4  	neg	r0,r0
       5  
       6     which should be:
       7  	tst	#1,r0
       8  	subc	r0,r0
       9  */
      10  
      11  /* { dg-do compile }  */
      12  /* { dg-options "-O2 -fno-tree-forwprop" }  */
      13  
      14  /* { dg-final { scan-assembler-times {tst	#1,r0} 1 } }  */
      15  /* { dg-final { scan-assembler-times {subc	r} 1 } }  */
      16  
      17  /* { dg-final { scan-assembler-not "movt|not\t|neg\t|movrt" } }  */
      18  
      19  
      20  struct inode
      21  {
      22    unsigned int i_gid;
      23  };
      24  
      25  struct iattr
      26  {
      27    unsigned int ia_valid;
      28    unsigned int ia_gid;
      29  };
      30  
      31  struct task_struct
      32  {
      33    unsigned long flags;
      34    unsigned int cap_effective;
      35  };
      36  
      37  extern int in_group_p (unsigned int);
      38  
      39  static inline struct task_struct*
      40  get_current (void)
      41  {
      42    struct task_struct *current;
      43    return current;
      44  }
      45  
      46  static inline int
      47  capable (int cap)
      48  {
      49    if (((get_current()->cap_effective) & (1 << (cap))))
      50      {
      51        get_current()->flags |= 0x00000100;
      52        return 1;
      53      }
      54    return 0;
      55  }
      56  
      57  int
      58  inode_change_ok (struct inode *inode, struct iattr *attr)
      59  {
      60    int retval = -1;
      61    unsigned int ia_valid = attr->ia_valid;
      62  
      63    if (ia_valid & 512)
      64      goto fine;
      65  
      66    if ((ia_valid & 4)
      67        && (!in_group_p(attr->ia_gid) && attr->ia_gid != inode->i_gid)
      68        && !capable(0))
      69      goto error;
      70  
      71  fine:
      72   retval = 0;
      73  error:
      74   return retval;
      75  }