semantic/property-accessibility.test \
semantic/property-construct.test \
semantic/property-initializer-type.test \
+ semantic/property-method-returns-modified-pointer.test \
semantic/property-override.test \
semantic/property-override-class.test \
semantic/property-override-interface.test \
value_type.floating_reference = true;
}
if (m.returns_modified_pointer) {
- ((MemberAccess) call).inner.lvalue = true;
+ unowned Expression inner = ((MemberAccess) call).inner;
+ inner.lvalue = true;
+ unowned Property? prop = inner.symbol_reference as Property;
+ if (prop != null && (prop.set_accessor == null || !prop.set_accessor.writable)) {
+ error = true;
+ Report.error (inner.source_reference, "Property `%s' is read-only".printf (prop.get_full_name ()));
+ }
}
// avoid passing possible null to ref_sink_function without checking
if (tree_can_fail && !value_type.nullable && value_type.floating_reference && ret_type is ObjectType) {