[cfe-commits] r125445 - in /cfe/trunk: include/clang/Sema/Overload.h include/clang/Sema/Sema.h lib/Sema/SemaExprCXX.cpp lib/Sema/SemaOverload.cpp test/CodeGenObjCXX/blocks.mm test/SemaCXX/block-call.cpp test/SemaObjCXX/blocks.mm

John McCall rjmccall at apple.com
Sun Feb 13 11:33:27 PST 2011


On Feb 12, 2011, at 11:07 AM, Fariborz Jahanian wrote:
> Author: fjahanian
> Date: Sat Feb 12 13:07:46 2011
> New Revision: 125445
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=125445&view=rev
> Log:
> Implement objective-c++'s block pointer type matching involving
> types which are contravariance in argument types and covariance
> in return types. // rdar://8979379.

To add to Doug's comments:

> +  const FunctionProtoType *FromFunctionType
> +    = FromPointeeType->getAs<FunctionProtoType>();
> +  const FunctionProtoType *ToFunctionType
> +    = ToPointeeType->getAs<FunctionProtoType>();
> +  
> +  if (FromFunctionType && ToFunctionType) {

You can use an early return here.

> +    if (Context.getCanonicalType(FromPointeeType)
> +          == Context.getCanonicalType(ToPointeeType))
> +      return true;
> +    
> +    // Perform the quick checks that will tell us whether these
> +    // function types are obviously different.
> +    if (FromFunctionType->getNumArgs() != ToFunctionType->getNumArgs() ||
> +        FromFunctionType->isVariadic() != ToFunctionType->isVariadic() ||
> +        FromFunctionType->getTypeQuals() != ToFunctionType->getTypeQuals())
> +      return false;

You should bail out on an ExtInfo mismatch, too.

John.



More information about the cfe-commits mailing list