forked from OSchip/llvm-project
[analyzer] Fix assertion in SVals.h
Fix assertion in SVals.h apparently caused by https://reviews.llvm.org/D89055. clang:clang/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h:596: clang::ento::loc::MemRegionVal::MemRegionVal(const clang::ento::MemRegion *): Assertion `r' failed. Backtrace: ... clang/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h:597:3 clang::QualType, clang::QualType) clang/lib/StaticAnalyzer/Core/SValBuilder.cpp:773:18 clang::QualType, clang::QualType) clang/lib/StaticAnalyzer/Core/SValBuilder.cpp:612:12 clang::QualType) clang/lib/StaticAnalyzer/Core/SValBuilder.cpp:587:12 namespace)::RegionBindingsRef const&, clang::ento::Loc, clang::QualType) clang/lib/StaticAnalyzer/Core/RegionStore.cpp:1510:24 ... Reviewed By: ASDenysPetrov Differential Revision: https://reviews.llvm.org/D101635
This commit is contained in:
parent
62e9c7601a
commit
a27af1d816
|
@ -761,8 +761,8 @@ SVal SValBuilder::evalCastSubKind(loc::MemRegionVal V, QualType CastTy,
|
|||
// Next fixes pointer dereference using type different from its initial
|
||||
// one. See PR37503 and PR49007 for details.
|
||||
if (const auto *ER = dyn_cast<ElementRegion>(R)) {
|
||||
R = StateMgr.getStoreManager().castRegion(ER, CastTy);
|
||||
return loc::MemRegionVal(R);
|
||||
if ((R = StateMgr.getStoreManager().castRegion(ER, CastTy)))
|
||||
return loc::MemRegionVal(R);
|
||||
}
|
||||
|
||||
return V;
|
||||
|
|
|
@ -250,3 +250,19 @@ void no_crash_reinterpret_char_as_uchar(char ***a, int *b) {
|
|||
if (**a == 0) // no-crash
|
||||
;
|
||||
}
|
||||
|
||||
// See PR50179.
|
||||
// Just don't crash.
|
||||
typedef struct taskS {
|
||||
void *pJob;
|
||||
} taskS;
|
||||
|
||||
typedef struct workS {
|
||||
taskS *pTaskList;
|
||||
} workS;
|
||||
|
||||
void *getTaskJob(unsigned jobId, workS *pWork, unsigned taskId) {
|
||||
const taskS *pTask = pWork->pTaskList + taskId;
|
||||
taskS task = *pTask;
|
||||
return task.pJob;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue