r288914 - [analyzer] pr31226: Disable CastSizeChecker in C++ because it's not quite ready.
Artem Dergachev via cfe-commits
cfe-commits at lists.llvm.org
Wed Dec 7 08:12:27 PST 2016
Author: dergachev
Date: Wed Dec 7 10:12:26 2016
New Revision: 288914
URL: http://llvm.org/viewvc/llvm-project?rev=288914&view=rev
Log:
[analyzer] pr31226: Disable CastSizeChecker in C++ because it's not quite ready.
Avoids a crash and a related false positive.
Investigation by Daniel Krupp!
Modified:
cfe/trunk/lib/StaticAnalyzer/Checkers/CastSizeChecker.cpp
cfe/trunk/test/Analysis/malloc.cpp
Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/CastSizeChecker.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/CastSizeChecker.cpp?rev=288914&r1=288913&r2=288914&view=diff
==============================================================================
--- cfe/trunk/lib/StaticAnalyzer/Checkers/CastSizeChecker.cpp (original)
+++ cfe/trunk/lib/StaticAnalyzer/Checkers/CastSizeChecker.cpp Wed Dec 7 10:12:26 2016
@@ -140,5 +140,10 @@ void CastSizeChecker::checkPreStmt(const
}
void ento::registerCastSizeChecker(CheckerManager &mgr) {
- mgr.registerChecker<CastSizeChecker>();
+ // PR31226: C++ is more complicated than what this checker currently supports.
+ // There are derived-to-base casts, there are different rules for 0-size
+ // structures, no flexible arrays, etc.
+ // FIXME: Disabled on C++ for now.
+ if (!mgr.getLangOpts().CPlusPlus)
+ mgr.registerChecker<CastSizeChecker>();
}
Modified: cfe/trunk/test/Analysis/malloc.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/malloc.cpp?rev=288914&r1=288913&r2=288914&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/malloc.cpp (original)
+++ cfe/trunk/test/Analysis/malloc.cpp Wed Dec 7 10:12:26 2016
@@ -1,4 +1,5 @@
-// RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.deadcode.UnreachableCode,alpha.core.CastSize,unix.Malloc -analyzer-store=region -verify %s
+// RUN: %clang_cc1 -w -analyze -analyzer-checker=core,alpha.deadcode.UnreachableCode,alpha.core.CastSize,unix.Malloc,cplusplus.NewDelete -analyzer-store=region -verify %s
+// RUN: %clang_cc1 -triple i386-unknown-linux-gnu -w -analyze -analyzer-checker=core,alpha.deadcode.UnreachableCode,alpha.core.CastSize,unix.Malloc,cplusplus.NewDelete -analyzer-store=region -verify %s
typedef __typeof(sizeof(int)) size_t;
void *malloc(size_t);
@@ -105,4 +106,22 @@ void appendWrapperNested(char *getterNam
void fooNested(const char* name) {
char* getterName = strdup(name);
appendWrapperNested(getterName); // no-warning
-}
\ No newline at end of file
+}
+
+namespace PR31226 {
+ struct b2 {
+ int f;
+ };
+
+ struct b1 : virtual b2 {
+ void m();
+ };
+
+ struct d : b1, b2 {
+ };
+
+ void f() {
+ d *p = new d();
+ p->m(); // no-crash // no-warning
+ }
+}
More information about the cfe-commits
mailing list