Skip to content

Commit a03a7cf

Browse files
authored
Merge branch 'main' into fix/163090
2 parents 64379c3 + b626282 commit a03a7cf

File tree

3 files changed

+32
-2
lines changed

3 files changed

+32
-2
lines changed

clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,9 @@ bool tryToFindPtrOrigin(
164164

165165
auto Name = safeGetName(callee);
166166
if (Name == "__builtin___CFStringMakeConstantString" ||
167-
Name == "NSClassFromString")
167+
Name == "NSStringFromSelector" || Name == "NSSelectorFromString" ||
168+
Name == "NSStringFromClass" || Name == "NSClassFromString" ||
169+
Name == "NSStringFromProtocol" || Name == "NSProtocolFromString")
168170
return callback(E, true);
169171
} else if (auto *CalleeE = call->getCallee()) {
170172
if (auto *E = dyn_cast<DeclRefExpr>(CalleeE->IgnoreParenCasts())) {
@@ -202,6 +204,8 @@ bool tryToFindPtrOrigin(
202204
!Selector.getNumArgs())
203205
return callback(E, true);
204206
}
207+
if (auto *ObjCProtocol = dyn_cast<ObjCProtocolExpr>(E))
208+
return callback(ObjCProtocol, true);
205209
if (auto *ObjCDict = dyn_cast<ObjCDictionaryLiteral>(E))
206210
return callback(ObjCDict, true);
207211
if (auto *ObjCArray = dyn_cast<ObjCArrayLiteral>(E))

clang/test/Analysis/Checkers/WebKit/objc-mock-types.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,12 +98,20 @@ typedef CVImageBufferRef CVPixelBufferRef;
9898
typedef signed int CVReturn;
9999
CVReturn CVPixelBufferCreateWithIOSurface(CFAllocatorRef allocator, IOSurfaceRef surface, CFDictionaryRef pixelBufferAttributes, CF_RETURNS_RETAINED CVPixelBufferRef * pixelBufferOut);
100100

101+
extern "C" NSString *NSStringFromSelector(SEL aSelector);
102+
extern "C" SEL NSSelectorFromString(NSString *aSelectorName);
103+
104+
extern "C" NSString *NSStringFromClass(Class aClass);
105+
extern "C" Class NSClassFromString(NSString *aClassName);
106+
107+
extern "C" NSString *NSStringFromProtocol(Protocol *proto);
108+
extern "C" Protocol * NSProtocolFromString(NSString *namestr);
109+
101110
CFRunLoopRef CFRunLoopGetCurrent(void);
102111
CFRunLoopRef CFRunLoopGetMain(void);
103112
extern CFTypeRef CFRetain(CFTypeRef cf);
104113
extern void CFRelease(CFTypeRef cf);
105114
#define CFSTR(cStr) ((CFStringRef) __builtin___CFStringMakeConstantString ("" cStr ""))
106-
extern Class NSClassFromString(NSString *aClassName);
107115

108116
#if __has_feature(objc_arc)
109117
id CFBridgingRelease(CFTypeRef X) {

clang/test/Analysis/Checkers/WebKit/unretained-call-args.mm

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,24 @@ void foo() {
578578

579579
} // autoreleased
580580

581+
namespace sel_string {
582+
583+
void consumeStr(NSString *);
584+
void consumeSel(SEL);
585+
void consumeClass(Class);
586+
void consumeProtocol(Protocol *);
587+
588+
void foo() {
589+
consumeStr(NSStringFromSelector(@selector(mutableCopy)));
590+
consumeSel(NSSelectorFromString(@"mutableCopy"));
591+
consumeStr(NSStringFromClass(NSNumber.class));
592+
consumeClass(NSClassFromString(@"NSNumber"));
593+
consumeStr(NSStringFromProtocol(@protocol(NSCopying)));
594+
consumeProtocol(NSProtocolFromString(@"NSCopying"));
595+
}
596+
597+
} // namespace sel_string
598+
581599
@interface TestObject : NSObject
582600
- (void)doWork:(NSString *)msg, ...;
583601
- (void)doWorkOnSelf;

0 commit comments

Comments
 (0)