r178820 - [analyzer] Fully-covered switch for families in isTrackedFamily()

Jordan Rose jordan_rose at apple.com
Thu Apr 4 17:41:57 PDT 2013


:-) A fully-covered switch in LLVM does not include a "default" case. We do put an llvm_unreachable after the switch to appease older GCCs' -Wreturn-type, but the point of the covered switch is so that we get a warning when a new enum value is added.


On Apr 4, 2013, at 17:31 , Anton Yartsev <anton.yartsev at gmail.com> wrote:

> Author: ayartsev
> Date: Thu Apr  4 19:31:02 2013
> New Revision: 178820
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=178820&view=rev
> Log:
> [analyzer] Fully-covered switch for families in isTrackedFamily()
> 
> Modified:
>    cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp
> 
> Modified: cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp?rev=178820&r1=178819&r2=178820&view=diff
> ==============================================================================
> --- cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp (original)
> +++ cfe/trunk/lib/StaticAnalyzer/Checkers/MallocChecker.cpp Thu Apr  4 19:31:02 2013
> @@ -1068,13 +1068,24 @@ ProgramStateRef MallocChecker::FreeMemAu
> }
> 
> bool MallocChecker::isTrackedFamily(AllocationFamily Family) const {
> -  if (Family == AF_Malloc &&
> -    (!Filter.CMallocOptimistic && !Filter.CMallocPessimistic))
> -    return false;
> -
> -  if ((Family == AF_CXXNew || Family == AF_CXXNewArray) &&
> -    !Filter.CNewDeleteChecker)
> -    return false;
> +  switch (Family) {
> +  case AF_Malloc: {
> +    if (!Filter.CMallocOptimistic && !Filter.CMallocPessimistic)
> +      return false;
> +    break;  
> +  }
> +  case AF_CXXNew:
> +  case AF_CXXNewArray: {
> +    if (!Filter.CNewDeleteChecker)
> +      return false;
> +    break;
> +  }
> +  case AF_None: {
> +    return true;
> +  }
> +  default:
> +    llvm_unreachable("unhandled family");
> +  }
> 
>   return true;
> }
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




More information about the cfe-commits mailing list