Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

61 lines
1.1 KiB
C#

// Compiler options: -unsafe
using System;
using System.Runtime.InteropServices;
class FixedTest
{
[StructLayout (LayoutKind.Explicit)]
public unsafe struct Value
{
[FieldOffset (0)]
public void* p;
[FieldOffset (0)]
public double n;
[FieldOffset (0)]
public long i;
[FieldOffset (0)]
public bool b;
}
[StructLayout (LayoutKind.Sequential, Pack = 4)]
public unsafe struct TValue
{
public Value value;
public TValue (long x)
{
value = new Value ();
value.i = x;
}
public override string ToString ()
{
return value.i.ToString ();
}
}
unsafe public static int Main ()
{
TValue[] values = new TValue[10];
values[0] = new TValue (0L);
values[1] = new TValue (1000L);
values[2] = new TValue (1L);
Console.WriteLine ("values: {0} {1} {2}", values[0], values[1], values[2]);
fixed (TValue* vals = values) {
Console.WriteLine ("fixed: {0} {1} {2}", vals[0], vals[1], vals[2]);
if (vals[0].ToString () != "0")
return 1;
if (vals[1].ToString() != "1000")
return 2;
if (vals[2].ToString() != "1")
return 3;
}
Console.WriteLine ("ok");
return 0;
}
}