hubert.reinterpretcast added a comment.

In http://reviews.llvm.org/D15120#336827, @rjmccall wrote:

> Here's the thing, though: I don't think there's a reasonable language 
> solution here besides saying that float128_t has higher rank.  You can't make 
> the types incompatible, because it's clearly reasonable to simply convert one 
> to the other.  What you're trying to say is that they don't have a common 
> type, but it's a novel concept in C/C++ to have two arithmetic types that 
> don't have a common type and therefore cannot be added / compared / ternary'd 
> together.  In contrast, it is not a novel concept to have a type that 
> implicitly promotes to another type but potentially loses precision, because 
> all the integer types will happily convert to float/double.


I believe that decimal floating point types introduced the situation of having 
two arithmetic types that don't have a common type into "C".

> This patch will be much simpler, and you will get a better language design, 
> if you simply make float128_t a new FP type with a higher rank than long 
> double.


The C committee decided that "undefined behavior" was what they could agree on 
for this sort of case. I suppose that on most platforms float128_t logically 
has the higher rank and it would be a shame to have source portability issues 
because the expression would need more casts on PPC. Even the narrowing 
conversion semantics in C++ is fine with losing precision.


Repository:
  rL LLVM

http://reviews.llvm.org/D15120



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

Reply via email to