xref: /llvm-project/clang/test/Analysis/objcpp-uninitialized-object.mm (revision 85e0ff752ca7aa15b7b429d4dbb62d9592570cc5)
1*85e0ff75SKristof Umann// RUN: %clang_analyze_cc1 -analyzer-checker=core,optin.cplusplus.UninitializedObject -std=c++11 -fblocks -verify %s
2cf40ba82SGeorge Karpenkov
3cf40ba82SGeorge Karpenkovtypedef void (^myBlock) ();
4cf40ba82SGeorge Karpenkov
5cf40ba82SGeorge Karpenkovstruct StructWithBlock {
6cf40ba82SGeorge Karpenkov  int a;
7f0dd1016SKristof Umann  myBlock z; // expected-note{{uninitialized field 'this->z'}}
8cf40ba82SGeorge Karpenkov
9cf40ba82SGeorge Karpenkov  StructWithBlock() : a(0), z(^{}) {}
10cf40ba82SGeorge Karpenkov
11cf40ba82SGeorge Karpenkov  // Miss initialization of field `z`.
12cf40ba82SGeorge Karpenkov  StructWithBlock(int pA) : a(pA) {} // expected-warning{{1 uninitialized field at the end of the constructor call}}
13cf40ba82SGeorge Karpenkov
14cf40ba82SGeorge Karpenkov};
15cf40ba82SGeorge Karpenkov
16cf40ba82SGeorge Karpenkovvoid warnOnUninitializedBlock() {
17cf40ba82SGeorge Karpenkov  StructWithBlock a(10);
18cf40ba82SGeorge Karpenkov}
19cf40ba82SGeorge Karpenkov
20cf40ba82SGeorge Karpenkovvoid noWarningWhenInitialized() {
21cf40ba82SGeorge Karpenkov  StructWithBlock a;
22cf40ba82SGeorge Karpenkov}
23e3b1d962SGeorge Karpenkov
24e3b1d962SGeorge Karpenkovstruct StructWithId {
25e3b1d962SGeorge Karpenkov  int a;
26e3b1d962SGeorge Karpenkov  id z; // expected-note{{uninitialized pointer 'this->z'}}
27e3b1d962SGeorge Karpenkov  StructWithId() : a(0) {} // expected-warning{{1 uninitialized field at the end of the constructor call}}
28e3b1d962SGeorge Karpenkov};
29e3b1d962SGeorge Karpenkov
30e3b1d962SGeorge Karpenkovvoid warnOnUninitializedId() {
31e3b1d962SGeorge Karpenkov  StructWithId s;
32e3b1d962SGeorge Karpenkov}
33