Sorry for the delay!

+        // but the type cast should be considered as failure.
+
+        OverloadExpr* oe = OverloadExpr::find(SrcExpr.get()).Expression;
+        Self.Diag(OpRange.getBegin(), diag::err_bad_cstyle_cast_overload)
+          << oe->getName() << DestType << OpRange
+          << oe->getQualifierLoc().getSourceRange();
+        Self.NoteAllOverloadCandidates(SrcExpr.get());

Some tiny typographical things here: no blank line between the comment and
the code, put the * on the right not on the left, and 'oe' should be 'OE'.
Otherwise, this looks good to me. Do you need someone to commit it for you?


On Thu, Mar 27, 2014 at 9:51 AM, Logan Chien <[email protected]>wrote:

> Ping?
>
>
> On Mon, Mar 17, 2014 at 11:59 PM, Logan Chien 
> <[email protected]>wrote:
>
>> Hi,
>>
>> It seems that if the C-style type cast is applied to the overloaded
>> function and the destination type is function type, then Clang will crash
>> with assertion failure.  For example,
>>
>>     void foo(int);
>>     void foo(int, int);
>>     void bar() {
>>         typedef void (ft)(int);
>>         ft p = (ft)foo;
>>     }
>>
>> In this case, the overloaded function foo will be cast to a function
>> type, which should be considered as an error.  But, unfortunately, since
>> the function resolution is using canonical type, the matched function will
>> be returned, and raise SEGV at lib/Sema/SemaCast.cpp:2101.
>>
>> This patch fixes this issue by removing the assertion and add some error
>> diagnostics as the one in static_cast.  Please have a look.  Thanks.
>>
>> Logan
>>
>
>
> _______________________________________________
> cfe-commits mailing list
> [email protected]
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to