[PATCH] Constant expression evaluation support for __builtin_isinf
Karthik Bhat
kv.bhat at samsung.com
Tue Oct 1 00:55:45 PDT 2013
Hi rsmith, eli.friedman,
Hi,
Add const expression evaluation support for __builtin_isinf function.
This will prevent clang from reported errors in cases such as
constexpr long double num1 = __builtin_isinf(1.l);
Please let me know if this patch is good to commit.
Thanks
Karthik Bhat
http://llvm-reviews.chandlerc.com/D1794
Files:
test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p5.cpp
lib/AST/ExprConstant.cpp
Index: test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p5.cpp
===================================================================
--- test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p5.cpp
+++ test/CXX/dcl.dcl/dcl.spec/dcl.constexpr/p5.cpp
@@ -130,3 +130,20 @@
template class B<A>; // expected-note {{here}}
}
#endif
+
+// __builtin_isinf
+inline constexpr bool
+isinf(long double __x) {
+ return __builtin_isinf(__x);
+}
+
+inline constexpr bool
+isinf(double __x) {
+ return __builtin_isinf(__x);
+}
+
+void test_builtin_isinf() {
+ constexpr long double num1 = __builtin_isinf(1.l); // No error
+ constexpr long double num2 = isinf(1.l); // No error
+ constexpr double num3 = isinf(1.); // No error
+}
Index: lib/AST/ExprConstant.cpp
===================================================================
--- lib/AST/ExprConstant.cpp
+++ lib/AST/ExprConstant.cpp
@@ -5984,6 +5984,12 @@
return EvaluateFloat(E->getArg(0), Val, Info) &&
Success(Val.isInfinity() ? (Val.isNegative() ? -1 : 1) : 0, E);
}
+
+ case Builtin::BI__builtin_isinf: {
+ APFloat Val(0.0);
+ return EvaluateFloat(E->getArg(0), Val, Info) &&
+ Success(Val.isInfinity() ? 1 : 0, E);
+ }
case Builtin::BI__builtin_parity:
case Builtin::BI__builtin_parityl:
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D1794.1.patch
Type: text/x-patch
Size: 1295 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20131001/768c2f48/attachment.bin>
More information about the cfe-commits
mailing list