aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--test/C++Frontend/2003-05-21-UnionBitfields.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/test/C++Frontend/2003-05-21-UnionBitfields.c b/test/C++Frontend/2003-05-21-UnionBitfields.c
new file mode 100644
index 0000000..b9d954a
--- /dev/null
+++ b/test/C++Frontend/2003-05-21-UnionBitfields.c
@@ -0,0 +1,22 @@
+#include <stdio.h>
+#include <math.h>
+
+int target_isinf(double x) {
+ union {
+ double d;
+ struct {
+ unsigned mantissa2;
+ unsigned mantissa1 : 20;
+ unsigned exponent : 11;
+ unsigned sign : 1;
+ } big_endian;
+ } u;
+
+ u.d = x;
+ return (u.big_endian.exponent == 2047 && u.big_endian.mantissa1 == 0 && u.big_endian.mantissa2 == 0);
+}
+
+int main() {
+ printf("%d %d\n", target_isinf(1234.42), target_isinf(INFINITY));
+ return 0;
+}