@@ -136,14 +136,20 @@ void UninitializedObjectChecker::checkEndFunction(
136
136
if (!Object)
137
137
return ;
138
138
139
- FindUninitializedFields F (Context.getState (), Object->getRegion (), IsPedantic,
139
+ FindUninitializedFields F (Context.getState (), Object->getRegion (),
140
140
CheckPointeeInitialization);
141
141
142
142
const UninitFieldMap &UninitFields = F.getUninitFields ();
143
143
144
144
if (UninitFields.empty ())
145
145
return ;
146
146
147
+ // In non-pedantic mode, if Object's region doesn't contain a single
148
+ // initialized field, we'll assume that Object was intentionally left
149
+ // uninitialized.
150
+ if (!IsPedantic && !F.isAnyFieldInitialized ())
151
+ return ;
152
+
147
153
// There are uninitialized fields in the record.
148
154
149
155
ExplodedNode *Node = Context.generateNonFatalErrorNode (Context.getState ());
@@ -192,18 +198,12 @@ void UninitializedObjectChecker::checkEndFunction(
192
198
// ===----------------------------------------------------------------------===//
193
199
194
200
FindUninitializedFields::FindUninitializedFields (
195
- ProgramStateRef State, const TypedValueRegion *const R, bool IsPedantic,
201
+ ProgramStateRef State, const TypedValueRegion *const R,
196
202
bool CheckPointeeInitialization)
197
- : State(State), ObjectR(R), IsPedantic(IsPedantic),
198
- CheckPointeeInitialization(CheckPointeeInitialization) {}
203
+ : State(State), ObjectR(R),
204
+ CheckPointeeInitialization(CheckPointeeInitialization) {
199
205
200
- const UninitFieldMap &FindUninitializedFields::getUninitFields () {
201
206
isNonUnionUninit (ObjectR, FieldChainInfo (ChainFactory));
202
-
203
- if (!IsPedantic && !IsAnyFieldInitialized)
204
- UninitFields.clear ();
205
-
206
- return UninitFields;
207
207
}
208
208
209
209
bool FindUninitializedFields::addFieldToUninits (FieldChainInfo Chain) {
0 commit comments