diff options
author | George Karpenkov <ekarpenkov@apple.com> | 2018-02-27 19:28:52 +0000 |
---|---|---|
committer | George Karpenkov <ekarpenkov@apple.com> | 2018-02-27 19:28:52 +0000 |
commit | 53c1c10bebf401c2a1e5492725b56ba91cc62477 (patch) | |
tree | 02dc9d8ff3456d17e7e2641223b461d057b165cc | |
parent | fc0d02cbbfaaa91bf09666bffb2c2f64342bdd07 (diff) | |
download | bcm5719-llvm-53c1c10bebf401c2a1e5492725b56ba91cc62477.tar.gz bcm5719-llvm-53c1c10bebf401c2a1e5492725b56ba91cc62477.zip |
[analyzer] Only attempt to get the value of locations of known type
Fixes https://bugs.llvm.org/show_bug.cgi?id=36474
In general, getSVal API should be changed so that it does not crash on
some non-obvious conditions.
It should either be updated to require a type, or to return Optional<SVal>.
Differential Revision: https://reviews.llvm.org/D43801
llvm-svn: 326233
-rw-r--r-- | clang/lib/StaticAnalyzer/Checkers/NonnullGlobalConstantsChecker.cpp | 2 | ||||
-rw-r--r-- | clang/test/Analysis/novoidtypecrash.c | 8 |
2 files changed, 9 insertions, 1 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/NonnullGlobalConstantsChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/NonnullGlobalConstantsChecker.cpp index 0b4ecb41d20..f65e1d022ed 100644 --- a/clang/lib/StaticAnalyzer/Checkers/NonnullGlobalConstantsChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/NonnullGlobalConstantsChecker.cpp @@ -73,9 +73,9 @@ void NonnullGlobalConstantsChecker::checkLocation(SVal location, bool isLoad, return; ProgramStateRef State = C.getState(); - SVal V = State->getSVal(location.castAs<Loc>()); if (isGlobalConstString(location)) { + SVal V = State->getSVal(location.castAs<Loc>()); Optional<DefinedOrUnknownSVal> Constr = V.getAs<DefinedOrUnknownSVal>(); if (Constr) { diff --git a/clang/test/Analysis/novoidtypecrash.c b/clang/test/Analysis/novoidtypecrash.c new file mode 100644 index 00000000000..c04cfca29b4 --- /dev/null +++ b/clang/test/Analysis/novoidtypecrash.c @@ -0,0 +1,8 @@ +// RUN: %clang_analyze_cc1 -analyzer-checker=core %s +a; +b(void **c) { // no-crash + *c = a; + int *d; + b(&d); + *d; +} |