Author: dergachev Date: Wed Aug 10 11:25:16 2016 New Revision: 278238 URL: http://llvm.org/viewvc/llvm-project?rev=278238&view=rev Log: [analyzer] Fix a crash in CloneDetector when calling functions by pointers.
CallExpr may have a null direct callee when the callee function is not known in compile-time. Do not try to take callee name in this case. Patch by Raphael Isemann! Differential Revision: https://reviews.llvm.org/D23320 Modified: cfe/trunk/lib/Analysis/CloneDetection.cpp cfe/trunk/test/Analysis/copypaste/call.cpp Modified: cfe/trunk/lib/Analysis/CloneDetection.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/CloneDetection.cpp?rev=278238&r1=278237&r2=278238&view=diff ============================================================================== --- cfe/trunk/lib/Analysis/CloneDetection.cpp (original) +++ cfe/trunk/lib/Analysis/CloneDetection.cpp Wed Aug 10 11:25:16 2016 @@ -249,8 +249,11 @@ public: }) //--- 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()); }) Modified: cfe/trunk/test/Analysis/copypaste/call.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/copypaste/call.cpp?rev=278238&r1=278237&r2=278238&view=diff ============================================================================== --- cfe/trunk/test/Analysis/copypaste/call.cpp (original) +++ cfe/trunk/test/Analysis/copypaste/call.cpp Wed Aug 10 11:25:16 2016 @@ -22,3 +22,15 @@ bool foo2(int x) { 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; +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits