1  /* { dg-do compile } */
       2  /* { dg-options "-mcmse" }  */
       3  
       4  int __attribute__ ((cmse_nonsecure_call)) (*bar) (int);
       5  
       6  int
       7  foo (int a)
       8  {
       9    return bar (bar (a + 1));
      10  }
      11  
      12  /* Checks for saving and clearing prior to function call.  */
      13  /* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
      14  /* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
      15  /* { dg-final { scan-assembler "movs\tr1, r4" } } */
      16  /* { dg-final { scan-assembler "movs\tr2, r4" } } */
      17  /* { dg-final { scan-assembler "movs\tr3, r4" } } */
      18  
      19  /* Now we check that we use the correct intrinsic to call.  */
      20  /* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */