+2006-05-26 Miguel de Icaza <miguel@novell.com>
+
+ * cs-parser.jay: Catch another parsing form for arglist being
+ followed by other arguments. Fixes #78313.
+
+2006-05-25 Raja R Harinath <rharinath@novell.com>
+
+ Fix #78324
+ * expression.cs (Binary.DoResolve): Use Nullable.LiftedBinaryOperator
+ also when one of the operands is a null literal.
+ * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality): Rewrite
+ to improve clarity, and generate slightly better code.
+
+2006-05-24 Raja R Harinath <rharinath@novell.com>
+
+ * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
+ checking of out parameters to ...
+ (FlowBranchingToplevel.Merge): ... here.
+ (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
+ set, propagate the origin upward, and only complain if there was
+ no other error.
+ (FlowBranchingException.AddContinueOrigin): Likewise.
+ (FlowBranchingException.AddReturnOrigin): Likewise.
+ (FlowBranchingException.AddGotoOrigin): Likewise.
+
+2006-05-23 Raja R Harinath <rharinath@novell.com>
+
+ * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
+ unreachable, skip it.
+ (FlowBranchingException.Merge): Always propagate jumps, even if
+ the finally block renders subsequent code unreachable.
+
+2006-05-18 Raja R Harinath <rharinath@novell.com>
+
+ Fix #77601
+ * statement.cs (Goto.Resolve): Move responsibility for resolving
+ 'goto' to FlowBranching.AddGotoOrigin.
+ (Goto.SetResolvedTarget): New. Callback to set the
+ LabeledStatement that's the target of the goto.
+ (Goto.DoEmit): Use Leave instead of Br when crossing an
+ unwind-protect boundary.
+ * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
+ LookupLabel and adjust to new semantics.
+ (FlowBranchingToplevel.AddGotoOrigin): Likewise.
+ (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
+ Goto.SetResolvedTarget to update target.
+ (FlowBranchingLabeled.AddGotoOrigin): Likewise.
+ (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
+ AddBreakOrigin & co. Delay propagation until ...
+ (FlowBranchingException.Merge): ... this.
+
+ * statement.cs (Block.Resolve): Always depend on flow-branching to
+ determine unreachability. Kill workaround that originally emitted
+ only one statement after an "unreachable" label (see infloop in
+ test-515.cs).
+
+ Fix #77869, #76148, #77755, #75255 and a host of other bugs.
+ This is still "wrong", but anything better would probably need a
+ multi-pass algorithm.
+ * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
+ usage vector. Force current usage vector to be reachable, to
+ optimistically signify backward jumps.
+ (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
+ detected.
+ (FlowBranchingLabeled.Merge): New. If no backward jump was
+ detected, return the original salted-away usage vector instead,
+ updated with appropriate changes. Print unreachable warning if
+ necessary.
+ * statement.cs (Block.Resolve): Don't print unreachable warning on
+ a labeled statement.
+
+2006-05-17 Gert Driesen <drieseng@users.sourceforge.net>
+
+ * driver.cs: Pass filename without path to AssemblyBuilder's
+ AddResourceFile. Fixes bug #78407.
+
+2006-05-17 Raja R Harinath <rharinath@novell.com>
+
+ * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
+ * flowanalysis.cs (FlowBranchingLabeled): ... here.
+ (FlowBranching.MergeChild): Overwrite
+ reachability information from Labeled branchings too.
+
+2006-05-16 Raja R Harinath <rharinath@novell.com>
+
+ * statement.cs (Goto.Resolve): Merge jump origins here ...
+ * flowanalysis.cs (FlowBranching.Label): ... rather than here.
+
+ * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
+ (FlowBranchingToplevel.LookupLabel): ... here. Add CS1632 check.
+ (FlowBranchingGoto.LookupLabel): New. Handle back jumps.
+ (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
+ here, ...
+ * statement.cs (Goto.Resolve): ... not here.
+ (Goto.Emit): Remove CS1632 check.
+
+2006-05-14 Marek Safar <marek.safar@seznam.cz>
+
+ * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
+ error message.
+
+2006-05-11 Raja R Harinath <rharinath@novell.com>
+
+ * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
+ (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
+ (FlowBranchingException.Label): Likewise.
+
+ * flowanalysis.cs (MyBitVector.SetAll): New. Sets all bits to the
+ given value.
+ (MyBitVector.Or): Use it to avoid losing information (Count).
+ (FlowBranching.MergeOrigins): Likewise.
+
+ * flowanalysis.cs (UsageVector.IsDirty): Remove.
+ (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
+ (UsageVector.Locals, UsageVector.LocalVector): Likewise.
+ (UsageVector.ToString): Simplify.
+ (UsageVector.MergeSiblings): Move here from ...
+ (FlowBranching.Merge): ... here.
+ (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
+ not a MyBitVector.
+
+2006-05-10 Raja R Harinath <rharinath@novell.com>
+
+ * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
+ null bitvector is treated as all-true.
+
+ * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
+ (MyBitVector): Rationalize invariants. 'vector != null' implies
+ that we have our own copy of the bitvector. Otherwise,
+ 'InheritsFrom == null' implies all inherited bits are true.
+
+2006-05-09 Marek Safar <marek.safar@seznam.cz>
+
+ * statement.cs (LocalInfo): Add IsConstant.
+ (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
+ local variable for constants.
+
+2006-05-09 Raja R Harinath <rharinath@novell.com>
+
+ * flowanalysis.cs (MyBitVector.Empty): New.
+ (MyBitVector): Don't allow InheritedFrom to be null.
+ (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
+ (UsageVector, FlowBranching): Update to changes.
+
+ * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
+ recursion. The 'Parent == null' condition isn't sufficient for
+ anonymous methods.
+ (FlowBranching.AddBreakOrigin): Likewise.
+ (FlowBranching.AddContinueOrigin): Likewise.
+ (FlowBranching.AddReturnOrigin): Likewise.
+ (FlowBranching.StealFinallyClauses): Likewise.
+ (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
+ (FlowBranching.CheckOutParameters): Likewise.
+ (FlowBranchingToplevel): Terminate all the above recursions here.
+ (FlowBranchingToplevel.End): Rename from MergeTopBlock.
+ * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
+
+ * flowanalysis.cs (BranchingType.Toplevel): New. Represents a
+ toplevel block.
+ (FlowBranchingToplevel): New. Empty for now.
+ (FlowBranching.MergeTopBlock): Update.
+ * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
+ branching for the anonymous delegate.
+ (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
+
+ * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
+ (UsageVector.MergeJumpOrigins): Don't ignore current reachability
+ information at the start of the merge. Reorganize.
+
+2006-05-07 Marek Safar <marek.safar@seznam.cz>
+
+ * class.cs (MethodData.Define): Method cannot implement interface accessor.
+
+2006-05-07 Marek Safar <marek.safar@seznam.cz>
+
+ * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
+ to newly introduced ctor.
+
+ * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
+ message to one place.
+ (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
+ global namespace.
+
+2006-05-07 Marek Safar <marek.safar@seznam.cz>
+
+ * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
+
+ * ecore.cs (Expression.ResolveAsConstant): Updated.
+
+ * statement.cs (ResolveMeta): Updated.
+
+2006-05-06 Marek Safar <marek.safar@seznam.cz>
+
+ * cs-parser.jay: __arglist cannot be used in initializer.
+
+2006-05-06 Marek Safar <marek.safar@seznam.cz>
+
+ A fix for #77879
+ * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
+ private types.
+
+2006-05-05 Raja R Harinath <rharinath@novell.com>
+
+ * statement.cs (EmptyStatement.ResolveUnreachable): Override.
+ (LabeledStatement): Add 'name' parameter.
+ (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
+ (Block.AddLabel): Update to changes.
+ * cs-parser.jay (labeled_statement): Likewise.
+
+ * flowanalysis.cs (BranchingType.Labeled): New.
+ (UsageVector.MergeOrigins): Remove unused 'branching' argument.
+ (FlowBranchingLabeled): New. Does nothing for now, but will
+ eventually handle 'goto' flows.
+ * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
+ * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
+ that's terminated ...
+ (Block.Resolve): ... here.
+
+ * flowanalysis.cs (UsageVector.MergeFinally): Remove.
+ (UsageVector.MergeFinallyOrigins): Likewise.
+ (FlowBranching.InTryOrCatch): Likewise.
+ (FlowBranching.AddFinallyVector): Likewise.
+ (FlowBranchingException): Update to changes.
+
+ Fix #78290
+ * statement.cs (Return.Resolve): Move error checking to ...
+ * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
+ (FlowBranchingException): Handle return origins like break and
+ continue origins.
+ (FlowBranching.UsageVector.CheckOutParameters): Remove.
+
+2006-05-04 Marek Safar <marek.safar@seznam.cz>
+
+ A fix for #76122
+ * class.cs (TypeContainer.FindMembers): Includes event method in the methods
+ filter.
+
+2006-05-04 Marek Safar <marek.safar@seznam.cz>
+
+ A fix for #77543
+ * class.cs (MethodData.Define): Do public accessor check only when method
+ implements an interface.
+
+2006-05-04 Raja R Harinath <rharinath@novell.com>
+
+ Remove special handling of 'break'
+ * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
+ (Reachability.Meet): Simplify. Remove 'do_breaks' argument.
+ (UsageVector.Break): Remove.
+ (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
+ reachability.
+ (FlowBranchingBreakable.Merge): Don't ResetBreaks.
+
+ * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
+ UsageVector.Breaks (). Don't set NeedsReturnLabel.
+
+2006-05-03 Marek Safar <marek.safar@seznam.cz>
+
+ A fix for #75726
+ * pending.cs (PendingImplementation.BaseImplements): A found member cannot
+ be the interface member.
+
+2006-05-03 Marek Safar <marek.safar@seznam.cz>
+
+ A fix for #60069
+ * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
+ for emitting small (int) values.
+
+2006-05-03 Raja R Harinath <rharinath@novell.com>
+
+ Fix #59427
+ * flowanalysis.cs (FlowBranchingException.Merge): Ensure
+ control-flow passes through the 'finally' after merging-in all the
+ control-flows from 'try' and the 'catch' clauses.
+
+ * flowanalysis.cs (FlowBranching.IsLoop): Remove.
+ (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter. It's
+ always true at the only non-recursive entry point.
+ (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
+ FlowBranchingBreakable.
+ (FlowBranchingLoop): Remove.
+ * statement.cs (Return.DoResolve): Update to changes.
+
+ Fix #76471, #76665
+ * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
+ (FlowBranching.CreateBranching): Handle it: create a
+ FlowBranchingContinuable.
+ (FlowBranching.BreakCrossesExceptionBoundary): Remove.
+ (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
+ except that it handles the 'continue' command.
+ (FlowBranching.UsageVector.MergeOrigins): Rename from
+ MergeBreakOrigins.
+ (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
+ except that it overrides AddContinueOrigin.
+ (FlowBranchingException): Override AddContinueOrigin, similar to
+ AddBreakOrigin.
+ * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
+ Create a new branching around the embedded statement.
+ (Do.Resolve, For.Resolve): Likewise. Do reachability analysis for
+ control flow after the embedded statement.
+ (Continue.Resolve): Move all error checking to AddContinueOrigin.
+
+ * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
+ (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
+ FlowBranchingBreakable.
+ (FlowBranchingSwitch): Remove.
+
+ Fix test-503.cs
+ * statement.cs (Break.Resolve): Simplify. Move responsibility for
+ error reporting to ...
+ * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
+ Rename from 'AddBreakVector'. Add new location argument. Return
+ a bool indicating whether the 'break' crosses an unwind-protect.
+ (FlowBranchingException.AddBreakOrigin): Add.
+ (FlowBranchingException.Merge): Propagate 'break's to surrounding
+ flowbranching after updating with the effects of the 'finally'
+ clause.
+ (FlowBranchingBreakable): New common base class for
+ FlowBranchingLoop and FlowBranchingSwitch.
+
+ * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
+ embedded statement.
+ (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
+
+2006-05-02 Raja R Harinath <rharinath@novell.com>
+
+ * statement.cs (Do.Resolve): If the loop is infinite, set the
+ barrier.
+ (While.Resolve, For.Resolve): Set a barrier after the embedded
+ statement. There's no direct control flow that goes from the end
+ of the embedded statement to the end of the loop.
+ * flowanalysis.cs (FlowBranching.Infinite): Remove.
+ (FlowBranchingLoop.Merge): Don't look at 'Infinite'. The changes
+ above ensure that the reachability is correctly computed.
+
+ * flowanalysis.cs (Reachability.ResetBarrier): Remove.
+ (UsageVector.MergeBreakOrigins): If the current path is
+ unreachable, treat it as if all parameters/locals are initialized.
+ (FlowBranchingLoop.Merge): Don't clear any barriers. Handle
+ infinite loops before merging-in break origins.
+
+ * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
+ (Reachability.Reachable): Split part into ...
+ (Reachability.Unreachable): ... this. Simplify.
+ (Reachability.IsUnreachable): Use 'Unreachable' instead.
+
+ * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
+ (Reachability.SetThrowsSometimes): Likewise.
+ (FlowBranchingBlock.MergeTopBlock): Don't compare against
+ TriState.Always, use corresponding property.
+ * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
+ (Block.Resolve): Likewise. Remove some redundant checks.
+
+2006-05-02 Raja R Harinath <harinath@gmail.com>
+
+ * flowanalysis.cs (UsageVector.Throw): Set barrier too.
+ (Reachability.Meet): Don't bother checking AlwaysThrows --
+ barrier is always set.
+ (FlowBranchingBlock.Merge): Likewise.
+
+2006-05-01 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
+
+ * attribute.cs: fixed_buffer_cache is declared only if NET_2_0 is
+ defined, so it's references should also compile only for NET_2_0
+ (as occurs in mcs version)
+
+2006-05-01 Raja R Harinath <harinath@gmail.com>
+
+ * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
+ checks for unreachable.
+
+2006-05-01 Marek Safar <marek.safar@seznam.cz>
+
+ A fix for #77980
+ * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
+
+ * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
+ whether field is really assigned.
+
+2006-04-30 Raja R Harinath <harinath@gmail.com>
+
+ * flowanalysis.cs (Reachability): Make 4-argument constructor
+ private.
+ (Reachability.Meet): Rename from 'And'. Remove static variant.
+ (Reachability.Always): Rename from the highly misleading
+ 'Reachability.Never'.
+ (FlowBranching.Merge): Update to changes. Mark an impossible
+ situation with a 'throw'.
+ (*): Update to changes.
+
+2006-04-29 Raja R Harinath <harinath@gmail.com>
+
+ * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
+ Remove 'Undefined'.
+ (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
+ (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
+ (*): Update to changes.
+ * statement.cs: Update to changes.
+
+2006-04-28 Marek Safar <marek.safar@seznam.cz>
+
+ A fix for #78049
+ *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
+
+2006-04-28 Raja R Harinath <harinath@gmail.com>
+
+ * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
+ dummy UsageVector.
+
+ * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
+ argument to two arguments: an usage-vector and a bool. Move call
+ to FlowBranching.Merge () ...
+ (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
+
+ * flowanalysis.cs (UsageVector.MergeChild): Move special-case
+ handling of loop and switch reachability to ...
+ (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
+
+2006-04-27 Raja R Harinath <harinath@gmail.com>
+
+ * flowanalysis.cs (FlowBranching.InLoop): Move special-case
+ handling to FlowBranchingLoop.InLoop.
+ (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
+
+2006-04-26 Marek Safar <marek.safar@seznam.cz>
+
+ A fix for #78115
+ * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
+ anonymous method is allowed from AnonymousContainer here.
+
+ * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
+
+2006-04-24 Raja R Harinath <rharinath@novell.com>
+
+ Fix #78156
+ * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
+
+2006-04-23 Marek Safar <marek.safar@seznam.cz>
+
+ A fix for #49011.
+ * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
+ (DoubleConstant.Reduce): Ditto.
+
+2006-04-23 Raja R Harinath <rharinath@novell.com>
+
+ * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
+ Remove 'lvalue_right_side' argument. Move parts to ...
+ (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
+ (LocalVariable.DoResolveLValue): ... these.
+
+2006-04-21 Raja R Harinath <rharinath@novell.com>
+
+ Fix cs1655.cs
+ * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
+ * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
+ (LocalVariableReference.DoResolveBase): Use it to implement new
+ CS1655 check.
+ (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
+ (Argument.Resolve): Simplify. Move CS1510 check ...
+ * ecore.cs (Expression.ResolveLValue): ... here.
+ (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
+ (PropertyExpr.DoResolveLValue): Likewise.
+ (FieldExpr.Report_AssignToReadonly): Likewise.
+ (FieldExpr.DoResolve): Add 'out_access' argument. Use
+ LValueMemberAccess or LValueMemberOutAccess on instance depending
+ on it.
+ (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
+ DoResolve as appropriate.
+
2006-04-20 Raja R Harinath <rharinath@novell.com>
+ Fix #75800
+ * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
+ implicit conversions on 'out' and 'ref' arguments.
+
+ * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
+ improve clarity. Remove dead code.
+
Fix #66031
* statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
(Catch.Resolve): Resolve VarBlock if it exists.
2006-04-09 Marek Safar <marek.safar@seznam.cz>
- class.cs (MethodOrOperator): Moved common parts from method class.
+ * class.cs (MethodOrOperator): Moved common parts from method class.
detect obsolete attributes.
(Method.Define): Simplified as it reuses code from base.
(Constructor.ValidAttributeTargets): Fixed issue found during
2006-04-09 Marek Safar <marek.safar@seznam.cz>
- (Constructor.Emit): Don't emit the attributes twice.
+ * class.cs (Constructor.Emit): Don't emit the attributes twice.
2006-04-09 Marek Safar <marek.safar@seznam.cz>
- class.cs (Operator.Emit): Extracted code from MethodData to correctly
+ * class.cs (Operator.Emit): Extracted code from MethodData to correctly
detect obsolete attributes.
(Method.CreateEmitContext): Moved to MethodOrOperator.
2006-04-09 Marek Safar <marek.safar@seznam.cz>
A fix for #78048.
- class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
+ * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
customized exception to make crash detection easier.
(MethodOrOperator): Started to work on new base class for methods and
operators.
2006-04-08 Marek Safar <marek.safar@seznam.cz>
A fix for #76744.
- ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
+ * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
only not visible.
2006-04-07 Marek Safar <marek.safar@seznam.cz>
A fix for #77916.
- expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
+ * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
array.
2006-04-06 Marek Safar <marek.safar@seznam.cz>