hubert.reinterpretcast added a comment.

In D109751#3136543 <https://reviews.llvm.org/D109751#3136543>, @qiucf wrote:

> Because the piece of code will be expanded to:
>
>   long double _Complex x;
>   
>   if ((__builtin_types_compatible_p(__typeof(creall(x)), _Float128)
>            ? __isinff128(creall(x))
>            : __builtin_isinf_sign(creall(x))) ||
>       (__builtin_types_compatible_p(__typeof(cimagl(x)), _Float128)
>            ? __isinff128(cimagl(x))
>            : __builtin_isinf_sign(cimagl(x))))
>     return inf;
>
> which requires 'long double' (the same semantics to `__ibm128` by default) 
> and '_Float128' are compatible.

Noting that the way the types are implemented in Clang, the conversion isn't 
the first problem with the above code. The types with the same representation 
are not considered "compatible" by Clang:

  extern char x[__builtin_types_compatible_p(long double, __ibm128) ? 1 : -1]; 
// errors
  extern char x[__builtin_types_compatible_p(long double, __ieee128) ? 1 : -1]; 
// errors too

Compiler Explorer link: https://godbolt.org/z/fP3MfdexM


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D109751

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

Reply via email to