r361099 - [analyzer] PR41753: Include complex integer types in NonLoc::isCompoundType
Kristof Umann via cfe-commits
cfe-commits at lists.llvm.org
Sat May 18 05:34:08 PDT 2019
Author: szelethus
Date: Sat May 18 05:34:08 2019
New Revision: 361099
URL: http://llvm.org/viewvc/llvm-project?rev=361099&view=rev
Log:
[analyzer] PR41753: Include complex integer types in NonLoc::isCompoundType
https://bugs.llvm.org/show_bug.cgi?id=41753
Differential Revision: https://reviews.llvm.org/D61570
Modified:
cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h
cfe/trunk/test/Analysis/complex.c
cfe/trunk/test/Analysis/cxx-uninitialized-object.cpp
Modified: cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h?rev=361099&r1=361098&r2=361099&view=diff
==============================================================================
--- cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h (original)
+++ cfe/trunk/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h Sat May 18 05:34:08 2019
@@ -303,7 +303,7 @@ public:
static bool isCompoundType(QualType T) {
return T->isArrayType() || T->isRecordType() ||
- T->isComplexType() || T->isVectorType();
+ T->isAnyComplexType() || T->isVectorType();
}
private:
Modified: cfe/trunk/test/Analysis/complex.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/complex.c?rev=361099&r1=361098&r2=361099&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/complex.c (original)
+++ cfe/trunk/test/Analysis/complex.c Sat May 18 05:34:08 2019
@@ -1,9 +1,13 @@
-// RUN: %clang_analyze_cc1 -analyzer-checker=core -analyzer-store=region -verify -Wno-unreachable-code -ffreestanding %s
+// RUN: %clang_analyze_cc1 -verify %s \
+// RUN: -Wno-unreachable-code -ffreestanding \
+// RUN: -analyzer-checker=core \
+// RUN: -analyzer-checker=debug.ExprInspection
#include <stdint.h>
+int clang_analyzer_eval(int);
+
void f1(int * p) {
-
// This branch should be infeasible
// because __imag__ p is 0.
if (!p && __imag__ (intptr_t) p)
@@ -15,3 +19,25 @@ void f1(int * p) {
*p = 2; // expected-warning{{Dereference of null pointer}}
}
+
+void complexFloat(__complex__ float f) {
+ clang_analyzer_eval(__real__(f) == 1); // expected-warning{{UNKNOWN}}
+ clang_analyzer_eval(__imag__(f) == 1); // expected-warning{{UNKNOWN}}
+
+ __real__(f) = 1;
+ __imag__(f) = 1;
+
+ clang_analyzer_eval(__real__(f) == 1); // expected-warning{{UNKNOWN}}
+ clang_analyzer_eval(__imag__(f) == 1); // expected-warning{{UNKNOWN}}
+}
+
+void complexInt(__complex__ int f) {
+ clang_analyzer_eval(__real__(f) == 1); // expected-warning{{UNKNOWN}}
+ clang_analyzer_eval(__imag__(f) == 1); // expected-warning{{UNKNOWN}}
+
+ __real__(f) = 1;
+ __imag__(f) = 1;
+
+ clang_analyzer_eval(__real__(f) == 1); // expected-warning{{UNKNOWN}}
+ clang_analyzer_eval(__imag__(f) == 1); // expected-warning{{UNKNOWN}}
+}
Modified: cfe/trunk/test/Analysis/cxx-uninitialized-object.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/cxx-uninitialized-object.cpp?rev=361099&r1=361098&r2=361099&view=diff
==============================================================================
--- cfe/trunk/test/Analysis/cxx-uninitialized-object.cpp (original)
+++ cfe/trunk/test/Analysis/cxx-uninitialized-object.cpp Sat May 18 05:34:08 2019
@@ -1167,20 +1167,17 @@ struct ComplexUninitTest {
__complex__ int y;
};
-// FIXME: Currently this causes (unrelated to this checker) an assertion
-// failure.
-//
-//struct ComplexInitTest {
-// ComplexInitTest() {
-// x = {1.0f, 1.0f};
-// y = {1, 1};
-// }
-// __complex__ float x;
-// __complex__ int y;
-//};
+struct ComplexInitTest {
+ ComplexInitTest() {
+ x = {1.0f, 1.0f};
+ y = {1, 1};
+ }
+ __complex__ float x;
+ __complex__ int y;
+};
void fComplexTest() {
-// ComplexInitTest x;
+ ComplexInitTest x;
// TODO: we should emit a warning for x2.x and x2.y.
ComplexUninitTest x2;
More information about the cfe-commits
mailing list