[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 12:11:11 PST 2011
On Feb 13, 2011, at 12:07 PM, Fariborz Jahanian wrote:
>
> On Feb 13, 2011, at 11:33 AM, John McCall wrote:
>
>> 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.
>
> Thanks. In r125467 now. What does checking for ExtInfo accomplish beyond the other
> checkings?
You can give a block a non-standard calling convention. You generally *shouldn't*, because things like invoking the block via an Objective-C message send will completely break, but you *can*.
John.
More information about the cfe-commits
mailing list