/* APPLE LOCAL file mainline */
/* Check that local variables that get modified inside the @try
   block survive until the @catch block is reached.  */
/* Developed by Ziemowit Laski <zlaski@apple.com>.  */

/* { dg-options "-fobjc-exceptions -O2" } */
/* { dg-do run } */

/* APPLE LOCAL radar 4894756 */
#include "../objc/execute/Object2.h"
#include <stdlib.h>
#include <stdio.h>

int gi1 = 9, gi2 = 19;
float gf1 = 9.0, gf2 = 19.0;
id obj2 = nil;

void foo (int arg1, float *arg2)
{
  int *pi = &gi1;
  float *pf = &gf1;
  id obj1 = nil;
  int local1 = 45, local2 = 47;
  float local3 = 3.0, local4 = 4.0;
  register int local5 = 15;
  static float local6 = 16.0;

  @try {
    local1 = 123;
    local2 = 345;
    local3 = 5.0;
    local4 = 6.0;
    local5 = 17;
    local6 = 18.0;
    pi = &gi2;
    pf = &gf2;
    obj2 = obj1 = [Object new];
    arg1 = 17;
    arg2 = &gf2;
    
    @throw [Object new];
  }
  @catch (Object *obj) {
   if(local1 != 123 || local2 != 345 || local3 != 5.0 || local4 != 6.0 || local5 != 17 || local6 != 18.0) {
     printf("Abort 1\n");
     abort();
   }
   if(pi != &gi2 || pf != &gf2) {
     printf("Abort 2\n");
     abort();
   }
   if(!obj1 || obj1 != obj2) {
     printf("Abort 3\n");
     abort();
   }
   if(arg1 != 17 || arg2 != &gf2) {
     printf("Abort 4\n");
     abort();
   }
  }
}

int main(void) {
  foo(15, &gf1);
  return 0;
}
