summaryrefslogtreecommitdiff
path: root/support/regression/tests/bug-2357.c
diff options
context:
space:
mode:
authorXavier ASUS <xavi92psx@gmail.com>2019-10-18 00:31:54 +0200
committerXavier ASUS <xavi92psx@gmail.com>2019-10-18 00:31:54 +0200
commit268a53de823a6750d6256ee1fb1e7707b4b45740 (patch)
tree42c1799a9a82b2f7d9790ee9fe181d72a7274751 /support/regression/tests/bug-2357.c
downloadsdcc-gas-268a53de823a6750d6256ee1fb1e7707b4b45740.tar.gz
sdcc-3.9.0 fork implementing GNU assembler syntax
This fork aims to provide better support for stm8-binutils
Diffstat (limited to 'support/regression/tests/bug-2357.c')
-rw-r--r--support/regression/tests/bug-2357.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/support/regression/tests/bug-2357.c b/support/regression/tests/bug-2357.c
new file mode 100644
index 0000000..e66ef81
--- /dev/null
+++ b/support/regression/tests/bug-2357.c
@@ -0,0 +1,63 @@
+/*
+ bug-2357.c
+ */
+
+#include <testfwk.h>
+#include <string.h>
+
+#ifdef __SDCC
+#pragma std_c99
+#endif
+
+#if defined (__SDCC) && !defined (__SDCC_pdk14) && !defined (__SDCC_pdk15) && (!defined (__SDCC_mcs51) || (!defined (__SDCC_MODEL_SMALL) && !defined (__SDCC_MODEL_MEDIUM) && !defined (__SDCC_STACK_AUTO)))
+
+short i = -1;
+union {
+ short sv0[126];
+ short sv1[132];
+ long lv0[63];
+ long lv1[66];
+} uv;
+
+short
+foo2(void)
+{
+ return uv.sv1[132 + i];
+}
+
+long
+foo3(void)
+{
+ return uv.lv1[66 + i];
+}
+
+short
+foo4(void)
+{
+ return uv.sv0[126 + i];
+}
+
+long
+foo5(void)
+{
+ return uv.lv0[63 + i];
+}
+
+#endif
+
+void
+testBug (void)
+{
+#if defined (__SDCC) && !defined (__SDCC_pdk14) && !defined (__SDCC_pdk15) && (!defined (__SDCC_mcs51) || (!defined (__SDCC_MODEL_SMALL) && !defined (__SDCC_MODEL_MEDIUM) && !defined (__SDCC_STACK_AUTO)))
+
+ memset(&uv, 0x33, 128);
+ memset((char *) &uv + 128, 0x55, 136);
+
+ ASSERT (foo2() == 0x5555);
+ ASSERT (foo3() == 0x55555555L);
+
+ ASSERT (foo4() == 0x5555);
+ ASSERT (foo5() == 0x55555555L);
+
+#endif
+}