r370245 - [analyzer] pr43036: Fix support for operator 'sizeof...'.
Artem Dergachev via cfe-commits
cfe-commits at lists.llvm.org
Wed Aug 28 11:44:35 PDT 2019
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}}
+}
More information about the cfe-commits
mailing list