[Mono-bugs] [Bug 80279][Nor] New - No error reported for assigning by index to returned struct

bugzilla-daemon at bugzilla.ximian.com bugzilla-daemon at bugzilla.ximian.com
Sat Dec 16 15:03:52 EST 2006


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 paul at floorball-flamingos.nl.

http://bugzilla.ximian.com/show_bug.cgi?id=80279

--- shadow/80279	2006-12-16 15:03:52.000000000 -0500
+++ shadow/80279.tmp.22004	2006-12-16 15:03:52.000000000 -0500
@@ -0,0 +1,115 @@
+Bug#: 80279
+Product: Mono: Compilers
+Version: 1.2
+OS: 
+OS Details: 
+Status: NEW   
+Resolution: 
+Severity: 
+Priority: Normal
+Component: C#
+AssignedTo: rharinath at novell.com                            
+ReportedBy: paul at floorball-flamingos.nl               
+QAContact: mono-bugs at ximian.com
+TargetMilestone: ---
+URL: 
+Cc: 
+Summary: No error reported for assigning by index to returned struct
+
+Description of Problem:
+
+Attempting to alter a struct being returned as 
+the value for a property is correctly flagged with 
+an error, in case the struct is altered by
+assigning to a member. But when that same return value
+is altered by assigning to an indexer, no error
+is returned.
+
+Hmm, not sure I got the terminology right here, 
+see below for an example.
+
+
+Steps to reproduce the problem:
+
+1. put the following code in a file, e.g. t.cs
+
+using System;
+
+public struct vec3
+{
+	public vec3(int xval, int yval, int zval)
+	{
+		x = xval;
+		y = yval;
+		z = zval;
+	}
+	
+	public override string ToString()
+	{
+		return String.Format("(vec3: {0}, {1}, {2})", x, y, z);
+	}
+	
+	public int this[int i]
+	{
+		set 
+		{
+			Console.WriteLine("setter!");
+			if (i == 0)
+				x = value;
+			else if (i == 1)
+				y = value;
+			else if (i == 2)
+				z = value;
+		}
+	}
+	
+	public int x, y, z;
+};
+
+class Test
+{
+	public static void Main()
+	{
+		Test t = new Test();
+		
+                // (1) gmcs trips (correctly) over this line...
+		t.v.x = 9;			
+
+                // (2) ...but not over this one
+		//t.v[0] = 9;
+	}	
+	
+	public Test()
+	{
+		m_value = new vec3(1,2,3);
+	}		
+		
+	public 	vec3 v	{ get { return m_value; } }		
+	
+	protected vec3	m_value;
+};
+
+2. compile with
+
+gmcs -out:t.exe t.cs
+
+An error gets (correctly) reported:
+
+t.cs(42,5): error CS1612: Cannot modify the return value of `Test.v'
+because it is not a variable
+Compilation failed: 1 error(s), 0 warnings
+
+3. Comment out line marked with (1), remove comment on
+line marked with (2)
+
+4. compile again
+
+no error reported
+
+
+I don't know what the MS compiler does with this case.
+
+
+Expected result:
+
+An error being reported for both cases


More information about the mono-bugs mailing list