Index: cfe/trunk/lib/Analysis/CloneDetection.cpp =================================================================== --- cfe/trunk/lib/Analysis/CloneDetection.cpp +++ cfe/trunk/lib/Analysis/CloneDetection.cpp @@ -249,8 +249,11 @@ }) //--- Calls --------------------------------------------------------------// - DEF_ADD_DATA(CallExpr, - { addData(S->getDirectCallee()->getQualifiedNameAsString()); }) + DEF_ADD_DATA(CallExpr, { + // Function pointers don't have a callee and we just skip hashing it. + if (S->getDirectCallee()) + addData(S->getDirectCallee()->getQualifiedNameAsString()); + }) //--- Exceptions ---------------------------------------------------------// DEF_ADD_DATA(CXXCatchStmt, { addData(S->getCaughtType()); }) Index: cfe/trunk/test/Analysis/copypaste/call.cpp =================================================================== --- cfe/trunk/test/Analysis/copypaste/call.cpp +++ cfe/trunk/test/Analysis/copypaste/call.cpp @@ -22,3 +22,15 @@ return b(); return true; } + +// Test that we don't crash on function pointer calls + +bool (*funcPtr)(int); + +bool fooPtr1(int x) { + if (x > 0) + return false; + else if (x < 0) + return funcPtr(1); + return true; +}