Author: dergachev Date: Wed Aug 28 11:44:35 2019 New Revision: 370245 URL: http://llvm.org/viewvc/llvm-project?rev=370245&view=rev Log: [analyzer] pr43036: Fix support for operator 'sizeof...'.
It was known to be a compile-time constant so it wasn't evaluated during symbolic execution, but it wasn't evaluated as a compile-time constant either. Differential Revision: https://reviews.llvm.org/D66565 Added: cfe/trunk/test/Analysis/sizeofpack.cpp Modified: cfe/trunk/lib/StaticAnalyzer/Core/Environment.cpp Modified: cfe/trunk/lib/StaticAnalyzer/Core/Environment.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/Environment.cpp?rev=370245&r1=370244&r2=370245&view=diff ============================================================================== --- cfe/trunk/lib/StaticAnalyzer/Core/Environment.cpp (original) +++ cfe/trunk/lib/StaticAnalyzer/Core/Environment.cpp Wed Aug 28 11:44:35 2019 @@ -108,6 +108,7 @@ SVal Environment::getSVal(const Environm case Stmt::ObjCStringLiteralClass: case Stmt::StringLiteralClass: case Stmt::TypeTraitExprClass: + case Stmt::SizeOfPackExprClass: // Known constants; defer to SValBuilder. return svalBuilder.getConstantVal(cast<Expr>(S)).getValue(); Added: cfe/trunk/test/Analysis/sizeofpack.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/sizeofpack.cpp?rev=370245&view=auto ============================================================================== --- cfe/trunk/test/Analysis/sizeofpack.cpp (added) +++ cfe/trunk/test/Analysis/sizeofpack.cpp Wed Aug 28 11:44:35 2019 @@ -0,0 +1,15 @@ +// RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ExprInspection \ +// RUN: -verify %s + +typedef __typeof(sizeof(int)) size_t; + +void clang_analyzer_eval(bool); + +template <int... N> size_t foo() { + return sizeof...(N); +} + +void bar() { + clang_analyzer_eval(foo<>() == 0); // expected-warning{{TRUE}} + clang_analyzer_eval(foo<1, 2, 3>() == 3); // expected-warning{{TRUE}} +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits