diff options
author | Kristof Umann <kristof.umann@ericsson.com> | 2019-04-30 08:47:56 +0000 |
---|---|---|
committer | Kristof Umann <kristof.umann@ericsson.com> | 2019-04-30 08:47:56 +0000 |
commit | c21ec00d2852fdbae9cf803602276e4f26ce76c1 (patch) | |
tree | deb26caf30811fc5d30d77799cedfdf54da5ac74 /clang/test/Analysis/cxx-uninitialized-object.cpp | |
parent | f74a4c1f6df9a2ccc2c871113a527c1dc2c874e3 (diff) | |
download | bcm5719-llvm-c21ec00d2852fdbae9cf803602276e4f26ce76c1.tar.gz bcm5719-llvm-c21ec00d2852fdbae9cf803602276e4f26ce76c1.zip |
[analyzer][UninitializedObjectChecker] PR41611: Regard vector types as primitive
https://bugs.llvm.org/show_bug.cgi?id=41611
Similarly to D61106, the checker ran over an llvm_unreachable for vector types:
struct VectorSizeLong {
VectorSizeLong() {}
__attribute__((__vector_size__(16))) long x;
};
void __vector_size__LongTest() {
VectorSizeLong v;
}
Since, according to my short research,
"The vector_size attribute is only applicable to integral and float scalars,
although arrays, pointers, and function return values are allowed in conjunction
with this construct."
[src: https://gcc.gnu.org/onlinedocs/gcc-4.6.1/gcc/Vector-Extensions.html#Vector-Extensions]
vector types are safe to regard as primitive.
Differential Revision: https://reviews.llvm.org/D61246
llvm-svn: 359539
Diffstat (limited to 'clang/test/Analysis/cxx-uninitialized-object.cpp')
-rw-r--r-- | clang/test/Analysis/cxx-uninitialized-object.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/clang/test/Analysis/cxx-uninitialized-object.cpp b/clang/test/Analysis/cxx-uninitialized-object.cpp index 86f2ecdd83a..a8113198541 100644 --- a/clang/test/Analysis/cxx-uninitialized-object.cpp +++ b/clang/test/Analysis/cxx-uninitialized-object.cpp @@ -1132,7 +1132,7 @@ void fCXX11MemberInitTest2() { } //===----------------------------------------------------------------------===// -// _Atomic tests. +// "Esoteric" primitive type tests. //===----------------------------------------------------------------------===// struct MyAtomicInt { @@ -1142,6 +1142,17 @@ struct MyAtomicInt { MyAtomicInt() {} // expected-warning{{1 uninitialized field}} }; -void entry() { +void _AtomicTest() { MyAtomicInt b; } + +struct VectorSizeLong { + VectorSizeLong() {} + __attribute__((__vector_size__(16))) long x; +}; + +void __vector_size__LongTest() { + // TODO: Warn for v.x. + VectorSizeLong v; + v.x[0] = 0; +} |