nemanjai added a comment.

Seems that conversion diagnostic test cases are completely missing.



================
Comment at: clang/include/clang/Basic/TargetInfo.h:680
+  /// Return the mangled code of __ibm128.
+  virtual const char *getIbm128Mangling() const { return "g"; }
+
----------------
The same mangling for both of these types seems incorrect as Steven pointed 
out. Why not do something similar to what was done for `bfloat16` (i.e. an 
`llvm_unreachable`) and override it for PowerPC?


================
Comment at: clang/lib/AST/ASTContext.cpp:6204
     case HalfRank: llvm_unreachable("Complex half is not supported");
+    case Ibm128Rank: llvm_unreachable("Complex __ibm128 is not supported");
     case FloatRank:      return FloatComplexTy;
----------------
Why? Is this coming in an upcoming patch or is this something that will never 
be available?


================
Comment at: clang/lib/AST/ASTContext.cpp:6230
 /// LHS < RHS, return -1.
 int ASTContext::getFloatingTypeOrder(QualType LHS, QualType RHS) const {
   FloatingRank LHSR = getFloatingRank(LHS);
----------------
hubert.reinterpretcast wrote:
> I think this function should vocally fail when presented with "unordered" 
> cases.
But is it possible to emit errors here or should there be code explicitly added 
to Sema to disallow conversions between `__ibm128` and `__float128` (and `long 
double` to/from either of those to which it is not equivalent)?


================
Comment at: clang/lib/Sema/SemaExpr.cpp:1229
+           &llvm::APFloat::PPCDoubleDouble())) ||
+         EitherIbm128;
 }
----------------
hubert.reinterpretcast wrote:
> Same comment about possible blocking of `double` to `__ibm128` conversions.
I am not sure what "same comment" refers to, but I agree that this seems very 
wrong - doesn't this mean that we can't convert between `__ibm128` and any 
other floating point type?
In any case, I think this can be represented quite concisely as something like:
`if (<types have same size> && <types do not have same fltSemantics>)`


================
Comment at: clang/lib/Sema/SemaOverload.cpp:1887
+          FromType == S.Context.Ibm128Ty || ToType == S.Context.Ibm128Ty;
+      if ((Float128AndLongDouble &&
+           (&S.Context.getFloatTypeSemantics(S.Context.LongDoubleTy) ==
----------------
hubert.reinterpretcast wrote:
> This seems to disable conversion from `double` to `__ibm128`?
Oh, now I understand the "same comment" comment above. Yes, this appears to 
also be a case where we don't want to allow types of the same width but 
different representation.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D93377/new/

https://reviews.llvm.org/D93377

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to