[Mono-bugs] [Bug 82247][Nor] New - casting multidimensional jagged arrays swaps order on return
bugzilla-daemon at bugzilla.ximian.com
bugzilla-daemon at bugzilla.ximian.com
Tue Jul 31 04:21:17 EDT 2007
Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.
Changed by si-mono at perception.co.nz.
http://bugzilla.ximian.com/show_bug.cgi?id=82247
--- shadow/82247 2007-07-31 04:21:17.000000000 -0400
+++ shadow/82247.tmp.19390 2007-07-31 04:21:17.000000000 -0400
@@ -0,0 +1,102 @@
+Bug#: 82247
+Product: Mono: Compilers
+Version: 1.2
+OS:
+OS Details:
+Status: NEW
+Resolution:
+Severity:
+Priority: Normal
+Component: C#
+AssignedTo: rharinath at novell.com
+ReportedBy: si-mono at perception.co.nz
+QAContact: mono-bugs at ximian.com
+TargetMilestone: ---
+URL:
+Cc:
+Summary: casting multidimensional jagged arrays swaps order on return
+
+Please fill in this template when reporting a bug, unless you know what you
+are doing.
+Description of Problem:
+
+ When casting multi-dimensional jagged arrays, the cast seems to reverse
+the order of the arrays. Eg, [,][] (a 2 dimensional jagged array), gets
+casted to [][,].
+
+Note below that Clone works in terms of returning the correct order of
+arrays. I've also included a simple function to do the same thing, just to
+show that the Clone itself isn't the problem - it's the cast. If we don't
+cast, then it compiles fine.
+
+Steps to reproduce the problem:
+
+using System;
+namespace mono_bug {
+ class Program {
+ static void Main(string[] args) {
+
+ // initialise so no null errors
+ double[,][] foo = new double[1,1][];
+ foo[0,0] = new double[2];
+
+ double[,][] bar;
+
+ // fails with error CS0029:
+ // Cannot implicitly convert type `double[,][]' to `double[][,]'
+ bar = (double[,][])foo.Clone();
+
+ // also fails with error CS0029:
+ // Cannot implicitly convert type `double[,][]' to `double[][,]'
+ bar = (double[,][])ReturnArray();
+
+ // compiles & works correctly
+ bar = ReturnArray();
+
+ Console.WriteLine(bar[0,0][1].ToString());
+
+
+ }
+
+ private static double[,][] ReturnArray() {
+ // just creates a "useless", multi-dimensional jagged array
+ double[,][] zoo = new double[1,1][];
+ zoo[0,0] = new double[2];
+ zoo[0,0][0] = 1;
+ zoo[0,0][1] = 2;
+ return zoo;
+ }
+
+ }
+}
+
+
+Actual Results:
+
+/usr/bin/mono /usr/lib/mono/2.0/gmcs.exe
+-out:/home/si/code/mono/mono_bug/bin/Debug/mono_bug.exe -noconfig+
+-target:exe -debug+ -define:DEBUG;TRACE
+-reference:/usr/lib/mono/2.0/System.dll
+-reference:/usr/lib/mono/2.0/System.Data.dll
+-reference:/usr/lib/mono/2.0/System.Xml.dll
+"/home/si/code/mono/mono_bug/Program.cs"
+/home/si/code/mono/mono_bug/Program.cs(15,25): error CS0029: Cannot
+implicitly convert type `double[,][]' to `double[][,]'
+/home/si/code/mono/mono_bug/Program.cs(19,57): error CS0030: Cannot convert
+type `double[][,]' to `double[,][]'
+Compilation failed: 2 error(s), 0 warnings
+
+
+
+Expected Results:
+
+ Should compile correctly. .NET does.
+
+
+How often does this happen?
+
+ Every time.
+
+Additional Information:
+
+ Note that it's the explicit cast that causes the compiler to fail.
More information about the mono-bugs
mailing list