1. 27 Oct, 2004 40 commits
    • tracebak.c (IS_BAD_PTR): Use IsBadCodePtr on Win32 to check for ptr validity… · b194546e
      tracebak.c (IS_BAD_PTR): Use IsBadCodePtr on Win32 to check for ptr validity (process must have read access).
      
      2004-10-26  Pascal Obry  <obry@gnat.com>
      
      	* tracebak.c (IS_BAD_PTR): Use IsBadCodePtr on Win32 to check for ptr
      	validity (process must have read access). Set to 0 in all other cases.
      	(STOP_FRAME): Now check for ptr validity to avoid a segmentation
      	violation on Win32.
      	(VALID_STACK_FRAME): Check for ptr validity on Win32 to avoid a
      	segmentation violation.
      
      From-SVN: r89675
      Pascal Obry committed
    • sem_util.adb (Is_Aliased_View): Defend against the case where this subprogram is… · 130c236a
      sem_util.adb (Is_Aliased_View): Defend against the case where this subprogram is called with a parameter that...
      
      2004-10-26  Thomas Quinot  <quinot@act-europe.fr>
      	    Ed Schonberg   <schonberg@gnat.com>
      
      	* sem_util.adb (Is_Aliased_View): Defend against the case where this
      	subprogram is called with a parameter that is not an object name. This
      	situation arises for some cases of illegal code, which is diagnosed
      	later, and in this case it is wrong to call Is_Aliased, as that might
      	cause a compiler crash.
      	(Explain_Limited_Type): Refine previous fix to include
      	inherited components of derived types, to provide complete information.
      
      	* exp_ch9.adb (Set_Privals): Set the Ekind of the actual object that
      	is the prival for a protected object.
      	It is necessary to mark this entity as a variable, in addition to
      	flagging it as Aliased, because Sem_Util.Is_Aliased_View has been
      	modified to avoid checking the Aliased flag on entities that are not
      	objects. (Checking that flag for non-objects is erroneous and could
      	lead to a compiler crash).
      
      From-SVN: r89674
      Thomas Quinot committed
    • sem_elab.adb (Check_Elab_Call): Do not check a call that does not appear in the… · 65b03d7d
      sem_elab.adb (Check_Elab_Call): Do not check a call that does not appear in the code for the main unit.
      
      2004-10-26  Ed Schonberg  <schonberg@gnat.com>
      
      	* sem_elab.adb (Check_Elab_Call): Do not check a call that does not
      	appear in the code for the main unit. Dependencies among units in the
      	context of the main unit are established when those other units are
      	compiled. Otherwise spurious elaboration constraints can generate
      	incorrect elaboration circularities.
      
      From-SVN: r89673
      Ed Schonberg committed
    • sem_ch6.adb (Analyze_Subprogram_Body): If body is a subunit for a different kind… · e895b435
      sem_ch6.adb (Analyze_Subprogram_Body): If body is a subunit for a different kind of stub (possibly wrong name for file)...
      
      2004-10-26  Ed Schonberg  <schonberg@gnat.com>
      
      	* sem_ch6.adb (Analyze_Subprogram_Body): If body is a subunit for a
      	different kind of stub (possibly wrong name for file), do not check
      	for conformance.
      	(Uses_Secondary_Stack): New subsidiary to Build_Body_To_Inline. If body
      	includes call to some function that returns an unconstrained type, do
      	not inline.
      
      From-SVN: r89671
      Ed Schonberg committed
    • sem_ch3.adb (Complete_Private_Subtype): If the full view is a task or protected… · fc4039b9
      sem_ch3.adb (Complete_Private_Subtype): If the full view is a task or protected type with discriminants...
      
      2004-10-26  Ed Schonberg  <schonberg@gnat.com>
      
      	* sem_ch3.adb (Complete_Private_Subtype): If the full view is a task
      	or protected type with discriminants, do not constrain the
      	corresponding record type if the subtype declaration has no
      	discriminant constraints. This can be the case in source code, or in
      	the subtype declaration created to rename an actual type within an
      	instantiation.
      
      From-SVN: r89670
      Ed Schonberg committed
    • sem_ch13.adb (Analyze_Attribute_Definition_Clause, [...]): enhance, document &… · fe98a6aa
      sem_ch13.adb (Analyze_Attribute_Definition_Clause, [...]): enhance, document & limit detection of non-sharable internal pools.
      
      2004-10-26  Cyrille Comar  <comar@act-europe.fr>
      
      	* sem_ch13.adb (Analyze_Attribute_Definition_Clause, case
      	'Storage_Pool): enhance, document & limit detection of non-sharable
      	internal pools.
      
      	* impunit.adb: Make System.Pool_Global and System.Pool_Local visible.
      
      	* s-pooglo.ads: Add more documentation now that this pool is properly
      	documented.
      
      From-SVN: r89669
      Cyrille Comar committed
    • s390.md ("*subdf3_cc"): Replaced plus by minus. · db09b5b6
      2004-10-27  Andreas Krebbel  <krebbel1@de.ibm.com>
      
      	* config/s390/s390.md ("*subdf3_cc"): Replaced plus by minus.
      
      From-SVN: r89668
      Andreas Krebbel committed
    • sem_ch12.adb (In_Main_Context): Predicate to determine whether the current… · 03c79279
      sem_ch12.adb (In_Main_Context): Predicate to determine whether the current instance appears within a unit that...
      
      2004-10-26  Ed Schonberg  <schonberg@gnat.com>
      	    Javier Miranda  <miranda@gnat.com>
      
      	* sem_ch12.adb (In_Main_Context): Predicate to determine whether the
      	current instance appears within a unit that is directly in the context
      	of the main unit.
      	Used to determine whether the body of the instance should be analyzed
      	immediately after its spec, to make its subprogram bodies available
      	for front-end inlining.
      	(Analyze_Formal_Array_Type): Cleanup condition that checks that range
      	constraint is not allowed on the component type (AARM 12.5.3(3))
      
      From-SVN: r89667
      Ed Schonberg committed
    • sem_ch10.adb (Optional_Subunit): If file of expected subunit is empty, post message on stub. · 10b60633
      2004-10-26  Ed Schonberg  <schonberg@gnat.com>
      
      	* sem_ch10.adb (Optional_Subunit): If file of expected subunit is
      	empty, post message on stub.
      
      From-SVN: r89666
      Ed Schonberg committed
    • sem_attr.adb (Resolve_Attribute, [...]): Apply proper accessibility check to… · f529bac5
      sem_attr.adb (Resolve_Attribute, [...]): Apply proper accessibility check to prefix that is a protected operation.
      
      2004-10-26  Ed Schonberg  <schonberg@gnat.com>
      
      	* sem_attr.adb (Resolve_Attribute, case 'Access): Apply proper
      	accessibility check to prefix that is a protected operation.
      
      From-SVN: r89665
      Ed Schonberg committed
    • s-bitops.adb (Bit_Eq): Remove redundant check. · 282c6a89
      2004-10-26  Robert Dewar  <dewar@gnat.com>
      
      	* s-bitops.adb (Bit_Eq): Remove redundant check.
      
      	* s-bitops.ads: Minor comment updates
      	Change some occurrences of Address to System.Address
      
      	* s-carsi8.ads: Fix minor cut-and-paste error in comments
      
      From-SVN: r89664
      Robert Dewar committed
    • s-arit64.adb: (Le3): New function, used by Scaled_Divide · 04b633a8
      2004-10-26  Robert Dewar  <dewar@gnat.com>
      
      	* s-arit64.adb: (Le3): New function, used by Scaled_Divide
      	(Sub3): New procedure, used by Scaled_Divide
      	(Scaled_Divide): Substantial rewrite, avoid duplicated code, and also
      	correct more than one instance of failure to propagate carries
      	correctly.
      	(Double_Divide): Handle overflow case of largest negative number
      	divided by minus one.
      
      	* s-arit64.ads (Double_Divide): Document that overflow can occur in
      	the case of a quotient value out of range.
      	Fix comments.
      
      From-SVN: r89663
      Robert Dewar committed
    • prj-nmsc.adb (Language_Independent_Check): Do not forbid virtual extension of library projects. · 1ae44ba2
      2004-10-26  Vincent Celier  <celier@gnat.com>
      
      	* prj-nmsc.adb (Language_Independent_Check): Do not forbid virtual
      	extension of library projects.
      
      	* prj-part.adb: If env var ADA_PROJECT_PATH is not defined, project
      	path defaults to ".:<prefix>/lib/gnat".
      	(Parse): For an extending all project, allow direct import of a project
      	that is virtually extended.
      
      	* prj-proc.adb (Imported_Or_Extended_Project_From): If a project with
      	the specified name is directly imported, return its ID. Otherwise, if
      	an extension of this project is imported, return the ID of the
      	extension.
      
      From-SVN: r89662
      Vincent Celier committed
    • prj-env.adb: (Contains_ALI_Files): New Boolean function · 813fc7bf
      2004-10-26  Vincent Celier  <celier@gnat.com>
      
      	* prj-env.adb: (Contains_ALI_Files): New Boolean function
      	(Ada_Objects_Path.Add): For a library project, add to the object path
      	the library directory only if there is no object directory or if the
      	library directory contains ALI files.
      	(Set_Ada_Paths.Add.Recursive_Add): Ditto
      
      From-SVN: r89661
      Vincent Celier committed
    • Fix email address in last entry. · 73f17ac8
      From-SVN: r89660
      Ulrich Weigand committed
    • re PR middle-end/14684 (-fprofile-use/-fprofile-generate failure because of coverage mismatch) · 4db0315e
      2004-10-27  Andreas Krebbel  <krebbel@de.ibm.com>
                  patch originally created by Kelley Cook  <kcook@gcc.gnu.org>
      
      	PR middle-end/14684
      	* opts.c (OPT_fprofile_generate): Default to -funroll-loops
      	to match -fprofile-use.
      
      Co-Authored-By: Kelley Cook <kcook@gcc.gnu.org>
      
      From-SVN: r89659
      Andreas Krebbel committed
    • * config/rs6000/rs6000.c: Fix a comment typo. · 600e1f95
      From-SVN: r89658
      Kazu Hirata committed
    • lib-xref.adb (Generate_Reference): Don't complain about reference to entry… · ca0ae7e0
      lib-xref.adb (Generate_Reference): Don't complain about reference to entry parameter if pragma Unreferenced set...
      
      2004-10-26  Robert Dewar  <dewar@gnat.com>
      
      	* lib-xref.adb (Generate_Reference): Don't complain about reference to
      	entry parameter if pragma Unreferenced set, since we do not properly
      	handle the case of multiple parameters.
      
      From-SVN: r89657
      Robert Dewar committed
    • init.c (__gnat_error_handler): Instead of trying to read the memory before the… · 07f37402
      init.c (__gnat_error_handler): Instead of trying to read the memory before the faulting page we properly test...
      
      2004-10-26  Pascal Obry  <obry@gnat.com>
      
      	* init.c (__gnat_error_handler) [Win32]: Instead of trying to read the
      	memory before the faulting page we properly test the process read
      	access for this address using appropriate Win32 routine.
      	(HPUX sections): guard with "__hpux__" instead of "hpux".
      
      From-SVN: r89656
      Pascal Obry committed
    • i-cpp.ads, i-cpp.adb: Change layout of VTable for new C++ ABI. · 3f02ce5d
      2004-10-26  Matthew Gingell  <gingell@gnat.com>
      
      	* i-cpp.ads, i-cpp.adb: Change layout of VTable for new C++ ABI.
      
      From-SVN: r89655
      Matthew Gingell committed
    • g-os_lib.ads, [...] (Set_Executable, [...]): New subprograms. · 9cc29fc6
      2004-10-26  Thomas Quinot  <quinot@act-europe.fr>
      
      	* g-os_lib.ads, g-os_lib.adb (Set_Executable, Set_Writable,
      	Set_Read_Only): New subprograms.
      	These new routines allow the user to set or unset the Owner execute
      	and Owner write permission flags on a file.
      
      	* makegpr.adb, mlib.adb, mlib-prj.adb: Use
      	GNAT.OS_Lib.Set_Executable instead of rolling our own.
      
      From-SVN: r89654
      Thomas Quinot committed
    • gnat1drv.adb: Suppress calling the back end when Frontend_Layout_On_Target is true. · 427024ae
      2004-10-26  Gary Dismukes  <dismukes@gnat.com>
      
      	* gnat1drv.adb: Suppress calling the back end when
      	Frontend_Layout_On_Target is true.
      
      From-SVN: r89653
      Gary Dismukes committed
    • exp_dist.adb (Build_General_Calling_Stubs): New formal parameter RACW_Type, used… · 48ab1182
      exp_dist.adb (Build_General_Calling_Stubs): New formal parameter RACW_Type, used in the PolyORB version.
      
      2004-10-26  Thomas Quinot  <quinot@act-europe.fr>
      
      	* exp_dist.adb (Build_General_Calling_Stubs): New formal parameter
      	RACW_Type, used in the PolyORB version.
      	Rename RCI_Info to RCI_Locator, for consistency between the PolyORB
      	version and the GARLIC version.
      
      	* snames.ads, snames.adb, s-parint.ads, s-parint.adb:
      	Rename RCI_Info to RCI_Locator for better consistency between the
      	GARLIC and PolyORB versions of the distributed systems annex.
      	(DSA_Implementation_Name): This enumeration lists the possible
      	implementations of the Partition Communication Subsystem for the
      	Distributed Systems Annex (DSA). The three available implementations
      	are the dummy stub implementation (No_DSA), and two versions based on
      	two different distribution runtime libraries: GARLIC and PolyORB. Both
      	the GARLIC PCS and the PolyORB PCS are part of the GLADE distribution
      	technology.
      	Change the literal GLADE_DSA to GARLIC_DSA to accurately describe
      	that organization.
      
      	* rtsfind.ads: Rename RCI_Info to RCI_Locator for better consistency
      	between the GARLIC and PolyORB versions of the distributed systems
      	annex.
      	Remove RE_Unbounded_Reclaim_Pool since it is unused.
      
      From-SVN: r89652
      Thomas Quinot committed
    • exp_ch6.adb (Expand_Actuals): If the actual for an in-out parameter is aliased… · faf3cf91
      exp_ch6.adb (Expand_Actuals): If the actual for an in-out parameter is aliased and is a by_reference type...
      
      2004-10-26  Ed Schonberg  <schonberg@gnat.com>
      	    Eric Botcazou  <ebotcazou@act-europe.fr>
      
      	* exp_ch6.adb (Expand_Actuals): If the actual for an in-out parameter
      	is aliased and is a by_reference type, do not pass by copy.
      	(Expand_N_Function_Call) <Rhs_Of_Assign_Or_Decl>: New function to
      	detect whether the call is in the right side of an assignment or
      	the expression of an object declaration.  Recurse on component
      	association within aggregates.
      	Call it in the condition that determines whether the temporary is
      	necessary for correct stack-checking.
      
      From-SVN: r89651
      Ed Schonberg committed
    • exp_ch4.adb (Expand_N_Op_Eq): Make sure we expand a loop for array compares if… · 5e1c00fa
      exp_ch4.adb (Expand_N_Op_Eq): Make sure we expand a loop for array compares if the component is atomic.
      
      2004-10-26  Robert Dewar  <dewar@gnat.com>
      
      	* exp_ch4.adb (Expand_N_Op_Eq): Make sure we expand a loop for array
      	compares if the component is atomic.
      
      	* exp_ch5.adb (Expand_Assign_Array): Make sure we expand a loop for
      	array assignment if the component type is atomic.
      
      From-SVN: r89650
      Robert Dewar committed
    • exp_aggr.adb (Safe_Component): An aggregate component that is an unchecked… · 6f639c98
      exp_aggr.adb (Safe_Component): An aggregate component that is an unchecked conversion is safe for in-place use...
      
      2004-10-26  Ed Schonberg  <schonberg@gnat.com>
      
      	* exp_aggr.adb (Safe_Component): An aggregate component that is an
      	unchecked conversion is safe for in-place use if the expression of the
      	conversion is safe.
      	(Expand_Array_Aggregate): An aggregate that initializes an allocator may
      	be expandable in place even if the aggregate does not come from source.
      	(Convert_Array_Aggr_In_Allocator): New procedure to initialize the
      	designated object of an allocator in place, rather than building it
      	first on the stack. The previous scheme forces a full copy of the array,
      	and may be altogether unsusable if the size of the array is too large
      	for stack allocation.
      
      From-SVN: r89649
      Ed Schonberg committed
    • eval_fat.adb (Eps_Model,Eps_Denorm): Remove, no longer used. · 05774233
      2004-10-26  Geert Bosch  <bosch@gnat.com>
      
      	* eval_fat.adb (Eps_Model,Eps_Denorm): Remove, no longer used.
      	(Succ): Re-implement using Scaling, Exponent and Ceiling attributes.
      	(Pred): Implement in terms of Succ.
      
      From-SVN: r89648
      Geert Bosch committed
    • decl.c (gnat_to_gnu_field): Use the type of the inner object for a JM type only if... · d63c7002
      2004-10-26  Eric Botcazou  <ebotcazou@act-europe.fr>
      
      	* decl.c (gnat_to_gnu_field): Use the type of the inner object for a
      	JM type only if its size matches that of the wrapper.  When a size is
      	prescribed and the field is not aliased, remove the wrapper of a JM
      	type only if the size is not greater than that of the packed array.
      	(gnat_to_gnu_entity): Change the extension of packed array wrappers
      	from LJM to JM.
      
      From-SVN: r89647
      Eric Botcazou committed
    • clean.adb (Delete): Do not output warnings when in quiet output and not in verbose mode. · 9f162175
      2004-10-26  Vincent Celier  <celier@gnat.com>
      
      	* clean.adb (Delete): Do not output warnings when in quiet output and
      	not in verbose mode.
      	(Force_Deletions): New Boolean flag, defaulted to False
      	(Delete): Only delete a file if it is writable, and when
      	Force_Deletions is True.
      	(Parse_Cmd_Line): New switch -f: set Force_Deletions to True
      	(Usage): Line for new switch -f
      	(Clean_Directory): Use GNAT.OS_Lib.Set_Writable instead of rolling our
      	own.
      
      From-SVN: r89646
      Vincent Celier committed
    • checks.adb (Expr_Known_Valid): If floating-point validity checks are enabled... · 28e4d64e
      2004-10-26  Ed Schonberg  <schonberg@gnat.com>
      
      	* checks.adb (Expr_Known_Valid): If floating-point validity checks are
      	enabled, check the result of unary and binary operations when the
      	expression is the right-hand side of an assignment.
      
      From-SVN: r89645
      Ed Schonberg committed
    • a-filico.ads, [...]: fix incorrect header. · 59705c38
      	* a-filico.ads, a-filico.adb: fix incorrect header.
      	* a-ststio.ads: Fix typo in identifier
      	* sem_ch4.adb: Minor reformatting.
      
      From-SVN: r89644
      Arnaud Charlet committed
    • a-exexpr.adb (Setup_Key): Change initial value to 16#DEAD#... · 910a2e4d
      2004-10-26  Gary Dismukes  <dismukes@gnat.com>
      
      	* a-exexpr.adb (Setup_Key): Change initial value to 16#DEAD#, for
      	compatibility with type Unwind_Word on 16-bit targets such as AAMP.
      
      From-SVN: r89643
      Gary Dismukes committed
    • expect.c, [...] (unix sections): Guard with "__unix__" instead of "unix". · 7cd6e9f1
      2004-10-26  Olivier Hainque  <hainque@act-europe.fr>
      	    Nicolas Setton  <setton@act-europe.fr>
      
      	* expect.c, adaint.c, link.c, sysdep.c (unix sections): Guard with
      	"__unix__" instead of "unix".
      	The latter is implicitly defined by gcc3.2 but not by gcc >= 3.4, so the
      	sections were just mistakenly ignored. The former is
      	implicitely defined by gcc2.8, gcc3.2 and gcc3.4.
      	Update #ifdef preprocessor macro to detect the symbol __hpux__ instead
      	of hpux. This prevents an unwanted definition of the symbol
      	convert_addresses in adaint.o.
      
      From-SVN: r89642
      Olivier Hainque committed
    • s-parame-mingw.adb (Default_Stack_Size): Add some comments. · cc356100
      2004-10-26  Pascal Obry  <obry@gnat.com>
      
      	* s-parame-mingw.adb (Default_Stack_Size): Add some comments.
      
      	* s-taprop-mingw.adb (Create_Task): Set initial stack size to 1024. On
      	Windows only the initial thread stack size can be set so it is good to
      	start we a low stack size.
      	The OS will adjust the size as needed.
      
      From-SVN: r89641
      Pascal Obry committed
    • s-parame-linux.adb (Minimum_Stack_Size): Adjust to return 12K instead of 8K... · 9d96e398
      2004-10-26  Olivier Hainque  <hainque@act-europe.fr>
      
      	* s-parame-linux.adb (Minimum_Stack_Size): Adjust to return 12K
      	instead of 8K, to reflect the real potential needs for stack-checking
      	in the ZCX case.
      
      From-SVN: r89640
      Olivier Hainque committed
    • mlib-tgt-darwin.adb: New file. · c4820158
      2004-10-26  Nicolas Setton  <setton@act-europe.fr>
      
      	* mlib-tgt-darwin.adb: New file.
      
      	* mlib-tgt-tru64.adb, mlib-tgt-aix.adb, mlib-tgt-irix.adb,
      	mlib-tgt-hpux.adb, mlib-tgt-linux.adb, mlib-tgt-solaris.adb,
      	mlib-tgt-vms-alpha.adb, mlib-tgt-vms-ia64.adb,
      	mlib-tgt-mingw.adb, mlib-tgt-vxworks.adb (Archive_Indexer_Options): New
      	subprogram body.
      
      	* Makefile.in: Add support for building shared libraries under Darwin.
      	(EXTRA_GNATRTL_NONTASKING_OBJS, ppc-vxworks): Add s-vxwexc.o, containing
      	the low level EH init subprogram to be called from __gnat_initialize.
      
      	* mlib-tgt.ads, mlib-tgt.adb (Archive_Indexer_Options): New subprogram,
      	indicates which options to pass to the archive indexer.
      
      	* mlib-utl.adb: Add support for calling ranlib with additional
      	options. This is needed for instance under Mac OS X.
      	(Ranlib_Options): New global variable, used to store the potential
      	options to pass to ranlib.
      	(Ar): Use Ranlib_Options when spawning ranlib.
      	(Initialize): Set the value of ranlib option.
      
      From-SVN: r89639
      Nicolas Setton committed
    • 2004-10-26 Vincent Celier <celier@gnat.com> · 41cbab34
      	    Thomas Quinot   <quinot@act-europe.fr>
      
      	* g-socthi-vms.adb, g-socthi-mingw.adb, g-socthi-vxworks.ads:
      	(C_Writev): Change MSG_Forced_Flags to Constants.MSG_Forced_Flags as
      	there is no use of GNAT.Sockets.Constants.
      	Remove remaining pragma Import for C_Write
      	Remove C_Read and C_Write from internal implementation unit
      	GNAT.Sockets.Thin, as their usage for sockets is non-portable (using
      	the read and write functions from the system runtime library is fine
      	on UNIX but won't work under Windows).
      
      	* g-socket.adb: (Abort_Selector): Use C_Send instead of C_Write.
      	(Check_Selector): Use C_Recv instead of C_Read.
      	Selectors are the GNAT.Sockets abstraction to perform a select()
      	call on a set of descriptors. To allow abortion of an ongoing
      	select operation, some data is written to a dedicated socket that
      	is always monitored.
      	Under Windows, the write and read library functions cannot operate
      	on sockets, so we need to use send and recv instead, which is portable
      	across all supported platforms.
      
      	* g-socthi.ads: Remove C_Read and C_Write from internal implementation
      	unit GNAT.Sockets.Thin, as their usage for sockets is non-portable
      	(using the read and write functions from the system runtime library is
      	fine on UNIX but won't work under Windows).
      
      From-SVN: r89638
      Vincent Celier committed
    • basic_string.h (_M_replace_aux, [...]): Move out of line... · 6bfad5e1
      2004-10-27  Paolo Carlini  <pcarlini@suse.de>
      
      	* include/bits/basic_string.h (_M_replace_aux, _M_replace_safe):
      	Move out of line...
      	* include/bits/basic_string.tcc: ... here.
      
      From-SVN: r89637
      Paolo Carlini committed
    • libffi-db.exp (load_gcc_lib): New function. · fdc69597
      * testsuite/lib/libffi-db.exp (load_gcc_lib): New function.
      (libffi_exit): New function.
      (libffi_init): Build the testglue wrapper if needed.
      
      From-SVN: r89636
      Richard Earnshaw committed
    • direct2.c: Cope with different bison 'parse' or 'syntax' error messages. · 028aa389
      	* gcc.dg/cpp/direct2.c: Cope with different bison 'parse' or
      	'syntax' error messages.
      	* gcc.dg/cpp/direct2s.c: Likewise.
      
      From-SVN: r89635
      Nathan Sidwell committed