[analyzer][UninitializedObjectChecker] PR41590: Regard _Atomic types as primitive
authorKristof Umann <kristof.umann@ericsson.com>
Thu, 25 Apr 2019 20:00:51 +0000 (20:00 +0000)
committerKristof Umann <kristof.umann@ericsson.com>
Thu, 25 Apr 2019 20:00:51 +0000 (20:00 +0000)
commitf46c58e0c610bba6c8fa075462f68d94e28c676c
tree78e641733128b5e8b9ef542ba6f0513b589092ca
parent65d4d5e9e7bb06153ffd9de9b7ad7a1a676d36fc
[analyzer][UninitializedObjectChecker] PR41590: Regard _Atomic types as primitive

https://bugs.llvm.org/show_bug.cgi?id=41590

For the following code snippet, UninitializedObjectChecker crashed:

struct MyAtomicInt {
  _Atomic(int) x;
  MyAtomicInt() {}
};

void entry() {
  MyAtomicInt b;
}

The problem was that _Atomic types were not regular records, unions,
dereferencable or primitive, making the checker hit the llvm_unreachable at
lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp:347.
The solution is to regard these types as primitive as well. The test case shows
that with this addition, not only are we able to get rid of the crash, but we
can identify x as uninitialized.

Differential Revision: https://reviews.llvm.org/D61106

llvm-svn: 359230
clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObject.h
clang/test/Analysis/cxx-uninitialized-object.cpp