a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
50 lines
940 B
C#
50 lines
940 B
C#
// Compiler options: -unsafe
|
|
|
|
using System;
|
|
using System.Runtime.InteropServices;
|
|
|
|
using S = A.T;
|
|
|
|
class A
|
|
{
|
|
[StructLayout (LayoutKind.Sequential)]
|
|
public struct T { int x; }
|
|
|
|
public class B
|
|
{
|
|
[StructLayout (LayoutKind.Sequential)]
|
|
struct S { int x; int y; }
|
|
S s;
|
|
|
|
public B () {
|
|
string error = "";
|
|
|
|
unsafe {
|
|
if (typeof (S *).GetElementType () != typeof (A.B.S))
|
|
error += " composed cast (pointer),";
|
|
|
|
if (sizeof (S) != sizeof (A.B.S))
|
|
error += " sizeof,";
|
|
|
|
S *p1 = stackalloc S [1];
|
|
|
|
if ((*p1).GetType () != typeof (A.B.S))
|
|
error += " local declaration, 'stackalloc' keyword,";
|
|
|
|
fixed (S *p2 = &s) {
|
|
if ((*p2).GetType () != typeof (A.B.S))
|
|
error += " class declaration, 'fixed' statement,";
|
|
}
|
|
}
|
|
|
|
if (error.Length != 0)
|
|
throw new Exception ("The following couldn't resolve S as A+B+S:" + error);
|
|
}
|
|
}
|
|
|
|
public static void Main()
|
|
{
|
|
object o = new A.B();
|
|
}
|
|
}
|