--- /dev/null
+// CS0029: Cannot implicitly convert type `char' to `char*'
+// Line: 15
+// Compiler options: -unsafe
+
+unsafe struct MyStruct
+{
+ public fixed char Name[32];
+}
+
+unsafe class MainClass
+{
+ public static void Main ()
+ {
+ var str = new MyStruct ();
+ str.Name = default (char);
+ }
+}
--- /dev/null
+// CS0131: The left-hand side of an assignment must be a variable, a property or an indexer
+// Line: 15
+// Compiler options: -unsafe
+
+unsafe struct MyStruct
+{
+ public fixed char Name[32];
+}
+
+unsafe class MainClass
+{
+ public static void Main ()
+ {
+ var str = new MyStruct();
+ str.Name = null;
+ }
+}
override public Expression DoResolveLValue (ResolveContext ec, Expression right_side)
{
+ if (spec is FixedFieldSpec) {
+ // It could be much better error message but we want to be error compatible
+ Error_ValueAssignment (ec, right_side);
+ }
+
Expression e = DoResolve (ec, right_side);
if (e == null)
FieldBuilder = Parent.TypeBuilder.DefineField (Name, fixed_buffer_type, ModifiersExtensions.FieldAttr (ModFlags));
var element_spec = new FieldSpec (null, this, MemberType, ffield, ModFlags);
- spec = new FixedFieldSpec (Parent.Definition, this, FieldBuilder, element_spec, ModFlags);
+ spec = new FixedFieldSpec (Module, Parent.Definition, this, FieldBuilder, element_spec, ModFlags);
Parent.MemberCache.AddMember (spec);
return true;
{
readonly FieldSpec element;
- public FixedFieldSpec (TypeSpec declaringType, IMemberDefinition definition, FieldInfo info, FieldSpec element, Modifiers modifiers)
- : base (declaringType, definition, element.MemberType, info, modifiers)
+ public FixedFieldSpec (ModuleContainer module, TypeSpec declaringType, IMemberDefinition definition, FieldInfo info, FieldSpec element, Modifiers modifiers)
+ : base (declaringType, definition, PointerContainer.MakeType (module, element.MemberType), info, modifiers)
{
this.element = element;
return element;
}
}
-
+
public TypeSpec ElementType {
get {
- return MemberType;
+ return element.MemberType;
}
}
}
// TODO: Sanity check on field_type (only few types are allowed)
var element_field = CreateField (fi.FieldType.GetField (FixedField.FixedElementName), declaringType);
- return new FixedFieldSpec (declaringType, definition, fi, element_field, mod);
+ return new FixedFieldSpec (module, declaringType, definition, fi, element_field, mod);
}
}