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