diff options
Diffstat (limited to 'clang/lib/StaticAnalyzer/Core/RetainSummaryManager.cpp')
| -rw-r--r-- | clang/lib/StaticAnalyzer/Core/RetainSummaryManager.cpp | 11 | 
1 files changed, 7 insertions, 4 deletions
| diff --git a/clang/lib/StaticAnalyzer/Core/RetainSummaryManager.cpp b/clang/lib/StaticAnalyzer/Core/RetainSummaryManager.cpp index fc4544f843d..357bc67559a 100644 --- a/clang/lib/StaticAnalyzer/Core/RetainSummaryManager.cpp +++ b/clang/lib/StaticAnalyzer/Core/RetainSummaryManager.cpp @@ -124,10 +124,8 @@ RetainSummaryManager::generateSummary(const FunctionDecl *FD,    }    const IdentifierInfo *II = FD->getIdentifier(); -  if (!II) -    return getDefaultSummary(); -  StringRef FName = II->getName(); +  StringRef FName = II ? II->getName() : "";    // Strip away preceding '_'.  Doing this here will effect all the checks    // down below. @@ -304,6 +302,9 @@ RetainSummaryManager::generateSummary(const FunctionDecl *FD,        if (FName == "retain")          return getOSSummaryRetainRule(FD); + +      if (MD->getOverloadedOperator() == OO_New) +        return getOSSummaryCreateRule(MD);      }    } @@ -491,9 +492,11 @@ RetainSummaryManager::getSummary(const CallEvent &Call,    case CE_CXXConstructor:      Summ = getFunctionSummary(cast<CXXConstructorCall>(Call).getDecl());      break; +  case CE_CXXAllocator: +    Summ = getFunctionSummary(cast<CXXAllocatorCall>(Call).getDecl()); +    break;    case CE_Block:    case CE_CXXDestructor: -  case CE_CXXAllocator:      // FIXME: These calls are currently unsupported.      return getPersistentStopSummary();    case CE_ObjCMessage: { | 

