Author: george.karpenkov Date: Mon Aug 13 16:32:15 2018 New Revision: 339631
URL: http://llvm.org/viewvc/llvm-project?rev=339631&view=rev Log: [analyzer] Fix UninitializedObjectChecker to not crash on uninitialized "id" fields Differential Revision: https://reviews.llvm.org/D50673 Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp cfe/trunk/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedPointee.cpp cfe/trunk/test/Analysis/objcpp-uninitialized-object.mm Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp?rev=339631&r1=339630&r2=339631&view=diff ============================================================================== --- cfe/trunk/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp (original) +++ cfe/trunk/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp Mon Aug 13 16:32:15 2018 @@ -265,7 +265,7 @@ bool FindUninitializedFields::isNonUnion continue; } - if (T->isPointerType() || T->isReferenceType() || T->isBlockPointerType()) { + if (T->isAnyPointerType() || T->isReferenceType() || T->isBlockPointerType()) { if (isPointerOrReferenceUninit(FR, LocalChain)) ContainsUninitField = true; continue; Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedPointee.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedPointee.cpp?rev=339631&r1=339630&r2=339631&view=diff ============================================================================== --- cfe/trunk/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedPointee.cpp (original) +++ cfe/trunk/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedPointee.cpp Mon Aug 13 16:32:15 2018 @@ -78,7 +78,7 @@ static bool isVoidPointer(QualType T); bool FindUninitializedFields::isPointerOrReferenceUninit( const FieldRegion *FR, FieldChainInfo LocalChain) { - assert((FR->getDecl()->getType()->isPointerType() || + assert((FR->getDecl()->getType()->isAnyPointerType() || FR->getDecl()->getType()->isReferenceType() || FR->getDecl()->getType()->isBlockPointerType()) && "This method only checks pointer/reference objects!"); Modified: cfe/trunk/test/Analysis/objcpp-uninitialized-object.mm URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/objcpp-uninitialized-object.mm?rev=339631&r1=339630&r2=339631&view=diff ============================================================================== --- cfe/trunk/test/Analysis/objcpp-uninitialized-object.mm (original) +++ cfe/trunk/test/Analysis/objcpp-uninitialized-object.mm Mon Aug 13 16:32:15 2018 @@ -20,3 +20,13 @@ void warnOnUninitializedBlock() { void noWarningWhenInitialized() { StructWithBlock a; } + +struct StructWithId { + int a; + id z; // expected-note{{uninitialized pointer 'this->z'}} + StructWithId() : a(0) {} // expected-warning{{1 uninitialized field at the end of the constructor call}} +}; + +void warnOnUninitializedId() { + StructWithId s; +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits