Implement: <rdar://problem/6351970> rule request: warn if @synchronized mutex can be nil
llvm-svn: 113573
This commit is contained in:
parent
ed12f1b9f9
commit
e495c99055
|
@ -18,6 +18,7 @@ add_clang_library(clangChecker
|
|||
BugReporterVisitors.cpp
|
||||
BuiltinFunctionChecker.cpp
|
||||
CFRefCount.cpp
|
||||
CStringChecker.cpp
|
||||
CallAndMessageChecker.cpp
|
||||
CastSizeChecker.cpp
|
||||
CastToStructChecker.cpp
|
||||
|
@ -29,7 +30,6 @@ add_clang_library(clangChecker
|
|||
Checker.cpp
|
||||
CheckerHelpers.cpp
|
||||
CocoaConventions.cpp
|
||||
CStringChecker.cpp
|
||||
DereferenceChecker.cpp
|
||||
DivZeroChecker.cpp
|
||||
Environment.cpp
|
||||
|
@ -54,6 +54,7 @@ add_clang_library(clangChecker
|
|||
NSErrorChecker.cpp
|
||||
NoReturnFunctionChecker.cpp
|
||||
OSAtomicChecker.cpp
|
||||
ObjCAtSyncChecker.cpp
|
||||
ObjCUnusedIVarsChecker.cpp
|
||||
PathDiagnostic.cpp
|
||||
PlistDiagnostics.cpp
|
||||
|
|
|
@ -373,6 +373,7 @@ static void RegisterInternalChecks(GRExprEngine &Eng) {
|
|||
RegisterUndefCapturedBlockVarChecker(Eng);
|
||||
RegisterUndefResultChecker(Eng);
|
||||
RegisterStackAddrLeakChecker(Eng);
|
||||
RegisterObjCAtSyncChecker(Eng);
|
||||
|
||||
// This is not a checker yet.
|
||||
RegisterNoReturnFunctionChecker(Eng);
|
||||
|
|
|
@ -31,6 +31,7 @@ void RegisterDereferenceChecker(GRExprEngine &Eng);
|
|||
void RegisterDivZeroChecker(GRExprEngine &Eng);
|
||||
void RegisterFixedAddressChecker(GRExprEngine &Eng);
|
||||
void RegisterNoReturnFunctionChecker(GRExprEngine &Eng);
|
||||
void RegisterObjCAtSyncChecker(GRExprEngine &Eng);
|
||||
void RegisterPointerArithChecker(GRExprEngine &Eng);
|
||||
void RegisterPointerSubChecker(GRExprEngine &Eng);
|
||||
void RegisterReturnPointerRangeChecker(GRExprEngine &Eng);
|
||||
|
|
|
@ -1094,4 +1094,19 @@ void test_enum_cases_positive(enum Cases C) {
|
|||
*p = 0xDEADBEEF; // expected-warning{{Dereference of null pointer}}
|
||||
}
|
||||
|
||||
// <rdar://problem/6351970> rule request: warn if synchronization mutex can be nil
|
||||
void rdar6351970() {
|
||||
id x = 0;
|
||||
@synchronized(x) {} // expected-warning{{Nil value used as mutex for @synchronized() (no synchronization will occur)}}
|
||||
}
|
||||
|
||||
void rdar6351970_b(id x) {
|
||||
if (!x)
|
||||
@synchronized(x) {} // expected-warning{{Nil value used as mutex for @synchronized() (no synchronization will occur)}}
|
||||
}
|
||||
|
||||
void rdar6351970_c() {
|
||||
id x;
|
||||
@synchronized(x) {} // expected-warning{{Uninitialized value used as mutex for @synchronized}}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue