On Mar 7, 2013, at 8:39 PM, Alexander Zinenko <[email protected]> wrote:
> Ping?
+bool Sema::SameTypesOrCompatibleFunctions(QualType Param,
+ QualType Arg) {
We're starting function names with a lowercase letter now. How about calling
this isSameOrCompatibleFunctionType?
+ if (!ParamFunction || !ArgFunction)
+ return Param == Arg;
Please change the parameters to CanQualTypes, because these == operations only
work because we know we're getting canonical types, and that's not clear from
the interface.
+ if (IsNoReturnConversion(Param, Arg, AdjustedParam))
+ return Arg == AdjustedParam;
You'll probably need to recanonicalize AdjustedParam here.
+ // TODO(ftynse): Compatible calling conventions.
+
Usually we just write "FIXME: what we need to fix"
Otherwise, this patch looks great!
- Doug
>
> On 26 February 2013 23:26, Alexander Zinenko <[email protected]> wrote:
> Hello, John!
>
> Thanks for your comments!
> I introduced a flag that allows noreturn mismatches only if template
> deduction is called during overload resolution. It allowed also to use
> function calls only in these cases while just comparing pointers in all the
> other cases.
>
> Just comparing types will not work unless noreturn and non-noreturn functions
> have the same type, but this is not the thing we want according to the recent
> discussion on PR15105. While it is possible to build a similar function type
> without noreturn and compare against it, this would not work for implicit
> default calling conventions that require the same logic in overload as
> noreturn functions.
>
> Is this patch better?
>
> --
> Alex
>
>
> On 26 February 2013 02:48, John McCall <[email protected]> wrote:
> On Feb 25, 2013, at 8:34 AM, Alexander Zinenko <[email protected]> wrote:
> > This patch allows function templates with GNU noreturn attribute to
> > participate in overload resolution as non-noreturn ones. Same behavior is
> > allowed for functions now.
> > The patch only allows deducing such types since the necessary adjustments
> > are already performed in corresponding functions (like in
> > IsStandardConversion).
>
> This function does a lot of work to make sure that the final equality
> comparison is a (fast) pointer equality test, and you're replacing it with a
> (slow) function call.
>
> Also, we definitely don't want to allow noreturn mismatches in every context.
>
> John.
>
>
>
> <PR15291.patch>_______________________________________________
> 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