2006-05-26 Miguel de Icaza <miguel@novell.com>
[mono.git] / mcs / gmcs / ChangeLog
index c068f2960413d574a9dd558d958d91d4c78b2871..3450861b9ccab0c224c4f4f5d0264e5a0b0f3d57 100644 (file)
@@ -1,3 +1,843 @@
+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-19  Miguel de Icaza  <miguel@novell.com>
+
+       * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
+       twice, this was some residual code, the enumerator was emitted
+       properly in the two branche of if later.
+
+       Fixes #78031
+       
+       Thanks to Martin for finding the source of the problem
+       
+2006-04-19  Raja R Harinath  <rharinath@novell.com>
+
+       * expression.cs (Cast.ResolveLValue): Remove.  The result of a
+       cast is never an lvalue.
+       (Cast.DoResolve, Cast.ResolveRest): Combine.
+       (Argument.Emit): Simplify slightly.  Move 'Expr is
+       IMemoryLocation' check ...
+       (Argument.Resolve): ... here.
+       (Argument.Error_LValueRequired): Remove.  Inline into only user.
+
+       Simplifications.  Fix cs0191-2.cs
+       * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
+       CS1649 and CS1651 to ...
+       (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
+       the actual selection of the error code and message to a lookup
+       table.  Add a dummy return value to simplify callsites.
+       (FieldExpr.ResolveLValue): Don't allow a constructor to write to
+       readonly fields of other instances of the same type.  Move CS0197
+       warning from ...
+       * expression.cs (Argument.Resolve): ... here.  Simplify code.
+       Ensure that ec.InRefOutArgumentResolving is only set during LValue
+       resolution of an out or ref argument.  The code simplification
+       above uses this invariant.
+
+2006-04-18  Raja R Harinath  <rharinath@novell.com>
+
+       Possibly fix #77752.  Fix cs1690-[4-7].cs.
+       * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
+       CheckMarshallByRefAccess.  Drop parameter.
+       (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
+       warning.
+       (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
+       InstanceExpression.
+       * report.cs (AllWarnings): Add CS1690.
+       * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
+       for ref access too.
+       (LocalVariableReference.DoResolveBase): Update.
+
+2006-04-09  Marek Safar  <marek.safar@seznam.cz>
+
+       * 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
+       refactoring.
+       (Destructor.ValidAttributeTargets): Fixed issue found during
+       refactoring.
+       (Operator): Finished refactoring set off by #78020. Operator class is now
+       ordinary method class.
+
+       * anonymous.cs: Updated.
+
+2006-04-09  Marek Safar  <marek.safar@seznam.cz>
+
+       * 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
+       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
+       customized exception to make crash detection easier.
+       (MethodOrOperator): Started to work on new base class for methods and
+       operators.
+       (Method): Derives from MethodOrOperator.
+       (Constructor.Emit): Emits its own attributes.
+       (AbstractPropertyEventMethod.Emit): Ditto.
+       (Operator): Derives from MethodOrOperator, will refactor fully in extra
+       patch.
+       (Operator.Emit): It's temporary more tricky than should be.
+       
+       * doc.cs (GetMethodDocCommentName): Updated after operator changes.
+
+       * report.cs (InternalErrorException): Add ctor with inner exception.
+
+2006-04-08  Marek Safar  <marek.safar@seznam.cz>
+
+       A fix for #76744.
+       * 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
+       array.
+
+2006-04-06  Marek Safar  <marek.safar@seznam.cz>
+
+       * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
+       attribute is present and Guid not.
+       (Interface.ApplyAttributeBuilder): Ditto.
+
+       * attribute.cs: Add error message.
+
+2006-04-06  Marek Safar  <marek.safar@seznam.cz>
+
+       A fix for #78020.
+
+       * attribute.cs (Attribute.AttachTo): The attribute can have multiple
+       sources (it's composite) so hold them in extra array as they are used in
+       Emit phase only. It worked in the previous versions by mistake.
+       (Attribute.Emit): Emit attribute for more owners when exist.
+
+       * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
+       it has now different behaviour.
+
+2006-04-04  Marek Safar  <marek.safar@seznam.cz>
+
+       * constant.cs (Constant.IsDefaultInitializer): New method.
+
+       * class.cs: Updated.
+
+       * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
+       re-initialize default values. It saves KBs almost for every assembly.
+       Thanks Zoltan for the idea.
+       (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
+       (ArrayCreation.DoResolve): Resolve only once.
+       (ArrayCreation.Emit): Emit static initializer only when it is faster.
+       (ArrayCreation.GetAttributableValue): Cope with optimized values.
+
+2006-04-03  Zoltan Varga  <vargaz@gmail.com>
+
+       * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
+       From #77961.
+
+2006-04-01  Marek Safar  <marek.safar@seznam.cz>
+
+       * assign.cs (Assign.DoResolve): Assignment to same variable can occur
+       in an embedded statement too.
+
+2006-04-01  Raja R Harinath  <rharinath@novell.com>
+
+       Fix #77929
+       * typemanager.cs (IsNestedChildOf): Drop generic arguments before
+       testing.
+
+       Fix #77958
+       * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
+
+       Fix #77962
+       * report.cs (SymbolRelatedToPreviousError): Drop generic type
+       arguments before checking whether a type is reflected or not.
+
+       Fix #77954
+       * expression.cs (Invocation.IsApplicable): Ensure a generic method
+       definition doesn't take part in overload resolution.
+       (Invocation.IsParamsMethodApplicable): Likewise.
+       (Invocation.OverloadResolve): When replacing a reflected override
+       method with its base definition, ensure that type arguments are
+       applied.
+
+2006-04-01  Marek Safar  <marek.safar@seznam.cz>
+
+       A fix for #77966.
+
+       * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
+       was not specified.
+
+       * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
+
+2006-03-31  Marek Safar  <marek.safar@seznam.cz>
+
+       * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
+       phase.
+
+       * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
+       LocalTemporary change.
+
+       * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
+       TypeContainer.
+       (ClassOrStruct.DefineFieldInitializers): Implemented static field
+       initializers optimization.
+       (ClassOrStruct.TypeAttr): Moved from modifiers.
+       (Constructor.CheckBase): Don't crash when static ctor has parameters.
+       (FieldBase.ResolveInitializer): Resolves initializer.
+       (FieldBase.HasDefaultInitializer): New property.
+
+       * cs-parser.jay: Removed message.
+
+       * expression.cs (CompilerGeneratedThis): New specialization.
+
+       * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
+
+2006-03-28  Marek Safar  <marek.safar@seznam.cz>
+
+       * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
+
+2006-03-27  Marek Safar  <marek.safar@seznam.cz>
+
+       * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
+       be now EnumConstants only.
+
+2006-03-27  Marek Safar  <marek.safar@seznam.cz>
+
+       * attribute.cs, driver.cs: Reset more caches.
+
+2006-03-26  Marek Safar  <marek.safar@seznam.cz>
+
+       * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
+
+2006-03-26  Marek Safar  <marek.safar@seznam.cz>
+
+       * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
+       for easier reuse. Updated all overrides.
+       (IntegralConstant): New base class for all integral constants.
+       (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
+       of the constant range, report custom error.
+       (UIntConstant.Reduce): Fixed uint conversion.
+
+       * ecore.cs, literal.cs: Reduce updates.
+
+2006-03-26  Marek Safar  <marek.safar@seznam.cz>
+
+       A fix for #75813.
+
+       * class.cs (Constructor.Define): Removed extra if for default ctors.
+       A patch from Atsushi Enomoto.
+
+2006-03-26  Marek Safar  <marek.safar@seznam.cz>
+
+       * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
+       GetAttributableValue.
+
+       * constant.cs (Constant.GetAttributableValue): Does implicit conversion
+       when required.
+
+       * convert.cs (ImplicitConversionRequired): Error message moved to
+       DoubleLiteral.
+
+       * ecore.cs (Expression.GetAttributableValue): Add type parameter for
+       automatic implicit conversion of an output value.
+       (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
+
+       * expression.cs (ArrayCreation.GetAttributableValue): Add element type
+       conversion.
+       (TypeOf.GetAttributableValue): Add extra handling for object type.
+
+       * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
+       special error message.
+
+2006-03-25  Marek Safar  <marek.safar@seznam.cz>
+
+       * class.cs (Constructor.Emit): Don't crash when struct ctor is
+       InternalCall.
+       (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
+       compatible with MS runtime.
+
+2006-03-23  Marek Safar  <marek.safar@seznam.cz>
+
+       * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
+       attribute arguments here.
+
+       * class.cs (Indexer.Define): The check was moved to attribute class.
+
+2006-03-21  Marek Safar  <marek.safar@seznam.cz>
+
+       * expression.cs (StringConcat.Append): Reverted back to no warning state.
+
+2006-03-21  Marek Safar  <marek.safar@seznam.cz>
+
+       * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
+
+       * statement.cs (Block.ResolveMeta): Look for wrong object constants in
+       the blocks too.
+
+2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
+
+       * doc-bootstrap.cs : fix build.
+
+2006-03-20  Marek Safar  <marek.safar@seznam.cz>
+
+       * expression.cs (StringConcat.Append): Issue a warning when empty string
+       is going to append.
+
+2006-03-20  Marek Safar  <marek.safar@seznam.cz>
+
+       * assign.cs (CompoundAssign.ResolveSource): Removed.
+
+       * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
+       clean up.
+
+       * class.cs (TypeContainer.FindMethods): Removed.
+       (TypeContainer.CheckMemberUsage): Made static.
+
+       * codegen.cs (GetAssemblyName): Uses Length for empty string test.
+
+       * constant.cs (CheckRange): Removed unused type argument.
+       (CheckUnsigned): Removed unused type argument.
+
+       * cs-parser.jay: Updated after MemberAccess clean up.
+       Uses Length for empty string test.
+
+       * cs-tokenizer.cs: Uses Length for empty string test.
+       (IsCastToken): Made static.
+       (is_hex): Made static.
+       (real_type_suffix): Made static.
+
+       * decl.cs (SetupCache): Made static.
+       (OnGenerateDocComment): Removed unused ds argument.
+
+       * delegate.cs (VerifyDelegate): Removed unused argument.
+
+       * doc.cs: Uses Length for empty string test.
+
+       * driver.cs: Uses Length for empty string test.
+
+       * enum.cs (IsValidEnumType): Made static
+
+       * expression.cs (EnumLiftUp): Removed unused argument.
+       (ResolveMethodGroup): Ditto.
+       (BetterConversion): Ditto.
+       (GetVarargsTypes): Ditto.
+       (UpdateIndices): Ditto.
+       (ValidateInitializers): Ditto.
+       (MemberAccess.ctor): Ditto.
+       (GetIndexersForType): Ditto.
+
+       * flowanalysis.cs: (MergeFinally): Removed unused argument.
+
+       * iterators.cs: Updated after MemberAccess clean up.
+
+       * location.cs: Uses Length for empty string test.
+
+       * namespace.cs: Uses Length for empty string test.
+
+        * report.cs (CheckWarningCode): Made static.
+
+       * statement.cs (LabeledStatement): Removed unused argument.
+
+       * typemanager.cs (FilterNone): Removed.
+
+2006-03-18  Marek Safar  <marek.safar@seznam.cz>
+
+       * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
+       obsolete.
+
+       * class.cs: Updated.
+
+2006-03-18  Marek Safar  <marek.safar@seznam.cz>
+
+       * cs-parser.jay.cs: __arglist is not allowed for delegates.
+
 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
 
        A fix for #77816.