* src/SDCCmem.c (allocDefault): removed check sym->level==0 for SPEC_ABSA,
[fw/sdcc] / support / regression / tests / staticinit.c
index 794b729ea69b00ea371220c6f532af8f2d4351bd..4f03698eb08d584cfec2571079f7083d5549d01d 100644 (file)
@@ -3,6 +3,7 @@
 
     type: char, int, long
 */
+
 #include <testfwk.h>
 
 static {type} smallDense[] = {
@@ -20,6 +21,9 @@ testSmallDense(void)
     ASSERT(smallDense[5] == 6);
 }
 
+#ifdef SDCC_mcs51
+idata at 0xa0  /* leave space for the stack */
+#endif
 static {type} smallSparse[] = {
     1, 1, 1, 1, 1, 1, 1, 1, 1
 };
@@ -38,7 +42,88 @@ testSmallSparse(void)
     ASSERT(smallSparse[8] == 1);
 }
 
+#ifdef SDCC_mcs51
+idata at 0xd0
+#endif
 static {type} smallSparseZero[] = {
     0, 0, 0, 0, 0, 0, 0, 0, 0
 };
 
+static {type} smallSparseZeroTail[] = {
+    1, 2, 3
+};
+
+static void
+testSmallSparseZero(void)
+{
+    ASSERT(smallSparseZero[0] == 0);
+    ASSERT(smallSparseZero[1] == 0);
+    ASSERT(smallSparseZero[2] == 0);
+    ASSERT(smallSparseZero[3] == 0);
+    ASSERT(smallSparseZero[4] == 0);
+    ASSERT(smallSparseZero[5] == 0);
+    ASSERT(smallSparseZero[6] == 0);
+    ASSERT(smallSparseZero[7] == 0);
+    ASSERT(smallSparseZero[8] == 0);
+
+    // Make the compiler happy
+    ASSERT(smallSparseZeroTail[0] == 1);
+}
+
+#ifdef SDCC_mcs51
+xdata
+#elif SDCC_pic16
+code
+#endif
+static {type} largeMixed[] = {
+    1, 2, 3, 4, 5, 6, 7,       /* 0-6 */
+    1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1,    /* 8*12 = 96+7 = -102 */
+    1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1,
+    1, 1, 1, 1, 1, 1, 1, 1,
+    3, 4, 5, 6, 3, 4, 5, 6,    /* 8*17 = 136+7 */
+    3, 4, 5, 6, 3, 4, 5, 6,
+    3, 4, 5, 6, 3, 4, 5, 6,
+    3, 4, 5, 6, 3, 4, 5, 6,
+    3, 4, 5, 6, 3, 4, 5, 6,
+    3, 4, 5, 6, 3, 4, 5, 6,
+    3, 4, 5, 6, 3, 4, 5, 6,
+    3, 4, 5, 6, 3, 4, 5, 6,
+    3, 4, 5, 6, 3, 4, 5, 6,
+    3, 4, 5, 6, 3, 4, 5, 6,
+    3, 4, 5, 6, 3, 4, 5, 6,
+    3, 4, 5, 6, 3, 4, 5, 6,
+    3, 4, 5, 6, 3, 4, 5, 6,
+    3, 4, 5, 6, 3, 4, 5, 6,
+    3, 4, 5, 6, 3, 4, 5, 6,
+    3, 4, 5, 6, 3, 4, 5, 6,
+    3, 4, 5, 6, 3, 4, 5, 6
+};
+
+static void
+testLargeMixed(void)
+{
+    ASSERT(largeMixed[0] == 1);
+    ASSERT(largeMixed[1] == 2);
+    ASSERT(largeMixed[7] == 1);
+    ASSERT(largeMixed[102] == 1);
+    ASSERT(largeMixed[143] == 3);
+    ASSERT(largeMixed[143+8] == 3);
+    ASSERT(largeMixed[143+16] == 3);
+    ASSERT(largeMixed[143+1] == 4);
+    ASSERT(largeMixed[143+8+1] == 4);
+    ASSERT(largeMixed[143+16+1] == 4);
+}