diff options
| author | Benjamin Kramer <benny.kra@googlemail.com> | 2018-01-17 22:56:57 +0000 |
|---|---|---|
| committer | Benjamin Kramer <benny.kra@googlemail.com> | 2018-01-17 22:56:57 +0000 |
| commit | 980579504ae2d169db4f414cef59ed04a702dadd (patch) | |
| tree | a47aeae2cd5130f2768170d8d7c1fdd8040d0d49 /clang/lib/Sema/SemaExpr.cpp | |
| parent | 46474dae4db40e2bbc79d9e11129cd0a30117cbf (diff) | |
| download | bcm5719-llvm-980579504ae2d169db4f414cef59ed04a702dadd.tar.gz bcm5719-llvm-980579504ae2d169db4f414cef59ed04a702dadd.zip | |
[Sema] Allow conversion between long double and __float128.
We should only ban this if long double is a double double. x86's 80 bit
long double is fine and supported by the backend.
llvm-svn: 322779
Diffstat (limited to 'clang/lib/Sema/SemaExpr.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index d7490b68a6f..23b3a0ccebf 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -1092,13 +1092,12 @@ static bool unsupportedTypeConversion(const Sema &S, QualType LHSType, Float128AndLongDouble |= (LHSElemType == S.Context.LongDoubleTy && RHSElemType == S.Context.Float128Ty); - /* We've handled the situation where __float128 and long double have the same - representation. The only other allowable conversion is if long double is - really just double. - */ + // We've handled the situation where __float128 and long double have the same + // representation. We allow all conversions for all possible long double types + // except PPC's double double. return Float128AndLongDouble && - (&S.Context.getFloatTypeSemantics(S.Context.LongDoubleTy) != - &llvm::APFloat::IEEEdouble()); + (&S.Context.getFloatTypeSemantics(S.Context.LongDoubleTy) == + &llvm::APFloat::PPCDoubleDouble()); } typedef ExprResult PerformCastFn(Sema &S, Expr *operand, QualType toType); |

