forked from OSchip/llvm-project
[analyzer][UninitializedObjectChecker] PR41741: Regard all scalar types as primitive.
https://bugs.llvm.org/show_bug.cgi?id=41741 Pretty much the same as D61246 and 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. Differential Revision: https://reviews.llvm.org/D61569 llvm-svn: 359998
This commit is contained in:
parent
02569408ef
commit
aa9d2623a0
|
@ -323,9 +323,8 @@ private:
|
|||
/// 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) {
|
||||
|
|
|
@ -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,28 @@ void __vector_size__LongTest() {
|
|||
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;
|
||||
|
||||
// TODO: we should emit a warning for x2.x and x2.y.
|
||||
ComplexUninitTest x2;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue