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 + } +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits