2016-02-22 11:00:01 -05:00
|
|
|
// Compiler options: -unsafe
|
|
|
|
|
|
|
|
using System;
|
|
|
|
using System.Reflection;
|
|
|
|
using System.Linq;
|
|
|
|
|
|
|
|
unsafe class Program
|
|
|
|
{
|
|
|
|
public static void Test ()
|
|
|
|
{
|
|
|
|
string s = "";
|
|
|
|
unsafe {
|
|
|
|
fixed (char *chars = s) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-05-10 08:37:03 +00:00
|
|
|
public static bool StringNull (string s)
|
|
|
|
{
|
|
|
|
unsafe {
|
|
|
|
fixed (char *a = s) {
|
|
|
|
return a == null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static bool ArrayNull (int[] a)
|
|
|
|
{
|
|
|
|
unsafe {
|
|
|
|
fixed (int *e = a) {
|
|
|
|
return e == null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-02-22 11:00:01 -05:00
|
|
|
public static int Main ()
|
|
|
|
{
|
|
|
|
Test ();
|
|
|
|
|
|
|
|
var m = typeof (Program).GetMethod ("Test");
|
|
|
|
var lv = m.GetMethodBody ().LocalVariables.Where (l => l.LocalType == typeof (char*)).Single ();
|
|
|
|
if (lv.IsPinned)
|
|
|
|
return 1;
|
|
|
|
|
2018-05-10 08:37:03 +00:00
|
|
|
if (!StringNull (null))
|
|
|
|
return 1;
|
|
|
|
|
|
|
|
if (!ArrayNull (null))
|
|
|
|
return 2;
|
|
|
|
|
2016-02-22 11:00:01 -05:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
}
|