void VisitCallExpr(CallExpr* CE) {
    Visit(CE->getCallee());
    FunctionDecl* FDecl = CE->getDirectCallee();
    if (FDecl && isDeclCandidate(FDecl)) {
      decl_map_t::const_iterator it = m_NonNullArgIndexs.find(FDecl);
      const std::bitset<32>& ArgIndexs = it->second;
      Sema::ContextRAII pushedDC(m_Sema, FDecl);
      for (int index = 0; index < 32; ++index) {
        if (ArgIndexs.test(index)) {
          // Get the argument with the nonnull attribute.
          Expr* Arg = CE->getArg(index);
          CE->setArg(index, SynthesizeCheck(Arg));
        }
      }
    }
  }
 bool VisitCallExpr(CallExpr* CE) {
   VisitStmt(CE->getCallee());
   FunctionDecl* FDecl = CE->getDirectCallee();
   if (FDecl && isDeclCandidate(FDecl)) {
     decl_map_t::const_iterator it = m_NonNullArgIndexs.find(FDecl);
     const std::bitset<32>& ArgIndexs = it->second;
     Sema::ContextRAII pushedDC(m_Sema, FDecl);
     for (int index = 0; index < 32; ++index) {
       if (ArgIndexs.test(index)) {
         // Get the argument with the nonnull attribute.
         Expr* Arg = CE->getArg(index);
         if (Arg->getType().getTypePtr()->isPointerType()
             && !llvm::isa<clang::CXXThisExpr>(Arg))
           CE->setArg(index, SynthesizeCheck(Arg));
       }
     }
   }
   return true;
 }