// RUN: %clang -fexceptions -fobjc-exceptions -S -emit-llvm  %s -o /dev/null

@interface Object {
@public
     Class isa;
}
+initialize;
+alloc;
+new;
+free;
-free;
+(Class)class;
-(Class)class;
-init;
-superclass;
-(const char *)name;
@end

@interface Frob: Object
@end

@implementation Frob: Object
@end

static Frob* _connection = ((void *)0);

extern void abort(void);

void test (Object* sendPort)
{
 int cleanupPorts = 1;
 Frob* receivePort = ((void *)0);

 @try {
  receivePort = (Frob *) -1;
  _connection = (Frob *) -1;
  receivePort = ((void *)0);
  sendPort = ((void *)0);
  cleanupPorts = 0;
  @throw [Object new];
 }
 @catch(Frob *obj) {
  if(!(0)) abort();
 }
 @catch(id exc) {
  if(!(!receivePort)) abort();
  if(!(!sendPort)) abort();
  if(!(!cleanupPorts)) abort();
 }
}
