File tree Expand file tree Collapse file tree 2 files changed +37
-0
lines changed
lib/StaticAnalyzer/Checkers/WebKit
test/Analysis/Checkers/WebKit Expand file tree Collapse file tree 2 files changed +37
-0
lines changed Original file line number Diff line number Diff line change @@ -173,6 +173,14 @@ bool tryToFindPtrOrigin(
173173 if (isSingleton (E->getFoundDecl ()))
174174 return callback (E, true );
175175 }
176+
177+ if (auto *MemberExpr = dyn_cast<CXXDependentScopeMemberExpr>(CalleeE)) {
178+ auto *Base = MemberExpr->getBase ();
179+ auto MemberName = MemberExpr->getMember ().getAsString ();
180+ bool IsGetter = MemberName == " get" || MemberName == " ptr" ;
181+ if (Base && isSafePtrType (Base->getType ()) && IsGetter)
182+ return callback (E, true );
183+ }
176184 }
177185
178186 // Sometimes, canonical type erroneously turns Ref<T> into T.
Original file line number Diff line number Diff line change @@ -596,6 +596,35 @@ void foo() {
596596
597597} // namespace sel_string
598598
599+ namespace template_function {
600+
601+ class Base {
602+ public:
603+ virtual ~Base () = default ;
604+ void send (dispatch_queue_t ) const ;
605+ void ref () const ;
606+ void deref () const ;
607+ };
608+
609+ template <typename Traits>
610+ class Derived : public Base {
611+ public:
612+ virtual ~Derived () = default ;
613+
614+ void send (typename Traits::MessageType) const ;
615+
616+ virtual OSObjectPtr<dispatch_queue_t > msg (typename Traits::MessageType) const = 0;
617+ };
618+
619+ template <typename Traits>
620+ void Derived<Traits>::send(typename Traits::MessageType messageType) const
621+ {
622+ OSObjectPtr dictionary = msg (messageType);
623+ Base::send (dictionary.get ());
624+ }
625+
626+ } // namespace template_function
627+
599628@interface TestObject : NSObject
600629- (void )doWork : (NSString *)msg , ...;
601630- (void )doWorkOnSelf ;
You can’t perform that action at this time.
0 commit comments