Alexander_Droste added a comment.
Here's the crash report that appears in case of the unknown function body:
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 clang 0x0000000105f544b7 abort + 39
(Signals.inc:440)
1 clang 0x0000000108b4a2a9
llvm::isa_impl_cl<clang::ento::ElementRegion, clang::ento::MemRegion
const*>::doit(clang::ento::MemRegion const*) + 89 (Casting.h:95)
2 clang 0x0000000108b4a238
llvm::isa_impl_wrap<clang::ento::ElementRegion, clang::ento::MemRegion const*,
clang::ento::MemRegion const*>::doit(clang::ento::MemRegion const* const&) + 24
(Casting.h:122)
3 clang 0x0000000108b4a212
llvm::isa_impl_wrap<clang::ento::ElementRegion, clang::ento::MemRegion const*
const, clang::ento::MemRegion const*>::doit(clang::ento::MemRegion const*
const&) + 34 (Casting.h:112)
4 clang 0x0000000108b4a005 bool
llvm::isa<clang::ento::ElementRegion, clang::ento::MemRegion
const*>(clang::ento::MemRegion const* const&) + 21 (Casting.h:133)
5 clang 0x0000000108bd8388
llvm::cast_retty<clang::ento::ElementRegion, clang::ento::MemRegion
const*>::ret_type llvm::dyn_cast<clang::ento::ElementRegion,
clang::ento::MemRegion const>(clang::ento::MemRegion const*) + 24
(Casting.h:298)
6 clang 0x000000010891a527
clang::ento::mpi::MPIChecker::checkUnmatchedWaits(clang::ento::CallEvent
const&, clang::ento::CheckerContext&) const + 167 (MPIChecker.cpp:59)
7 clang 0x00000001089219a9
clang::ento::mpi::MPIChecker::checkPreCall(clang::ento::CallEvent const&,
clang::ento::CheckerContext&) const + 57 (MPIChecker.h:37)
8 clang 0x0000000108921960 void
clang::ento::check::PreCall::_checkCall<clang::ento::mpi::MPIChecker>(void*,
clang::ento::CallEvent const&, clang::ento::CheckerContext&) + 48
(Checker.h:169)
9 clang 0x0000000108ae0ca2
clang::ento::CheckerFn<void (clang::ento::CallEvent const&,
clang::ento::CheckerContext&)>::operator()(clang::ento::CallEvent const&,
clang::ento::CheckerContext&) const + 66 (CheckerManager.h:58)
10 clang 0x0000000108ae0c3a (anonymous
namespace)::CheckCallContext::runChecker(clang::ento::CheckerFn<void
(clang::ento::CallEvent const&, clang::ento::CheckerContext&)>,
clang::ento::NodeBuilder&, clang::ento::ExplodedNode*) + 250
(CheckerManager.cpp:269)
11 clang 0x0000000108ad6da5 void
expandGraphWithCheckers<(anonymous namespace)::CheckCallContext>((anonymous
namespace)::CheckCallContext, clang::ento::ExplodedNodeSet&,
clang::ento::ExplodedNodeSet const&) + 821 (CheckerManager.cpp:123)
12 clang 0x0000000108ad6a00
clang::ento::CheckerManager::runCheckersForCallEvent(bool,
clang::ento::ExplodedNodeSet&, clang::ento::ExplodedNodeSet const&,
clang::ento::CallEvent const&, clang::ento::ExprEngine&, bool) + 288
(CheckerManager.cpp:286)
To me it seems like, `dyn_cast<ElementRegion>(MR)` being called in
`checkUnmatchedWaits` (line 59) causes the problem, if `nullptr` is returned.
template <class X, class Y>
LLVM_ATTRIBUTE_UNUSED_RESULT inline typename cast_retty<X, Y *>::ret_type
dyn_cast(Y *Val) {
return isa<X>(Val) ? cast<X>(Val) : nullptr;
}
http://reviews.llvm.org/D16044
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits