From e79005956c888e7bafb602df1137f881b34775ec Mon Sep 17 00:00:00 2001 From: Michael Forney Date: Mon, 25 Oct 2021 15:59:54 -0700 Subject: eval: Fix int-to-float conversions Also, add bounds checks for float-to-int conversions. If the integer part can't be represented in the result type, C behavior is undefined. Although this means the result is arbitrary, we need to avoid undefined behavior in cproc itself when given such a program as input. --- test/initializer-cast-float-int.c | 1 + test/initializer-cast-float-int.qbe | 1 + test/initializer-cast-int-float.c | 1 + test/initializer-cast-int-float.qbe | 1 + 4 files changed, 4 insertions(+) create mode 100644 test/initializer-cast-float-int.c create mode 100644 test/initializer-cast-float-int.qbe create mode 100644 test/initializer-cast-int-float.c create mode 100644 test/initializer-cast-int-float.qbe (limited to 'test') diff --git a/test/initializer-cast-float-int.c b/test/initializer-cast-float-int.c new file mode 100644 index 0000000..42296e9 --- /dev/null +++ b/test/initializer-cast-float-int.c @@ -0,0 +1 @@ +int x = -1.0; diff --git a/test/initializer-cast-float-int.qbe b/test/initializer-cast-float-int.qbe new file mode 100644 index 0000000..675fc96 --- /dev/null +++ b/test/initializer-cast-float-int.qbe @@ -0,0 +1 @@ +export data $x = align 4 { w 18446744073709551615, } diff --git a/test/initializer-cast-int-float.c b/test/initializer-cast-int-float.c new file mode 100644 index 0000000..e041d90 --- /dev/null +++ b/test/initializer-cast-int-float.c @@ -0,0 +1 @@ +double x = -1; diff --git a/test/initializer-cast-int-float.qbe b/test/initializer-cast-int-float.qbe new file mode 100644 index 0000000..80b905e --- /dev/null +++ b/test/initializer-cast-int-float.qbe @@ -0,0 +1 @@ +export data $x = align 8 { d d_-1, } -- cgit v1.2.3