summaryrefslogtreecommitdiffstats
path: root/clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp')
-rw-r--r--clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp20
1 files changed, 10 insertions, 10 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp
index c2f4b053fdd..876aebb477c 100644
--- a/clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp
@@ -136,7 +136,7 @@ void UninitializedObjectChecker::checkEndFunction(
if (!Object)
return;
- FindUninitializedFields F(Context.getState(), Object->getRegion(), IsPedantic,
+ FindUninitializedFields F(Context.getState(), Object->getRegion(),
CheckPointeeInitialization);
const UninitFieldMap &UninitFields = F.getUninitFields();
@@ -144,6 +144,12 @@ void UninitializedObjectChecker::checkEndFunction(
if (UninitFields.empty())
return;
+ // In non-pedantic mode, if Object's region doesn't contain a single
+ // initialized field, we'll assume that Object was intentionally left
+ // uninitialized.
+ if (!IsPedantic && !F.isAnyFieldInitialized())
+ return;
+
// There are uninitialized fields in the record.
ExplodedNode *Node = Context.generateNonFatalErrorNode(Context.getState());
@@ -192,18 +198,12 @@ void UninitializedObjectChecker::checkEndFunction(
//===----------------------------------------------------------------------===//
FindUninitializedFields::FindUninitializedFields(
- ProgramStateRef State, const TypedValueRegion *const R, bool IsPedantic,
+ ProgramStateRef State, const TypedValueRegion *const R,
bool CheckPointeeInitialization)
- : State(State), ObjectR(R), IsPedantic(IsPedantic),
- CheckPointeeInitialization(CheckPointeeInitialization) {}
+ : State(State), ObjectR(R),
+ CheckPointeeInitialization(CheckPointeeInitialization) {
-const UninitFieldMap &FindUninitializedFields::getUninitFields() {
isNonUnionUninit(ObjectR, FieldChainInfo(ChainFactory));
-
- if (!IsPedantic && !IsAnyFieldInitialized)
- UninitFields.clear();
-
- return UninitFields;
}
bool FindUninitializedFields::addFieldToUninits(FieldChainInfo Chain) {
OpenPOWER on IntegriCloud