================
@@ -5254,7 +5250,11 @@ bool CheckAllArgsHaveFloatRepresentation(Sema *S, 
CallExpr *TheCall) {
   QualType ExpectedType = S->Context.FloatTy;
   for (unsigned i = 0; i < TheCall->getNumArgs(); ++i) {
     QualType PassedType = TheCall->getArg(i)->getType();
-    if (!PassedType->hasFloatingRepresentation()) {
+    ExpectedType = PassedType->isHalfType() && S->getLangOpts().NativeHalfType
+                       ? S->Context.HalfTy
+                       : S->Context.FloatTy;
+    if (PassedType == S->Context.DoubleTy ||
+        !PassedType->hasFloatingRepresentation()) {
----------------
bogner wrote:

I'm confused about a couple of things here, and it doesn't really look right.
1. hasFloatingRepresentation returns true for any floating point type, but 
we're explicitly excluding double. Do we really want this to diagnose on double 
but not for Long Double, BFloat16, or Ibm128?
2. The name of this function is a bit ambiguous - is it supposed to be checking 
for exactly `float` (as the `ExpectedType` before this change implies) or "any 
floating point type" (as the use of `hasFloatingRepresentation` implies)? As is 
it doesn't do either of those things.
3. Why is `ExpectedType` usually `float` but sometimes `half`?
4. I don't think the `half` diagnostic is tested - it should presumably read 
"passing 'XYZ' to parameter of incompatible type 'half'"

https://github.com/llvm/llvm-project/pull/84526
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to