• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// RUN: %clang_cc1 -fsyntax-only -Wuninitialized -fsyntax-only -fblocks %s -verify
2
3#include <stdarg.h>
4
5@interface NSObject {} @end
6@class NSString;
7
8@interface NSException
9+ (void)raise:(NSString *)name format:(NSString *)format, ...;
10+ (void)raise:(NSString *)name format:(NSString *)format arguments:(va_list)argList;
11- (void)raise;
12@end
13
14// Duplicated from uninit-variables.c.
15// Test just to ensure the analysis is working.
16int test1() {
17  int x; // expected-note{{initialize the variable 'x' to silence this warning}}
18  return x; // expected-warning{{variable 'x' is uninitialized when used here}}
19}
20
21// Test ObjC fast enumeration.
22void test2() {
23  id collection = 0;
24  for (id obj in collection) {
25    if (0 == obj) // no-warning
26      break;
27  }
28}
29
30void test3() {
31  id collection = 0;
32  id obj;
33  for (obj in collection) { // no-warning
34    if (0 == obj) // no-warning
35      break;
36  }
37}
38
39int test_abort_on_exceptions(int y, NSException *e, NSString *s, int *z, ...) {
40  int x; // expected-note {{initialize the variable 'x' to silence this warning}}
41  if (y == 1) {
42    va_list alist;
43    va_start(alist, z);
44    [NSException raise:@"Blah" format:@"Blah %@" arguments:alist];
45    return x;
46  }
47  else if (y == 2) {
48	[NSException raise:@"Blah" format:s];
49	return x;
50  }
51  else if (y == 3) {
52	[e raise];
53	return x;
54  }
55  return x; // expected-warning {{variable 'x' is uninitialized when used here}}
56}
57