diff options
Diffstat (limited to 'clang/lib/StaticAnalyzer/Core/RegionStore.cpp')
-rw-r--r-- | clang/lib/StaticAnalyzer/Core/RegionStore.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/RegionStore.cpp b/clang/lib/StaticAnalyzer/Core/RegionStore.cpp index 557a89e6267..be4b5aa9189 100644 --- a/clang/lib/StaticAnalyzer/Core/RegionStore.cpp +++ b/clang/lib/StaticAnalyzer/Core/RegionStore.cpp @@ -1711,13 +1711,15 @@ SVal RegionStoreManager::getBindingForField(RegionBindingsConstRef B, if (const auto *VR = dyn_cast<VarRegion>(superR)) { const VarDecl *VD = VR->getDecl(); QualType RecordVarTy = VD->getType(); + unsigned Index = FD->getFieldIndex(); // Either the record variable or the field has to be const qualified. if (RecordVarTy.isConstQualified() || Ty.isConstQualified()) if (const Expr *Init = VD->getInit()) if (const auto *InitList = dyn_cast<InitListExpr>(Init)) - if (const Expr *FieldInit = InitList->getInit(FD->getFieldIndex())) - if (Optional<SVal> V = svalBuilder.getConstantVal(FieldInit)) - return *V; + if (Index < InitList->getNumInits()) + if (const Expr *FieldInit = InitList->getInit(Index)) + if (Optional<SVal> V = svalBuilder.getConstantVal(FieldInit)) + return *V; } return getBindingForFieldOrElementCommon(B, R, Ty); |