Implement: <rdar://problem/6351970> rule request: warn if @synchronized mutex can be nil

llvm-svn: 113573
This commit is contained in:
Ted Kremenek 2010-09-10 03:05:40 +00:00
parent ed12f1b9f9
commit e495c99055
4 changed files with 19 additions and 1 deletions

View File

@ -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

View File

@ -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);

View File

@ -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);

View File

@ -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}}
}