// RUN: %clang_cc1 -fsyntax-only -Wuninitialized -fsyntax-only -fblocks %s -verify

#include <stdarg.h>

@interface NSObject {} @end
@class NSString;

@interface NSException
+ (void)raise:(NSString *)name format:(NSString *)format, ...;
+ (void)raise:(NSString *)name format:(NSString *)format arguments:(va_list)argList;
- (void)raise;
@end

// Duplicated from uninit-variables.c.
// Test just to ensure the analysis is working.
int test1() {
  int x; // expected-note{{initialize the variable 'x' to silence this warning}}
  return x; // expected-warning{{variable 'x' is uninitialized when used here}}
}

// Test ObjC fast enumeration.
void test2() {
  id collection = 0;
  for (id obj in collection) {
    if (0 == obj) // no-warning
      break;
  }
}

void test3() {
  id collection = 0;
  id obj;
  for (obj in collection) { // no-warning
    if (0 == obj) // no-warning
      break;
  }
}

int test_abort_on_exceptions(int y, NSException *e, NSString *s, int *z, ...) {
  int x; // expected-note {{initialize the variable 'x' to silence this warning}}
  if (y == 1) {
    va_list alist;
    va_start(alist, z);
    [NSException raise:@"Blah" format:@"Blah %@" arguments:alist];
    return x;
  }
  else if (y == 2) {
	[NSException raise:@"Blah" format:s];
	return x;  
  }
  else if (y == 3) {
	[e raise];
	return x;
  }
  return x; // expected-warning {{variable 'x' is uninitialized when used here}}
}
