1  /* { dg-require-effective-target indirect_jumps } */
       2  
       3  #include "test-setjmp.h"
       4  #include <stddef.h>
       5  #include <stdlib.h>
       6  
       7  extern int foo (int) __attribute__ ((__pure__));
       8  
       9  static jmp_buf env;
      10  
      11  static void inner (void)
      12  {
      13    longjmp (env, 1); /* { dg-warning "leak of 'ptr'" } */
      14  }
      15  
      16  static void middle (void)
      17  {
      18    void *ptr = malloc (1024); /* { dg-message "allocated here" }  */
      19    inner ();
      20    free (ptr);
      21  }
      22  
      23  void outer (void)
      24  {
      25    int i;
      26  
      27    foo (0);
      28  
      29    i = SETJMP(env);
      30  
      31    if (i == 0)
      32      {
      33        foo (1);
      34        middle ();
      35      }
      36  
      37    foo (3);
      38  }