================ @@ -141,6 +158,42 @@ class RawPtrRefCallArgsChecker } } + void visitObjCMessageExpr(const ObjCMessageExpr *E, const Decl *D) const { + if (BR->getSourceManager().isInSystemHeader(E->getExprLoc())) + return; + + auto Selector = E->getSelector(); + if (auto *Receiver = E->getInstanceReceiver()->IgnoreParenCasts()) { + std::optional<bool> IsUnsafe = isUnsafePtr(E->getReceiverType()); + if (IsUnsafe && *IsUnsafe && !isPtrOriginSafe(Receiver)) { + if (auto *InnerMsg = dyn_cast<ObjCMessageExpr>(Receiver)) { + auto InnerSelector = InnerMsg->getSelector(); + if (InnerSelector.getNameForSlot(0) == "alloc" && + Selector.getNameForSlot(0).starts_with("init")) + return; + } + reportBugOnReceiver(Receiver, D); + } + } + + auto *MethodDecl = E->getMethodDecl(); + if (!MethodDecl) + return; + + auto ArgCount = E->getNumArgs(); + for (unsigned i = 0; i < ArgCount && i < MethodDecl->param_size(); ++i) { ---------------- t-rasmud wrote:
Do we have a test case for variable length params? https://github.com/llvm/llvm-project/pull/128586 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits