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

Reply via email to