Created attachment 13890 [details]
The project.json file that is needed to run the program with dnx.
When using "stackalloc char[bufferSize]" and then passing bufferSize into another function, the Mono runtime will clear/zero out the bufferSize variable. This can be demonstrated with the following code:
public class Program
public unsafe static void Main(string args)
Program p = new Program();
string typeName = typeof(Program).Name;
int bufferSize = 45;
fixed (char* value = typeName)
char* buffer = stackalloc char[bufferSize];
p.EncodeIntoBuffer(value, typeName.Length, buffer, bufferSize);
private unsafe void EncodeIntoBuffer(char* value, int valueLength, char* buffer, int bufferLength)
Console.WriteLine("bufferLength is " + bufferLength);
I expect to get output that says "bufferLength is 45" which is what I get when running on the coreclr, but instead on the Mono runtime I get "bufferLength is 0".
I am using Mono version 18.104.22.168 on a MacBook Pro OS X El Capitan.
I am using 'dnx run' to run the program, not mcs/mono. (Although, the code doesn't work on mcs/mono either - I am getting an unexpected NullReferenceException when running it through mcs/mono.)
To set up a repro:
1. Install Mono on the Mac.
2. Install the ASP.NET 5 RC from http://get.asp.net
3. In a terminal, make sure you are using the mono runtime by running: dnvm use 1.0.0-rc1-final -r mono
4. Copy the attached project.json file into a folder. Also add the above code into the same folder, giving the file the name Program.cs.
5. In a terminal, navigate to the folder with Program.cs and project.json.
6. dnu restore
7. dnx run
Note: This bug was found through investigating the following higher-level issues:
Created attachment 13891 [details]
The C# code file that demonstrates the bug.
Fixed in mono master 27432be3ec4c65ba618b18389561b57e2b2716cb. Thanks for the report.