================
@@ -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
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits