var field = struct_info.Fields[i];
if (!fc.IsStructFieldDefinitelyAssigned (vi, field.Name)) {
- if (field.MemberDefinition is Property.BackingField) {
+ var bf = field.MemberDefinition as Property.BackingField;
+ if (bf != null) {
+ if (bf.Initializer != null)
+ continue;
+
fc.Report.Error (843, loc,
"An automatically implemented property `{0}' must be fully assigned before control leaves the constructor. Consider calling the default struct contructor from a constructor initializer",
field.GetSignatureForError ());
- } else {
- fc.Report.Error (171, loc,
- "Field `{0}' must be fully assigned before control leaves the constructor",
- field.GetSignatureForError ());
+
+ ok = false;
+ continue;
}
+
+ fc.Report.Error (171, loc,
+ "Field `{0}' must be fully assigned before control leaves the constructor",
+ field.GetSignatureForError ());
ok = false;
}
}
public DefiniteAssignmentBitSet (DefiniteAssignmentBitSet source)
{
- large_bits = source.large_bits;
- bits = source.bits | copy_on_write_flag;
+ if (source.large_bits != null) {
+ large_bits = source.large_bits;
+ bits = source.bits | copy_on_write_flag;
+ } else {
+ bits = source.bits & ~copy_on_write_flag;
+ }
}
public static DefiniteAssignmentBitSet operator & (DefiniteAssignmentBitSet a, DefiniteAssignmentBitSet b)
void Clone ()
{
- if (large_bits != null)
- large_bits = (int[]) large_bits.Clone ();
-
- bits &= ~copy_on_write_flag;
+ large_bits = (int[]) large_bits.Clone ();
}
bool GetBit (int index)