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