forked from OSchip/llvm-project
[analyzer] [quickfix] Prevent a crash in NamedDecl::getName()
llvm-svn: 326755
This commit is contained in:
parent
39e54cb7b7
commit
15e814f687
|
@ -88,9 +88,11 @@ void GCDAsyncSemaphoreChecker::checkASTCodeBody(const Decl *D,
|
|||
BugReporter &BR) const {
|
||||
|
||||
// The pattern is very common in tests, and it is OK to use it there.
|
||||
if (const auto* ND = dyn_cast<NamedDecl>(D))
|
||||
if (ND->getName().startswith("test"))
|
||||
if (const auto* ND = dyn_cast<NamedDecl>(D)) {
|
||||
std::string DeclName = ND->getNameAsString();
|
||||
if (StringRef(DeclName).startswith("test"))
|
||||
return;
|
||||
}
|
||||
|
||||
const char *SemaphoreBinding = "semaphore_name";
|
||||
auto SemaphoreCreateM = callExpr(callsName("dispatch_semaphore_create"));
|
||||
|
|
|
@ -1,5 +1,14 @@
|
|||
// RUN: %clang_analyze_cc1 -analyzer-checker=core,alpha.osx.GCDAsyncSemaphore %s -fblocks -verify
|
||||
//
|
||||
typedef signed char BOOL;
|
||||
@protocol NSObject - (BOOL)isEqual:(id)object; @end
|
||||
@interface NSObject <NSObject> {}
|
||||
+(id)alloc;
|
||||
-(id)init;
|
||||
-(id)autorelease;
|
||||
-(id)copy;
|
||||
-(id)retain;
|
||||
@end
|
||||
|
||||
typedef int dispatch_semaphore_t;
|
||||
typedef void (^block_t)();
|
||||
|
||||
|
@ -166,4 +175,29 @@ void warn_with_cast() {
|
|||
dispatch_semaphore_wait((int)sema, 100); // expected-warning{{Possible semaphore performance anti-pattern}}
|
||||
}
|
||||
|
||||
@interface Test1 : NSObject
|
||||
-(void)use_method_warn;
|
||||
-(void)testNoWarn;
|
||||
@end
|
||||
|
||||
@implementation Test1
|
||||
|
||||
-(void)use_method_warn {
|
||||
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
|
||||
|
||||
func(^{
|
||||
dispatch_semaphore_signal(sema);
|
||||
});
|
||||
dispatch_semaphore_wait(sema, 100); // expected-warning{{Possible semaphore performance anti-pattern}}
|
||||
}
|
||||
|
||||
-(void)testNoWarn {
|
||||
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
|
||||
|
||||
func(^{
|
||||
dispatch_semaphore_signal(sema);
|
||||
});
|
||||
dispatch_semaphore_wait(sema, 100);
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
Loading…
Reference in New Issue