Szelethus created this revision. Szelethus added reviewers: NoQ, dcoughlin, baloghadamsoftware, gribozavr, xazax.hun, rnkovacs, Charusso, a_sidorin. Szelethus added a project: clang. Herald added subscribers: cfe-commits, gamesh411, dkrupp, donat.nagy, mikhail.ramalho, a.sidorin, szepet, whisperity.
https://bugs.llvm.org/show_bug.cgi?id=41741 Pretty much the same as D61246 <https://reviews.llvm.org/D61246> and D61106 <https://reviews.llvm.org/D61106>, this time for `__complex__` types. Upon further investigation, I realized that we should regard all types `Type::isScalarType` returns true for as primitive, so I merged `isMemberPointerType(), `isBlockPointerType()` and `isAnyComplexType()` into that instead. I also stumbled across yet another bug, https://bugs.llvm.org/show_bug.cgi?id=41753, but it seems to be unrelated to this checker. Repository: rC Clang https://reviews.llvm.org/D61569 Files: lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h test/Analysis/cxx-uninitialized-object.cpp Index: test/Analysis/cxx-uninitialized-object.cpp =================================================================== --- test/Analysis/cxx-uninitialized-object.cpp +++ test/Analysis/cxx-uninitialized-object.cpp @@ -1,11 +1,15 @@ -// RUN: %clang_analyze_cc1 -analyzer-checker=core,optin.cplusplus.UninitializedObject \ +// RUN: %clang_analyze_cc1 -std=c++14 -verify %s \ +// RUN: -analyzer-checker=core \ +// RUN: -analyzer-checker=optin.cplusplus.UninitializedObject \ // RUN: -analyzer-config optin.cplusplus.UninitializedObject:Pedantic=true -DPEDANTIC \ -// RUN: -analyzer-config optin.cplusplus.UninitializedObject:CheckPointeeInitialization=true \ -// RUN: -std=c++14 -verify %s +// RUN: -analyzer-config \ +// RUN: optin.cplusplus.UninitializedObject:CheckPointeeInitialization=true -// RUN: %clang_analyze_cc1 -analyzer-checker=core,optin.cplusplus.UninitializedObject \ -// RUN: -analyzer-config optin.cplusplus.UninitializedObject:CheckPointeeInitialization=true \ -// RUN: -std=c++14 -verify %s +// RUN: %clang_analyze_cc1 -std=c++14 -verify %s \ +// RUN: -analyzer-checker=core \ +// RUN: -analyzer-checker=optin.cplusplus.UninitializedObject \ +// RUN: -analyzer-config \ +// RUN: optin.cplusplus.UninitializedObject:CheckPointeeInitialization=true //===----------------------------------------------------------------------===// // Default constructor test. @@ -1156,3 +1160,26 @@ VectorSizeLong v; v.x[0] = 0; } + +struct ComplexUninitTest { + ComplexUninitTest() {} + __complex__ float x; + __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; +//}; + +void fComplexTest() { +// ComplexInitTest x; + ComplexUninitTest x2; +} Index: lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h =================================================================== --- lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h +++ lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h @@ -323,9 +323,8 @@ /// needs to be analyzed as much as checking whether their value is undefined. inline bool isPrimitiveType(const QualType &T) { return T->isBuiltinType() || T->isEnumeralType() || - T->isMemberPointerType() || T->isBlockPointerType() || T->isFunctionType() || T->isAtomicType() || - T->isVectorType(); + T->isVectorType() || T->isScalarType(); } inline bool isDereferencableType(const QualType &T) {
Index: test/Analysis/cxx-uninitialized-object.cpp =================================================================== --- test/Analysis/cxx-uninitialized-object.cpp +++ test/Analysis/cxx-uninitialized-object.cpp @@ -1,11 +1,15 @@ -// RUN: %clang_analyze_cc1 -analyzer-checker=core,optin.cplusplus.UninitializedObject \ +// RUN: %clang_analyze_cc1 -std=c++14 -verify %s \ +// RUN: -analyzer-checker=core \ +// RUN: -analyzer-checker=optin.cplusplus.UninitializedObject \ // RUN: -analyzer-config optin.cplusplus.UninitializedObject:Pedantic=true -DPEDANTIC \ -// RUN: -analyzer-config optin.cplusplus.UninitializedObject:CheckPointeeInitialization=true \ -// RUN: -std=c++14 -verify %s +// RUN: -analyzer-config \ +// RUN: optin.cplusplus.UninitializedObject:CheckPointeeInitialization=true -// RUN: %clang_analyze_cc1 -analyzer-checker=core,optin.cplusplus.UninitializedObject \ -// RUN: -analyzer-config optin.cplusplus.UninitializedObject:CheckPointeeInitialization=true \ -// RUN: -std=c++14 -verify %s +// RUN: %clang_analyze_cc1 -std=c++14 -verify %s \ +// RUN: -analyzer-checker=core \ +// RUN: -analyzer-checker=optin.cplusplus.UninitializedObject \ +// RUN: -analyzer-config \ +// RUN: optin.cplusplus.UninitializedObject:CheckPointeeInitialization=true //===----------------------------------------------------------------------===// // Default constructor test. @@ -1156,3 +1160,26 @@ VectorSizeLong v; v.x[0] = 0; } + +struct ComplexUninitTest { + ComplexUninitTest() {} + __complex__ float x; + __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; +//}; + +void fComplexTest() { +// ComplexInitTest x; + ComplexUninitTest x2; +} Index: lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h =================================================================== --- lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h +++ lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h @@ -323,9 +323,8 @@ /// needs to be analyzed as much as checking whether their value is undefined. inline bool isPrimitiveType(const QualType &T) { return T->isBuiltinType() || T->isEnumeralType() || - T->isMemberPointerType() || T->isBlockPointerType() || T->isFunctionType() || T->isAtomicType() || - T->isVectorType(); + T->isVectorType() || T->isScalarType(); } inline bool isDereferencableType(const QualType &T) {
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits