[APFloat] Make functions that produce APFloaat objects use correct semantics.
Summary:
Fixes PR30869.
In D25977 I meant to change all functions that care about lifetime. I
changed constructors, factory functions, but I missed member/free
functions that return new instances. This patch changes them.
Reviewers: hfinkel, kbarton, echristo, joerg
Subscribers: llvm-commits, mehdi_amini
Differential Revision: https://reviews.llvm.org/D26269
llvm-svn: 286060
diff --git a/llvm/unittests/ADT/APFloatTest.cpp b/llvm/unittests/ADT/APFloatTest.cpp
index 18734eb..eea3222 100644
--- a/llvm/unittests/ADT/APFloatTest.cpp
+++ b/llvm/unittests/ADT/APFloatTest.cpp
@@ -1527,6 +1527,34 @@
// This is what we get with our 106-bit mantissa approximation
EXPECT_EQ(0x0000000000000000ull, test.bitcastToAPInt().getRawData()[1]);
#endif
+
+ // PR30869
+ {
+ auto Result = APFloat(APFloat::PPCDoubleDouble, "1.0") +
+ APFloat(APFloat::PPCDoubleDouble, "1.0");
+ EXPECT_EQ(&APFloat::PPCDoubleDouble, &Result.getSemantics());
+
+ Result = APFloat(APFloat::PPCDoubleDouble, "1.0") -
+ APFloat(APFloat::PPCDoubleDouble, "1.0");
+ EXPECT_EQ(&APFloat::PPCDoubleDouble, &Result.getSemantics());
+
+ Result = APFloat(APFloat::PPCDoubleDouble, "1.0") *
+ APFloat(APFloat::PPCDoubleDouble, "1.0");
+ EXPECT_EQ(&APFloat::PPCDoubleDouble, &Result.getSemantics());
+
+ Result = APFloat(APFloat::PPCDoubleDouble, "1.0") /
+ APFloat(APFloat::PPCDoubleDouble, "1.0");
+ EXPECT_EQ(&APFloat::PPCDoubleDouble, &Result.getSemantics());
+
+ int Exp;
+ Result = frexp(APFloat(APFloat::PPCDoubleDouble, "1.0"), Exp,
+ APFloat::rmNearestTiesToEven);
+ EXPECT_EQ(&APFloat::PPCDoubleDouble, &Result.getSemantics());
+
+ Result = scalbn(APFloat(APFloat::PPCDoubleDouble, "1.0"), 1,
+ APFloat::rmNearestTiesToEven);
+ EXPECT_EQ(&APFloat::PPCDoubleDouble, &Result.getSemantics());
+ }
}
TEST(APFloatTest, isNegative) {