[analyzer] pr31226: Disable CastSizeChecker in C++ because it's not quite ready.
Avoids a crash and a related false positive. Investigation by Daniel Krupp! llvm-svn: 288914
This commit is contained in:
parent
ff79f31328
commit
d69e01297f
|
@ -140,5 +140,10 @@ void CastSizeChecker::checkPreStmt(const CastExpr *CE,CheckerContext &C) 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>();
|
||||
}
|
||||
|
|
|
@ -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 *getterName) {
|
|||
void fooNested(const char* name) {
|
||||
char* getterName = strdup(name);
|
||||
appendWrapperNested(getterName); // no-warning
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue