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