[PATCH] Fix diagnostics for C-style cast to function type

Richard Smith richard at metafoo.co.uk
Fri Apr 11 12:45:28 PDT 2014


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 <tzuhsiang.chien at gmail.com>wrote:

> Ping?
>
>
> On Mon, Mar 17, 2014 at 11:59 PM, Logan Chien <tzuhsiang.chien at gmail.com>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
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140411/ccdfacbd/attachment.html>


More information about the cfe-commits mailing list