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
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to