[verifier] Implement verification of byref returns.
[mono.git] / mono / tests / checked.cs
old mode 100755 (executable)
new mode 100644 (file)
index 659ed5f..f0ee569
@@ -25,7 +25,7 @@ namespace test {
 \r
 \r
                        if (!exception)\r
-                               return -1;\r
+                               return 1;\r
 \r
                        exception = false;\r
 \r
@@ -37,12 +37,12 @@ namespace test {
                                        i = (int)a;\r
                                }\r
                        } catch (Exception) {\r
-                               return -2;\r
+                               return 2;\r
                        }\r
 \r
 \r
                        if (i != 100000)\r
-                               return -3;\r
+                               return 3;\r
                \r
                        exception = false;\r
 \r
@@ -78,7 +78,7 @@ namespace test {
 \r
 \r
                        if (!exception)\r
-                               return -4;\r
+                               return 4;\r
 \r
                        a  = 1e5f;\r
                        try {\r
@@ -88,13 +88,101 @@ namespace test {
                                }\r
                        } \r
                        catch (Exception) {\r
-                               return -5;\r
+                               return 5;\r
                        }\r
 \r
                        if (ui != 100000)\r
-                               return -6;\r
-                       \r
-                       \r
+                               return 6;\r
+\r
+                       // Check mul.ovf\r
+                       checked {\r
+                               int l;\r
+                               int m;\r
+\r
+                               int[][] cases = new int [][] { \r
+                                       new int [] {0, 0, 0},\r
+                                       new int [] {-5, 0, 0},\r
+                                       new int [] {3, -5, -15},\r
+                                       new int [] {3, 5, 15},\r
+                                       new int [] {-3, -5, 15},\r
+                                       new int [] {-3, 5, -15},\r
+                                       new int [] {-1, 32767, -32767},\r
+                                       new int [] {32767, -1, -32767}};\r
+\r
+\r
+                               for (int j = 0; j < cases.Length; ++j)\r
+                                       if (cases [j][0] * cases [j][1] != cases [j][2])\r
+                                               return 7 + j;\r
+                       }\r
+\r
+                       checked {\r
+                               int j;\r
+                               int k;\r
+\r
+                               j = k = 0;\r
+                               if (j * k != 0)\r
+                                       return 20;\r
+\r
+                               j = -5;\r
+                               k = 0;\r
+                               if (j * k != 0)\r
+                                       return 21;\r
+\r
+                               j = 0;\r
+                               k = -5;\r
+                               if (j * k != 0)\r
+                                       return 22;\r
+\r
+                               j = 3;\r
+                               k = -5;\r
+                               if (j * k != -15)\r
+                                       return 23;\r
+\r
+                               j = 3;\r
+                               k = 5;\r
+                               if (j * k != 15)\r
+                                       return 24;\r
+\r
+                               j = -3;\r
+                               k = -5;\r
+                               if (j * k != 15)\r
+                                       return 25;\r
+\r
+                               j = -3;\r
+                               k = 5;\r
+                               if (j * k != -15)\r
+                                       return 26;\r
+\r
+                               j = -1;\r
+                               k = 32767;\r
+                               if (j * k != -32767)\r
+                                       return 27;\r
+                               \r
+                               j = 32767;\r
+                               k = -1;\r
+                               if (j * k != -32767)\r
+                                       return 28;\r
+                       }\r
+\r
+                       checked {\r
+                               long l;\r
+                               long m;\r
+\r
+                               long[][] cases = new long [][] { \r
+                                       new long [] {0, 0, 0},\r
+                                       new long [] {-5, 0, 0},\r
+                                       new long [] {3, -5, -15},\r
+                                       new long [] {3, 5, 15},\r
+                                       new long [] {-3, -5, 15},\r
+                                       new long [] {-3, 5, -15},\r
+                                       new long [] {-1, 2147483647, -2147483647},\r
+                                       new long [] {2147483647, -1, -2147483647}};\r
+\r
+                               for (int j = 0; j < cases.Length; ++j)\r
+                                       if (cases [j][0] * cases [j][1] != cases [j][2])\r
+                                               return 29 + j;\r
+                       }\r
+                               \r
                        Console.WriteLine("test-ok");\r
 \r
                        return 0;\r