* src/SDCCast.c (createIvalType, createIvalStruct, createIvalArray,
[fw/sdcc] / support / regression / tests / zeropad.c
index e04bb8848dc1d7d890d29c4e989f1b79774b47ce..24576a899adf241b2cbe74f19396751325d4a118 100644 (file)
@@ -1,15 +1,20 @@
 /** Zeropad tests.
 
-    storage: idata, xdata, code,
+    storage: auto, idata, pdata, xdata, code,
 */
 #ifndef STORAGE
+#define STORAGE_{storage}
 #define STORAGE {storage}
 #endif
 
-#if defined __GNUC__
-  #define FLEXARRAY (__GNUC__ >= 3)
-  //since g fails on GCC 2.95.4 on alpha and I don't know how to detect alpha...
-  #define TEST_G    (__GNUC__ >= 3)
+#if defined (__GNUC__) && defined (__alpha__) && (__GNUC__ < 3)
+  /* since g fails on GCC 2.95.4 on alpha... */
+  #define FLEXARRAY 0
+  #define TEST_G    0
+#elif defined (STORAGE_auto)
+  /* only static flexible arrays are allowed */
+  #define FLEXARRAY 0
+  #define TEST_G    1
 #else
   #define FLEXARRAY 1
   #define TEST_G    1
 typedef unsigned int size_t;
 #define offsetof(s,m)   (size_t)&(((s *)0)->m)
 
-#if defined(PORT_HOST) || defined(SDCC_z80) || defined(SDCC_gbz80)
-# define idata
-# define xdata
-# define code
-#endif
-#if defined(SDCC_hc08)
-# define idata
-#endif
+#if defined (STORAGE_auto)
+  void Zeropad(void)
+  {
+#endif //STORAGE_auto
 
 const char *string1 = "\x00\x01";
 const char string2[] = "\x00\x01";
 
 #ifndef PORT_HOST
 #pragma disable_warning 147 //no warning about excess initializers (W_EXCESS_INITIALIZERS)
+#pragma disable_warning  85 //no warning about unreferenced variables (W_NO_REFERENCE)
 //array will be truncated but warning will be suppressed
 //if truncation is incorrect, other ASSERTs will fail with high probability
 char STORAGE trunc[2] = {'a', 'b', 'c'};
@@ -74,10 +76,14 @@ struct y STORAGE incompletestruct = {
 };
 #endif
 
-void
-testZeropad(void)
+#if !defined (STORAGE_auto)
+void Zeropad(void)
 {
+#endif //STORAGE_auto
+
+  ASSERT(string1[0] == '\x00');
   ASSERT(string1[1] == '\x01');
+  ASSERT(string2[0] == '\x00');
   ASSERT(string2[1] == '\x01');
 
   ASSERT(array[2] == 'c');
@@ -109,4 +115,23 @@ testZeropad(void)
   ASSERT(sizeof(incompletestruct) == offsetof(struct y, b));
   ASSERT(sizeof(incompletestruct) == offsetof(struct x, b));
 #endif
+
+#if defined (STORAGE_auto)
+  array[4] = 1;
+#if TEST_G
+  g[1].b = 1;
+#endif
+  teststruct[0].b[5] = 1;
+  teststruct[4].b[9] = 1;
+#endif //STORAGE_auto
+}
+
+void
+testZeropad(void)
+{
+  Zeropad();
+
+#if defined (STORAGE_auto)
+  Zeropad(); //test reinitialization
+#endif //STORAGE_auto
 }