/* APPLE LOCAL radar 5028937 */
#include "../Object2.h"
#include <stdio.h>
#include <stdlib.h>

static int made_try = 0;

int
thrower_try_body()
{
  made_try++;
  return (0);
}

static int made_finally = 0;

int
finally_body()
{
  made_finally++;
  return (0);
}

int
thrower()
{
  @try
  {
    thrower_try_body();
    @throw [Object new];
  }
  @finally
  {
    finally_body();
  }     
  return 0;
}

static int made_catch = 0;

int 
main(int ac, char *av[])
{
  @try
  {
    thrower();
  }
  @catch (id exc)
  {
    made_catch++;
    [exc free];
  }
  if (made_try != 1)
    abort ();
  if (made_finally != 1)
    abort ();
  if (made_catch != 1)
    abort ();
  return 0;
}
