2007-12-27 Rodrigo Kumpera <rkumpera@novell.com>
[mono.git] / mono / tests / verifier / make_exception_overlap_test.sh
diff --git a/mono/tests/verifier/make_exception_overlap_test.sh b/mono/tests/verifier/make_exception_overlap_test.sh
new file mode 100755 (executable)
index 0000000..0534742
--- /dev/null
@@ -0,0 +1,159 @@
+#! /bin/sh
+
+TEST_NAME=$1
+TEST_VALIDITY=$2
+TEST_BLOCK_1=$3
+TEST_BLOCK_2=$4
+TEST_WITH_FILTER_BLOCK=$5
+TEST_WITH_FINALLY_BLOCK=$6
+
+if [ "$TEST_WITH_FILTER_BLOCK" == "yes" ]; then
+       FILTER_BLOCK="
+FILTER_BLOCK_3:
+       nop
+
+       ldloca 1
+       volatile.
+AFTER_PREFIX_3:
+       unaligned. 1
+       ldind.i4
+       pop
+
+FILTER_BLOCK_3_A:
+       stloc.0 
+       nop
+       nop
+       ldc.i4.0
+       endfilter
+FILTER_BLOCK_3_END:"
+else
+       FILTER_BLOCK="";
+fi
+
+if [ "$TEST_WITH_FINALLY_BLOCK" == "yes" ]; then
+       FINALLY_BLOCK="
+FINALLY_BLOCK_1:
+       nop
+
+       ldloca 1
+       volatile.
+AFTER_PREFIX_6:
+       unaligned. 1
+       ldind.i4
+       pop
+
+FINALLY_BLOCK_1_A:
+       stloc.0 
+       nop
+       nop
+       ldc.i4.0
+       endfinally
+FINALLY_BLOCK_1_END:"
+else
+       FINALLY_BLOCK="";
+fi
+
+
+TEST_FILE=${TEST_VALIDITY}_${TEST_NAME}_generated.il
+echo $TEST_FILE
+
+sed -e "s/EXCEPTION_BLOCK_1/${TEST_BLOCK_1}/g" -e "s/EXCEPTION_BLOCK_2/${TEST_BLOCK_2}/g" > $TEST_FILE <<//EOF
+// VALIDITY CIL
+
+.assembly '${TEST_VALIDITY}_${TEST_NAME}_generated'
+{
+  .hash algorithm 0x00008004
+  .ver  0:0:0:0
+}
+
+.method public static int32 Main() cil managed
+{
+        .entrypoint
+        .maxstack 8
+       .locals init (object _X0, int32 V0)
+       ldloca 1
+       volatile.
+AFTER_PREFIX_1:
+       unaligned. 1
+       ldind.i4
+       pop
+
+       
+TRY_BLOCK_1:
+       nop
+TRY_BLOCK_1_A:
+       nop
+       newobj instance void class [mscorlib]System.Exception::.ctor()
+       throw
+       nop
+       leave END
+TRY_BLOCK_1_END:
+
+       ldloca 1
+       volatile.
+AFTER_PREFIX_4:
+       unaligned. 1
+       ldind.i4
+       pop
+       leave END
+
+
+${FILTER_BLOCK}
+${FINALLY_BLOCK}
+
+
+CATCH_BLOCK_1:
+       nop
+CATCH_BLOCK_1_A:
+       stloc.0 
+       nop
+
+       ldloca 1
+       volatile.
+AFTER_PREFIX_2:
+       unaligned. 1
+       ldind.i4
+       pop
+
+       nop
+       leave END
+CATCH_BLOCK_1_END:
+
+       ldloca 1
+       volatile.
+AFTER_PREFIX_5:
+       unaligned. 1
+       ldind.i4
+       pop
+       leave END
+
+TRY_BLOCK_2:
+       nop
+TRY_BLOCK_2_A:
+       nop
+       newobj instance void class [mscorlib]System.Exception::.ctor()
+       throw
+       nop
+       leave END
+TRY_BLOCK_2_END:
+
+
+CATCH_BLOCK_2:
+       nop
+CATCH_BLOCK_2_A:
+       stloc.0 
+       nop
+       nop
+       leave END
+CATCH_BLOCK_2_END:
+
+
+END:
+        ldc.i4.0
+        ret
+
+       EXCEPTION_BLOCK_1
+       EXCEPTION_BLOCK_2
+}
+//EOF