[LLVMbugs] [Bug 8458] New: static-analyzer assert in @synchronize() when using object's property as lock.

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Mon Oct 25 09:34:09 PDT 2010


http://llvm.org/bugs/show_bug.cgi?id=8458

           Summary: static-analyzer assert in @synchronize() when using
                    object's property as lock.
           Product: clang
           Version: trunk
          Platform: Macintosh
        OS/Version: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: Static Analyzer
        AssignedTo: kremenek at apple.com
        ReportedBy: devlists at shadowlab.org
                CC: llvmbugs at cs.uiuc.edu


When using an object's property as lock in a @synchronized block, the static
analyzer abort.

-------- test.m -----------
@interface WBDaemonTask {}
@property(readonly) id lock;
@end

static
void __WBDaemonUnregisterAtExit(WBDaemonTask *aDaemon) {
  @synchronized(aDaemon.lock) {}
}
------------------------

clang --analyze test.m
Assertion failed: (isa<X>(Val) && "cast<Ty>() argument of incompatible type!"),
function cast, file
/Volumes/MacPro/Projects/OpenSource/llvm/include/llvm/Support/Casting.h, line
202.
0  clang             0x0000000100e229f2 PrintStackTrace(void*) + 34
1  clang             0x0000000100e22f99 SignalHandler(int) + 857
2  libSystem.B.dylib 0x00007fff8349f35a _sigtramp + 26
3  libSystem.B.dylib 0x0000006800000000 _sigtramp + 2092305600
4  clang             0x0000000100013e86 abort + 22
5  clang             0x0000000100013e48 __assert_rtn + 56
6  clang             0x00000001004c4e62 clang::CheckerVisitor<(anonymous
namespace)::ObjCAtSyncChecker>::_PreVisit(clang::CheckerContext&, clang::Stmt
const*) + 1810
7  clang             0x000000010049250b
clang::GRExprEngine::CheckerVisit(clang::Stmt const*, clang::ExplodedNodeSet&,
clang::ExplodedNodeSet&, clang::GRExprEngine::CallbackKind) + 1451
8  clang             0x0000000100495d6e clang::GRExprEngine::Visit(clang::Stmt
const*, clang::ExplodedNode*, clang::ExplodedNodeSet&) + 766
9  clang             0x00000001004950b6
clang::GRExprEngine::ProcessStmt(clang::CFGElement, clang::GRStmtNodeBuilder&)
+ 2806
10 clang             0x000000010048f149
clang::GRCoreEngine::HandlePostStmt(clang::PostStmt const&, clang::CFGBlock
const*, unsigned int, clang::ExplodedNode*) + 393
11 clang             0x000000010048e84c
clang::GRCoreEngine::ExecuteWorkList(clang::LocationContext const*, unsigned
int, clang::GRState const*) + 556
12 clang             0x000000010043b15e ActionObjCMemCheckerAux((anonymous
namespace)::AnalysisConsumer&, clang::AnalysisManager&, clang::Decl*, bool) +
1118
13 clang             0x000000010043c73a (anonymous
namespace)::AnalysisConsumer::HandleCode(clang::Decl*, std::vector<void
(*)((anonymous namespace)::AnalysisConsumer&, clang::AnalysisManager&,
clang::Decl*), std::allocator<void (*)((anonymous
namespace)::AnalysisConsumer&, clang::AnalysisManager&, clang::Decl*)> >&) +
362
14 clang             0x000000010043c0f8 (anonymous
namespace)::AnalysisConsumer::HandleTranslationUnit(clang::ASTContext&) + 360
15 clang             0x000000010022a8de clang::ParseAST(clang::Sema&, bool) +
750
16 clang             0x000000010003c2d7
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 871
17 clang             0x000000010001be45
clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 2757
18 clang             0x00000001000155de cc1_main(char const**, char const**,
char const*, void*) + 5518
19 clang             0x00000001000187ff main + 735
20 clang             0x0000000100014044 start + 52
21 clang             0x000000000000002f start + 4294885407
Stack dump:
0.    Program arguments:
/Volumes/MacPro/Projects/OpenSource/llvm/release/Release+Asserts/bin/clang -cc1
-triple x86_64-apple-darwin10.0.0 -analyze -disable-free -main-file-name test.m
-analyzer-store=region -analyzer-opt-analyze-nested-blocks
-analyzer-check-dead-stores -analyzer-check-objc-mem -analyzer-eagerly-assume
-analyzer-check-objc-methodsigs -analyzer-check-objc-unused-ivars
-analyzer-check-idempotent-operations -analyzer-output plist -w -pic-level 1
-mdisable-fp-elim -masm-verbose -munwind-tables -target-cpu core2
-target-linker-version 97.17 -resource-dir
/Volumes/MacPro/Projects/OpenSource/llvm/release/Release+Asserts/bin/../lib/clang/2.9
-ferror-limit 19 -fmessage-length 180 -stack-protector 1 -fblocks -fexceptions
-fobjc-nonfragile-abi2 -fobjc-dispatch-method=mixed -fdiagnostics-show-option
-fcolor-diagnostics -o test.plist -x objective-c test.m 
1.    <eof> parser at end of file
2.    test.m:8:3: Error evaluating statement
3.    test.m:8:3: Error evaluating statement
clang: error: clang frontend command failed due to signal 4 (use -v to see
invocation)

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.



More information about the llvm-bugs mailing list