Repository: dotnet/roslyn
File: src/Compilers/CSharp/Portable/Binder/Binder.ValueChecks.cs (C#)

Code before:
                    return expr;

                case BoundKind.DiscardExpression:
                    Debug.Assert(valueKind is (BindValueKind.Assignable or BindValueKind.RefOrOut or BindValueKind.RefAssignable) || diagnostics.DiagnosticBag is null || diagnostics.HasAnyResolvedErrors());
                    return expr;

                case BoundKind.PropertyAccess:
                    var propertyAccess = (BoundPropertyAccess)expr;
                    if (!InAttributeArgument)
                    {
                        // If the property has a synthesized backing field, record the accessor kind of the property
                        // access for determining whether the property access can use the backing field directly.
                        if (HasSynthesizedBackingField(propertyAccess.PropertySymbol, out _))
                        {
                            expr = propertyAccess.Update(
                                propertyAccess.ReceiverOpt,
                                propertyAccess.InitialBindingReceiverIsSubjectToCloning,
                                propertyAccess.PropertySymbol,
                                autoPropertyAccessorKind: GetAccessorKind(valueKind),
                                propertyAccess.ResultKind,
                                propertyAccess.Type);
                        }
#if DEBUG
                        else
                        {
                            // Under DEBUG, create a new node to mark as checked, rather than mutating the original.
                            // This allows the original node to be passed to CheckValue multiple times safely.
                            expr = propertyAccess.Clone();
                        }
#endif
                    }
#if DEBUG
                    else
                    {
                        // Under DEBUG, create a new node to mark as checked, rather than mutating the original.
                        // This allows the original node to be passed to CheckValue multiple times safely.
                        expr = propertyAccess.Clone();
                    }
                    expr.WasPropertyBackingFieldAccessChecked = true;
#endif
                    break;

                case BoundKind.IndexerAccess:
                    expr = BindIndexerDefaultArgumentsAndParamsCollection((BoundIndexerAccess)expr, valueKind, diagnostics);
                    break;

                case BoundKind.ImplicitIndexerAccess:
                    {
                        var implicitIndexer = (BoundImplicitIndexerAccess)expr;
                        if (implicitIndexer.IndexerOrSliceAccess is BoundIndexerAccess indexerAccess)
                        {

Review comment (suggestion):
>to mark as checked [](http://example.com/codeflow?start=62&length=18)

Consider adjusting the comment to make it explicit that this is about `WasPropertyBackingFieldAccessChecked` property #Closed

Code after:
                    return expr;

                case BoundKind.DiscardExpression:
                    Debug.Assert(valueKind is (BindValueKind.Assignable or BindValueKind.RefOrOut or BindValueKind.RefAssignable) || diagnostics.DiagnosticBag is null || diagnostics.HasAnyResolvedErrors());
                    return expr;

                case BoundKind.PropertyAccess:
                    var propertyAccess = (BoundPropertyAccess)expr;
                    if (!InAttributeArgument)
                    {
                        // If the property has a synthesized backing field, record the accessor kind of the property
                        // access for determining whether the property access can use the backing field directly.
                        if (HasSynthesizedBackingField(propertyAccess.PropertySymbol, out _))
                        {
                            expr = propertyAccess.Update(
                                propertyAccess.ReceiverOpt,
                                propertyAccess.InitialBindingReceiverIsSubjectToCloning,
                                propertyAccess.PropertySymbol,
                                autoPropertyAccessorKind: GetAccessorKind(valueKind),
                                propertyAccess.ResultKind,
                                propertyAccess.Type);
                        }
#if DEBUG
                        else
                        {
                            // Under DEBUG, create a new node to mark as checked, rather than mutating the original.
                            // This allows the original node to be passed to CheckValue multiple times safely, without
                            // asserting in WasPropertyBackingFieldAccessChecked.
                            expr = propertyAccess.Clone();
                        }
#endif
                    }
#if DEBUG
                    else
                    {
                        // Under DEBUG, create a new node to mark as checked, rather than mutating the original.
                        // This allows the original node to be passed to CheckValue multiple times safely, without
                        // asserting in WasPropertyBackingFieldAccessChecked.
                        expr = propertyAccess.Clone();
                    }
                    expr.WasPropertyBackingFieldAccessChecked = true;
#endif
                    break;

                case BoundKind.IndexerAccess:
                    expr = BindIndexerDefaultArgumentsAndParamsCollection((BoundIndexerAccess)expr, valueKind, diagnostics);
                    break;

                case BoundKind.ImplicitIndexerAccess:
                    {
                        var implicitIndexer = (BoundImplicitIndexerAccess)expr;