+/*
+ * [ 2655200 ] pointer to pdata memory not correctly initialized
+ *
+ * test_array[..] = &thing_pdata
+ * was incorrect
+ *
+ * SDCCclue.c(initPointer)
+ * ... SPEC_SCLS (expr->left->etype) == S_PDATA)
+ * was not handeled
+ */
+
+#include <testfwk.h>
+#include <stdint.h>
+
+#if !defined (SDCC_mcs51) && !defined (SDCC_ds390)
+# define __code
+#endif
+
+char thing;
+#if defined (SDCC_mcs51) || defined (SDCC_ds390)
+__code char thing_code = 0;
+__data char thing_data;
+__idata char thing_idata;
+__xdata char thing_xdata;
+__pdata char thing_pdata;
+__pdata char thing_apdata[2];
+#endif
+
+
+char * __code test_array[] = {
+ &thing
+#if defined (SDCC_mcs51) || defined (SDCC_ds390)
+ , &thing_code
+ , &thing_data, &thing_idata, &thing_xdata, &thing_pdata
+ , thing_apdata, (char *)thing_apdata
+#endif
+};
+
+
+char *gime_thing() { return &thing; }
+#if defined (SDCC_mcs51) || defined (SDCC_ds390)
+char *gime_thing_code() { return &thing_code; }
+char *gime_thing_data() { return &thing_data; }
+char *gime_thing_idata() { return &thing_idata; }
+char *gime_thing_xdata() { return &thing_xdata; }
+char *gime_thing_pdata() { return &thing_pdata; }
+char *gime_thing_apdata() { return thing_apdata; }
+#endif
+
+
+void
+testBug(void)
+{
+#if !defined (SDCC_MODEL_MEDIUM) /* test-mcs51-medium fails */
+ ASSERT(test_array[0] == gime_thing());
+#endif
+
+#if defined (SDCC_mcs51) || defined (SDCC_ds390)
+ ASSERT(test_array[1] == gime_thing_code());
+ ASSERT(test_array[2] == gime_thing_data());
+ ASSERT(test_array[3] == gime_thing_idata());
+ ASSERT(test_array[4] == gime_thing_xdata());
+ ASSERT(test_array[5] == gime_thing_pdata());
+ ASSERT(test_array[6] == gime_thing_apdata());
+ ASSERT(test_array[7] == gime_thing_apdata());
+#endif
+}