[pushed:,r15-4610] Use unique_ptr in more places in pretty_printer/diagnostics [PR116613]

Message ID 20241024160345.1502596-1-dmalcolm@redhat.com
State New
Headers
Series [pushed:,r15-4610] Use unique_ptr in more places in pretty_printer/diagnostics [PR116613] |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gcc_build--master-arm fail Patch failed to apply
linaro-tcwg-bot/tcwg_gcc_build--master-aarch64 fail Patch failed to apply

Commit Message

David Malcolm Oct. 24, 2024, 4:03 p.m. UTC
  > On Thu, 2024-10-17 at 03:07 +0100, Gaius Mulley wrote:
> > David Malcolm <dmalcolm@redhat.com> writes:
> > So I'm hoping that either Gaius can help me here with regenerating
> > the Modula 2 sources, or the "always include <memory> from
> > system.h" approach is acceptable/preferable.

> yes sure, here is a proposed patch for m2 containing the changes in the
> two bootstrap tools affected (mc and pge).  I've added the #define
> INCLUDE_MEMORY as above for consistency with your patch [I note that
> my patch has dropped attribute noreturns from M2RTS, which I'll look
> into later tomorrow]

Thanks very much for this patch.  I was able to successfully build with
it, so I merged it into my patch and a couple of fixes for plugins.

Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu; the
earlier almost identical patch was successfully built (stage 1) on all
configurations.

Pushed to trunk as r15-4610-gbf43fe6aa966ea.

The patch that I actually pushed follows below for reference.

Thanks again!
Dave


My forthcoming patches for PR other/116613 make much more use of
cloning of pretty_printers than before, so it makes sense as a
preliminary patch for the result of pretty_printer::clone to be a
std::unique_ptr, rather than add more manual uses of "delete".

On doing so, I noticed various other places where naked new/delete is
used for run-time configuration of diagnostics:
* the output format (text vs SARIF)
* client data hooks
* the option manager
* the URLifier

Hence this patch also makes use of std::unique_ptr and ::make_unique for
managing such client policy classes, and also for diagnostic_buffer's
per-format implementations.

Unfortunately we can't directly include <memory> in our internal headers
but instead any of our TUs that make use of std::unique_ptr must #define
INCLUDE_MEMORY before including system.h.

Hence the bulk of this patch is taken up with adding a define of
INCLUDE_MEMORY to hundreds of source files: everything that includes
diagnostic.h or pretty-print.h (and thus anything transitively such as
includers of lto-wrapper.h, c-tree.h, cp-tree.h and rtl-ssa.h).


Thanks to Gaius Mulley for the parts of the patch that regenerated the
m2 files.

gcc/ada/ChangeLog:
	PR other/116613
	* gcc-interface/misc.cc: Add #define INCLUDE_MEMORY
	* gcc-interface/trans.cc: Likewise.
	* gcc-interface/utils.cc: Likewise.

gcc/analyzer/ChangeLog:
	PR other/116613
	* analyzer-logging.cc: Add #define INCLUDE_MEMORY
	(logger::logger): Update for m_pp becoming a unique_ptr.
	(logger::~logger): Likewise.
	(logger::log_va_partial): Likewise.
	(logger::end_log_line): Likewise.
	* analyzer-logging.h (logger::get_printer): Likewise.
	(logger::m_pp): Convert to a unique_ptr.
	* analyzer.cc (make_label_text): Use
	diagnostic_context::clone_printer and use unique_ptr.
	(make_label_text_n): Likewise.
	* bar-chart.cc: Add #define INCLUDE_MEMORY
	* pending-diagnostic.cc (evdesc::event_desc::formatted_print):
	Use diagnostic_context::clone_printer and use unique_ptr.
	* sm-malloc.cc (sufficiently_similar_p): Likewise.
	* supergraph.cc (supergraph::dump_dot_to_file): Likewise.

gcc/c-family/ChangeLog:
	PR other/116613
	* c-ada-spec.cc: Add #define INCLUDE_MEMORY.
	* c-attribs.cc: Likewise.
	* c-common.cc: Likewise.
	* c-format.cc: Likewise.
	* c-gimplify.cc: Likewise.
	* c-indentation.cc: Likewise.
	* c-opts.cc: Likewise.
	* c-pch.cc: Likewise.
	* c-pragma.cc: Likewise.
	* c-pretty-print.cc: Likewise.  Add #include "make-unique.h".
	(c_pretty_printer::clone): Use std::unique_ptr and ::make_unique.
	* c-pretty-print.h (c_pretty_printer::clone): Use std::unique_ptr.
	* c-type-mismatch.cc: Add #define INCLUDE_MEMORY.
	* c-warn.cc: Likewise.

gcc/c/ChangeLog:
	PR other/116613
	* c-aux-info.cc: Add #define INCLUDE_MEMORY.
	* c-convert.cc: Likewise.
	* c-errors.cc: Likewise.
	* c-fold.cc: Likewise.
	* c-lang.cc: Likewise.
	* c-objc-common.cc: Likewise.
	(pp_markup::element_quoted_type::print_type): Use unique_ptr.
	* c-typeck.cc: Add #define INCLUDE_MEMORY.
	* gimple-parser.cc: Likewise.

gcc/cp/ChangeLog:
	PR other/116613
	* call.cc: Add #define INCLUDE_MEMORY.
	* class.cc: Likewise.
	* constexpr.cc: Likewise.
	* constraint.cc: Likewise.
	* contracts.cc: Likewise.
	* coroutines.cc: Likewise.
	* cp-gimplify.cc: Likewise.
	* cp-lang.cc: Likewise.
	* cp-objcp-common.cc: Likewise.
	* cp-ubsan.cc: Likewise.
	* cvt.cc: Likewise.
	* cxx-pretty-print.cc: Likewise.  Add #include "cp-tree.h".
	(cxx_pretty_printer::clone): Use std::unique_ptr and
	::make_unique.
	* cxx-pretty-print.h (cxx_pretty_printer::clone): Use
	std::unique_ptr.
	* decl2.cc: Add #define INCLUDE_MEMORY.
	* dump.cc: Likewise.
	* except.cc: Likewise.
	* expr.cc: Likewise.
	* friend.cc: Likewise.
	* init.cc: Likewise.
	* lambda.cc: Likewise.
	* logic.cc: Likewise.
	* mangle.cc: Likewise.
	* method.cc: Likewise.
	* optimize.cc: Likewise.
	* pt.cc: Likewise.
	* ptree.cc: Likewise.
	* rtti.cc: Likewise.
	* search.cc: Likewise.
	* semantics.cc: Likewise.
	* tree.cc: Likewise.
	* typeck.cc: Likewise.
	* typeck2.cc: Likewise.
	* vtable-class-hierarchy.cc: Likewise.

gcc/d/ChangeLog:
	PR other/116613
	* d-attribs.cc: Add #define INCLUDE_MEMORY.
	* d-builtins.cc: Likewise.
	* d-codegen.cc: Likewise.
	* d-convert.cc: Likewise.
	* d-diagnostic.cc: Likewise.
	* d-frontend.cc: Likewise.
	* d-lang.cc: Likewise.
	* d-longdouble.cc: Likewise.
	* d-target.cc: Likewise.
	* decl.cc: Likewise.
	* expr.cc: Likewise.
	* intrinsics.cc: Likewise.
	* modules.cc: Likewise.
	* toir.cc: Likewise.
	* typeinfo.cc: Likewise.
	* types.cc: Likewise.

gcc/fortran/ChangeLog:
	PR other/116613
	* arith.cc: Add #define INCLUDE_MEMORY.
	* array.cc: Likewise.
	* bbt.cc: Likewise.
	* check.cc: Likewise.
	* class.cc: Likewise.
	* constructor.cc: Likewise.
	* convert.cc: Likewise.
	* cpp.cc: Likewise.
	* data.cc: Likewise.
	* decl.cc: Likewise.
	* dependency.cc: Likewise.
	* dump-parse-tree.cc: Likewise.
	* error.cc: Likewise.
	* expr.cc: Likewise.
	* f95-lang.cc: Likewise.
	* frontend-passes.cc: Likewise.
	* interface.cc: Likewise.
	* intrinsic.cc: Likewise.
	* io.cc: Likewise.
	* iresolve.cc: Likewise.
	* match.cc: Likewise.
	* matchexp.cc: Likewise.
	* misc.cc: Likewise.
	* module.cc: Likewise.
	* openmp.cc: Likewise.
	* options.cc: Likewise.
	* parse.cc: Likewise.
	* primary.cc: Likewise.
	* resolve.cc: Likewise.
	* scanner.cc: Likewise.
	* simplify.cc: Likewise.
	* st.cc: Likewise.
	* symbol.cc: Likewise.
	* target-memory.cc: Likewise.
	* trans-array.cc: Likewise.
	* trans-common.cc: Likewise.
	* trans-const.cc: Likewise.
	* trans-decl.cc: Likewise.
	* trans-expr.cc: Likewise.
	* trans-intrinsic.cc: Likewise.
	* trans-io.cc: Likewise.
	* trans-openmp.cc: Likewise.
	* trans-stmt.cc: Likewise.
	* trans-types.cc: Likewise.
	* trans.cc: Likewise.

gcc/go/ChangeLog:
	PR other/116613
	* go-backend.cc: Add #define INCLUDE_MEMORY.
	* go-lang.cc: Likewise.

gcc/jit/ChangeLog:
	PR other/116613
	* dummy-frontend.cc: Add #define INCLUDE_MEMORY.
	* jit-playback.cc: Likewise.
	* jit-recording.cc: Likewise.

gcc/lto/ChangeLog:
	PR other/116613
	* lto-common.cc: Add #define INCLUDE_MEMORY.
	* lto-dump.cc: Likewise.
	* lto-partition.cc: Likewise.
	* lto-symtab.cc: Likewise.
	* lto.cc: Likewise.

gcc/m2/ChangeLog:
	PR other/116613
	* gm2-gcc/gcc-consolidation.h: Add #define INCLUDE_MEMORY.
	* gm2-gcc/m2configure.cc: Likewise.
	* mc-boot/GASCII.cc: Regenerate.
	* mc-boot/GASCII.h: Ditto.
	* mc-boot/GArgs.cc: Ditto.
	* mc-boot/GArgs.h: Ditto.
	* mc-boot/GAssertion.cc: Ditto.
	* mc-boot/GAssertion.h: Ditto.
	* mc-boot/GBreak.cc: Ditto.
	* mc-boot/GBreak.h: Ditto.
	* mc-boot/GCOROUTINES.h: Ditto.
	* mc-boot/GCmdArgs.cc: Ditto.
	* mc-boot/GCmdArgs.h: Ditto.
	* mc-boot/GDebug.cc: Ditto.
	* mc-boot/GDebug.h: Ditto.
	* mc-boot/GDynamicStrings.cc: Ditto.
	* mc-boot/GDynamicStrings.h: Ditto.
	* mc-boot/GEnvironment.cc: Ditto.
	* mc-boot/GEnvironment.h: Ditto.
	* mc-boot/GFIO.cc: Ditto.
	* mc-boot/GFIO.h: Ditto.
	* mc-boot/GFormatStrings.cc: Ditto.
	* mc-boot/GFormatStrings.h: Ditto.
	* mc-boot/GFpuIO.cc: Ditto.
	* mc-boot/GFpuIO.h: Ditto.
	* mc-boot/GIO.cc: Ditto.
	* mc-boot/GIO.h: Ditto.
	* mc-boot/GIndexing.cc: Ditto.
	* mc-boot/GIndexing.h: Ditto.
	* mc-boot/GM2Dependent.cc: Ditto.
	* mc-boot/GM2Dependent.h: Ditto.
	* mc-boot/GM2EXCEPTION.cc: Ditto.
	* mc-boot/GM2EXCEPTION.h: Ditto.
	* mc-boot/GM2RTS.cc: Ditto.
	* mc-boot/GM2RTS.h: Ditto.
	* mc-boot/GMemUtils.cc: Ditto.
	* mc-boot/GMemUtils.h: Ditto.
	* mc-boot/GNumberIO.cc: Ditto.
	* mc-boot/GNumberIO.h: Ditto.
	* mc-boot/GPushBackInput.cc: Ditto.
	* mc-boot/GPushBackInput.h: Ditto.
	* mc-boot/GRTExceptions.cc: Ditto.
	* mc-boot/GRTExceptions.h: Ditto.
	* mc-boot/GRTco.h: Ditto.
	* mc-boot/GRTentity.h: Ditto.
	* mc-boot/GRTint.cc: Ditto.
	* mc-boot/GRTint.h: Ditto.
	* mc-boot/GSArgs.cc: Ditto.
	* mc-boot/GSArgs.h: Ditto.
	* mc-boot/GSFIO.cc: Ditto.
	* mc-boot/GSFIO.h: Ditto.
	* mc-boot/GSYSTEM.h: Ditto.
	* mc-boot/GSelective.h: Ditto.
	* mc-boot/GStdIO.cc: Ditto.
	* mc-boot/GStdIO.h: Ditto.
	* mc-boot/GStorage.cc: Ditto.
	* mc-boot/GStorage.h: Ditto.
	* mc-boot/GStrCase.cc: Ditto.
	* mc-boot/GStrCase.h: Ditto.
	* mc-boot/GStrIO.cc: Ditto.
	* mc-boot/GStrIO.h: Ditto.
	* mc-boot/GStrLib.cc: Ditto.
	* mc-boot/GStrLib.h: Ditto.
	* mc-boot/GStringConvert.cc: Ditto.
	* mc-boot/GStringConvert.h: Ditto.
	* mc-boot/GSysExceptions.h: Ditto.
	* mc-boot/GSysStorage.cc: Ditto.
	* mc-boot/GSysStorage.h: Ditto.
	* mc-boot/GTimeString.cc: Ditto.
	* mc-boot/GTimeString.h: Ditto.
	* mc-boot/GUnixArgs.h: Ditto.
	* mc-boot/Galists.cc: Ditto.
	* mc-boot/Galists.h: Ditto.
	* mc-boot/Gdecl.cc: Ditto.
	* mc-boot/Gdecl.h: Ditto.
	* mc-boot/Gdtoa.h: Ditto.
	* mc-boot/Gerrno.h: Ditto.
	* mc-boot/Gkeyc.cc: Ditto.
	* mc-boot/Gkeyc.h: Ditto.
	* mc-boot/Gldtoa.h: Ditto.
	* mc-boot/Glibc.h: Ditto.
	* mc-boot/Glibm.h: Ditto.
	* mc-boot/Glists.cc: Ditto.
	* mc-boot/Glists.h: Ditto.
	* mc-boot/GmcComment.cc: Ditto.
	* mc-boot/GmcComment.h: Ditto.
	* mc-boot/GmcComp.cc: Ditto.
	* mc-boot/GmcComp.h: Ditto.
	* mc-boot/GmcDebug.cc: Ditto.
	* mc-boot/GmcDebug.h: Ditto.
	* mc-boot/GmcError.cc: Ditto.
	* mc-boot/GmcError.h: Ditto.
	* mc-boot/GmcFileName.cc: Ditto.
	* mc-boot/GmcFileName.h: Ditto.
	* mc-boot/GmcLexBuf.cc: Ditto.
	* mc-boot/GmcLexBuf.h: Ditto.
	* mc-boot/GmcMetaError.cc: Ditto.
	* mc-boot/GmcMetaError.h: Ditto.
	* mc-boot/GmcOptions.cc: Ditto.
	* mc-boot/GmcOptions.h: Ditto.
	* mc-boot/GmcPreprocess.cc: Ditto.
	* mc-boot/GmcPreprocess.h: Ditto.
	* mc-boot/GmcPretty.cc: Ditto.
	* mc-boot/GmcPretty.h: Ditto.
	* mc-boot/GmcPrintf.cc: Ditto.
	* mc-boot/GmcPrintf.h: Ditto.
	* mc-boot/GmcQuiet.cc: Ditto.
	* mc-boot/GmcQuiet.h: Ditto.
	* mc-boot/GmcReserved.cc: Ditto.
	* mc-boot/GmcReserved.h: Ditto.
	* mc-boot/GmcSearch.cc: Ditto.
	* mc-boot/GmcSearch.h: Ditto.
	* mc-boot/GmcStack.cc: Ditto.
	* mc-boot/GmcStack.h: Ditto.
	* mc-boot/GmcStream.cc: Ditto.
	* mc-boot/GmcStream.h: Ditto.
	* mc-boot/Gmcflex.h: Ditto.
	* mc-boot/Gmcp1.cc: Ditto.
	* mc-boot/Gmcp1.h: Ditto.
	* mc-boot/Gmcp2.cc: Ditto.
	* mc-boot/Gmcp2.h: Ditto.
	* mc-boot/Gmcp3.cc: Ditto.
	* mc-boot/Gmcp3.h: Ditto.
	* mc-boot/Gmcp4.cc: Ditto.
	* mc-boot/Gmcp4.h: Ditto.
	* mc-boot/Gmcp5.cc: Ditto.
	* mc-boot/Gmcp5.h: Ditto.
	* mc-boot/GnameKey.cc: Ditto.
	* mc-boot/GnameKey.h: Ditto.
	* mc-boot/GsymbolKey.cc: Ditto.
	* mc-boot/GsymbolKey.h: Ditto.
	* mc-boot/Gtermios.h: Ditto.
	* mc-boot/Gtop.cc: Ditto.
	* mc-boot/Gvarargs.cc: Ditto.
	* mc-boot/Gvarargs.h: Ditto.
	* mc-boot/Gwlists.cc: Ditto.
	* mc-boot/Gwlists.h: Ditto.
	* mc-boot/Gwrapc.h: Ditto.
	* mc/keyc.mod (checkGccConfigSystem): Add
	#define INCLUDE_MEMORY.
	* pge-boot/GASCII.cc: Regenerate.
	* pge-boot/GASCII.h: Ditto.
	* pge-boot/GArgs.cc: Ditto.
	* pge-boot/GArgs.h: Ditto.
	* pge-boot/GAssertion.cc: Ditto.
	* pge-boot/GAssertion.h: Ditto.
	* pge-boot/GBreak.h: Ditto.
	* pge-boot/GCmdArgs.h: Ditto.
	* pge-boot/GDebug.cc: Ditto.
	* pge-boot/GDebug.h: Ditto.
	* pge-boot/GDynamicStrings.cc: Ditto.
	* pge-boot/GDynamicStrings.h: Ditto.
	* pge-boot/GEnvironment.h: Ditto.
	* pge-boot/GFIO.cc: Ditto.
	* pge-boot/GFIO.h: Ditto.
	* pge-boot/GFormatStrings.h: Ditto.
	* pge-boot/GFpuIO.h: Ditto.
	* pge-boot/GIO.cc: Ditto.
	* pge-boot/GIO.h: Ditto.
	* pge-boot/GIndexing.cc: Ditto.
	* pge-boot/GIndexing.h: Ditto.
	* pge-boot/GLists.cc: Ditto.
	* pge-boot/GLists.h: Ditto.
	* pge-boot/GM2Dependent.cc: Ditto.
	* pge-boot/GM2Dependent.h: Ditto.
	* pge-boot/GM2EXCEPTION.cc: Ditto.
	* pge-boot/GM2EXCEPTION.h: Ditto.
	* pge-boot/GM2RTS.cc: Ditto.
	* pge-boot/GM2RTS.h: Ditto.
	* pge-boot/GNameKey.cc: Ditto.
	* pge-boot/GNameKey.h: Ditto.
	* pge-boot/GNumberIO.cc: Ditto.
	* pge-boot/GNumberIO.h: Ditto.
	* pge-boot/GOutput.cc: Ditto.
	* pge-boot/GOutput.h: Ditto.
	* pge-boot/GPushBackInput.cc: Ditto.
	* pge-boot/GPushBackInput.h: Ditto.
	* pge-boot/GRTExceptions.cc: Ditto.
	* pge-boot/GRTExceptions.h: Ditto.
	* pge-boot/GSArgs.h: Ditto.
	* pge-boot/GSEnvironment.h: Ditto.
	* pge-boot/GSFIO.cc: Ditto.
	* pge-boot/GSFIO.h: Ditto.
	* pge-boot/GSYSTEM.h: Ditto.
	* pge-boot/GScan.h: Ditto.
	* pge-boot/GStdIO.cc: Ditto.
	* pge-boot/GStdIO.h: Ditto.
	* pge-boot/GStorage.cc: Ditto.
	* pge-boot/GStorage.h: Ditto.
	* pge-boot/GStrCase.cc: Ditto.
	* pge-boot/GStrCase.h: Ditto.
	* pge-boot/GStrIO.cc: Ditto.
	* pge-boot/GStrIO.h: Ditto.
	* pge-boot/GStrLib.cc: Ditto.
	* pge-boot/GStrLib.h: Ditto.
	* pge-boot/GStringConvert.h: Ditto.
	* pge-boot/GSymbolKey.cc: Ditto.
	* pge-boot/GSymbolKey.h: Ditto.
	* pge-boot/GSysExceptions.h: Ditto.
	* pge-boot/GSysStorage.cc: Ditto.
	* pge-boot/GSysStorage.h: Ditto.
	* pge-boot/GTimeString.h: Ditto.
	* pge-boot/GUnixArgs.h: Ditto.
	* pge-boot/Gbnflex.cc: Ditto.
	* pge-boot/Gbnflex.h: Ditto.
	* pge-boot/Gdtoa.h: Ditto.
	* pge-boot/Gerrno.h: Ditto.
	* pge-boot/Gldtoa.h: Ditto.
	* pge-boot/Glibc.h: Ditto.
	* pge-boot/Glibm.h: Ditto.
	* pge-boot/Gpge.cc: Ditto.
	* pge-boot/Gtermios.h: Ditto.
	* pge-boot/Gwrapc.h: Ditto.

gcc/objc/ChangeLog:
	PR other/116613
	* objc-act.cc: Add #define INCLUDE_MEMORY.
	* objc-encoding.cc: Likewise.
	* objc-gnu-runtime-abi-01.cc: Likewise.
	* objc-lang.cc: Likewise.
	* objc-next-runtime-abi-01.cc: Likewise.
	* objc-next-runtime-abi-02.cc: Likewise.
	* objc-runtime-shared-support.cc: Likewise.

gcc/objcp/ChangeLog:: Add #define INCLUDE_MEMORY.
	PR other/116613
	* objcp-decl.cc
	* objcp-lang.cc: Likewise.

gcc/rust/ChangeLog:
	PR other/116613
	* resolve/rust-ast-resolve-expr.cc: Add #define INCLUDE_MEMORY.
	* rust-attribs.cc: Likewise.
	* rust-system.h: Likewise.

gcc/ChangeLog:
	PR other/116613
	* asan.cc: Add #define INCLUDE_MEMORY.
	* attribs.cc: Likewise.
	(attr_access::array_as_string): Use
	diagnostic_context::clone_printer and use unique_ptr.
	* auto-profile.cc: Add #define INCLUDE_MEMORY.
	* calls.cc: Likewise.
	* cfganal.cc: Likewise.
	* cfgexpand.cc: Likewise.
	* cfghooks.cc: Likewise.
	* cfgloop.cc: Likewise.
	* cgraph.cc: Likewise.
	* cgraphclones.cc: Likewise.
	* cgraphunit.cc: Likewise.
	* collect-utils.cc: Likewise.
	* collect2.cc: Likewise.
	* common/config/aarch64/aarch64-common.cc: Likewise.
	* common/config/arm/arm-common.cc: Likewise.
	* common/config/avr/avr-common.cc: Likewise.
	* config/aarch64/aarch64-cc-fusion.cc: Likewise.
	* config/aarch64/aarch64-early-ra.cc: Likewise.
	* config/aarch64/aarch64-sve-builtins.cc: Likewise.
	* config/arc/arc.cc: Likewise.
	* config/arm/aarch-common.cc: Likewise.
	* config/arm/arm-mve-builtins.cc: Likewise.
	* config/avr/avr-devices.cc: Likewise.
	* config/avr/driver-avr.cc: Likewise.
	* config/bpf/bpf.cc: Likewise.
	* config/bpf/btfext-out.cc: Likewise.
	* config/bpf/core-builtins.cc: Likewise.
	* config/darwin.cc: Likewise.
	* config/i386/driver-i386.cc: Likewise.
	* config/i386/i386-builtins.cc: Likewise.
	* config/i386/i386-expand.cc: Likewise.
	* config/i386/i386-features.cc: Likewise.
	* config/i386/i386-options.cc: Likewise.
	* config/loongarch/loongarch-builtins.cc: Likewise.
	* config/mingw/winnt-cxx.cc: Likewise.
	* config/mingw/winnt.cc: Likewise.
	* config/mips/mips.cc: Likewise.
	* config/msp430/driver-msp430.cc: Likewise.
	* config/nvptx/mkoffload.cc: Likewise.
	* config/nvptx/nvptx.cc: Likewise.
	* config/riscv/riscv-avlprop.cc: Likewise.
	* config/riscv/riscv-vector-builtins.cc: Likewise.
	* config/riscv/riscv-vsetvl.cc: Likewise.
	* config/rs6000/driver-rs6000.cc: Likewise.
	* config/rs6000/host-darwin.cc: Likewise.
	* config/rs6000/rs6000-c.cc: Likewise.
	* config/s390/s390-c.cc: Likewise.
	* config/s390/s390.cc: Likewise.
	* config/sol2-cxx.cc: Likewise.
	* config/vms/vms-c.cc: Likewise.
	* config/xtensa/xtensa-dynconfig.cc: Likewise.
	* coroutine-passes.cc: Likewise.
	* coverage.cc: Likewise.
	* data-streamer-in.cc: Likewise.
	* data-streamer-out.cc: Likewise.
	* data-streamer.cc: Likewise.
	* diagnostic-buffer.h (diagnostic_buffer::~diagnostic_buffer):
	Delete.
	(diagnostic_buffer::m_per_format_buffer): Use std::unique_ptr.
	* diagnostic-client-data-hooks.h (make_compiler_data_hooks): Use
	std::unique_ptr for return type.
	* diagnostic-format-json.cc
	(json_output_format::make_per_format_buffer): Likewise.
	(diagnostic_output_format_init_json): Update for usage of
	std::unique_ptr in set_output_format.
	* diagnostic-format-sarif.cc
	(sarif_output_format::make_per_format_buffer): Use std::unique_ptr
	for return type.
	(diagnostic_output_format_init_sarif): Update for usage of
	std::unique_ptr.
	(test_message_with_embedded_link): Likewise for set_urlifier.
	* diagnostic-format-text.cc: Add #define INCLUDE_MEMORY.  Include
	"make-unique.h".
	(diagnostic_text_output_format::set_buffer): Use std::unique_ptr.
	* diagnostic-format-text.h
	(diagnostic_text_output_format::set_buffer): Likewise.
	* diagnostic-format.h
	(diagnostic_output_format::make_per_format_buffer): Likewise.
	* diagnostic-global-context.cc:
	* diagnostic-macro-unwinding.cc: Likewise.
	* diagnostic-show-locus.cc: Likewise.
	* diagnostic-spec.cc: Likewise.
	* diagnostic.cc (diagnostic_context::set_output_format): Use
	std::unique_ptr for input.
	(diagnostic_context::set_client_data_hooks): Likewise.
	(diagnostic_context::set_option_manager): Likewise.
	(diagnostic_context::set_urlifier): Likewise.
	(diagnostic_context::set_diagnostic_buffer): Update for use of
	std::unique_ptr.
	(diagnostic_buffer::diagnostic_buffer): Likewise.
	(diagnostic_buffer::~diagnostic_buffer): Delete.
	* diagnostic.h: Complain if INCLUDE_MEMORY was not defined.
	(diagnostic_context::set_output_format): Use std::unique_ptr for
	input.
	(diagnostic_context::set_client_data_hooks): Likewise.
	(diagnostic_context::set_option_manager): Likewise.
	(diagnostic_context::set_urlifier): Likewise.
	(diagnostic_context::clone_printer): New.
	(diagnostic_context::m_printer): Update comment.
	(diagnostic_context::m_option_mgr): Likewise.
	(diagnostic_context::m_urlifier): Likewise.
	(diagnostic_context::m_edit_context_ptr): Likewise.
	(diagnostic_context::m_output_format): Likewise.
	(diagnostic_context::m_client_data_hooks): Likewise.
	(diagnostic_context::m_theme): Likewise.
	* digraph.cc: Add #define INCLUDE_MEMORY.
	* dwarf2out.cc: Likewise.
	* edit-context.cc: Likewise.
	* except.cc: Likewise.
	* expr.cc: Likewise.
	* file-prefix-map.cc: Likewise.
	* final.cc: Likewise.
	* fwprop.cc: Likewise.
	* gcc-plugin.h: Likewise.
	* gcc-rich-location.cc: Likewise.
	* gcc-urlifier.cc: Likewise.  Add #include "make-unique.h".
	(make_gcc_urlifier): Use std::unique_ptr and ::make_unique.
	* gcc-urlifier.h (make_gcc_urlifier): Use std::unique_ptr.
	* gcc.cc: Add #define INCLUDE_MEMORY.  Include
	"pretty-print-urlifier.h".
	* gcov-dump.cc: Add #define INCLUDE_MEMORY.
	* gcov-tool.cc: Likewise.
	* gengtype.cc (open_base_files): Likewise to output.
	* genmatch.cc: Likewise.
	* gimple-fold.cc: Likewise.
	* gimple-harden-conditionals.cc: Likewise.
	* gimple-harden-control-flow.cc: Likewise.
	* gimple-if-to-switch.cc: Likewise.
	* gimple-lower-bitint.cc: Likewise.
	* gimple-predicate-analysis.cc: Likewise.
	* gimple-pretty-print.cc: Likewise.
	* gimple-range-cache.cc: Likewise.
	* gimple-range-edge.cc: Likewise.
	* gimple-range-fold.cc: Likewise.
	* gimple-range-gori.cc: Likewise.
	* gimple-range-infer.cc: Likewise.
	* gimple-range-op.cc: Likewise.
	* gimple-range-path.cc: Likewise.
	* gimple-range-phi.cc: Likewise.
	* gimple-range-trace.cc: Likewise.
	* gimple-range.cc: Likewise.
	* gimple-ssa-backprop.cc: Likewise.
	* gimple-ssa-sprintf.cc: Likewise.
	* gimple-ssa-store-merging.cc: Likewise.
	* gimple-ssa-strength-reduction.cc: Likewise.
	* gimple-ssa-warn-access.cc: Likewise.
	* gimple-ssa-warn-alloca.cc: Likewise.
	* gimple-ssa-warn-restrict.cc: Likewise.
	* gimple-streamer-in.cc: Likewise.
	* gimple-streamer-out.cc: Likewise.
	* gimple.cc: Likewise.
	* gimplify.cc: Likewise.
	* graph.cc: Likewise.
	* graphviz.cc: Likewise.
	* input.cc: Likewise.
	* ipa-cp.cc: Likewise.
	* ipa-devirt.cc: Likewise.
	* ipa-fnsummary.cc: Likewise.
	* ipa-free-lang-data.cc: Likewise.
	* ipa-icf-gimple.cc: Likewise.
	* ipa-icf.cc: Likewise.
	* ipa-inline-analysis.cc: Likewise.
	* ipa-inline.cc: Likewise.
	* ipa-modref-tree.cc: Likewise.
	* ipa-modref.cc: Likewise.
	* ipa-param-manipulation.cc: Likewise.
	* ipa-polymorphic-call.cc: Likewise.
	* ipa-predicate.cc: Likewise.
	* ipa-profile.cc: Likewise.
	* ipa-prop.cc: Likewise.
	* ipa-pure-const.cc: Likewise.
	* ipa-reference.cc: Likewise.
	* ipa-split.cc: Likewise.
	* ipa-sra.cc: Likewise.
	* ipa-strub.cc: Likewise.
	* ipa-utils.cc: Likewise.
	* langhooks.cc: Likewise.
	* late-combine.cc: Likewise.
	* lto-cgraph.cc: Likewise.
	* lto-compress.cc: Likewise.
	* lto-opts.cc: Likewise.
	* lto-section-in.cc: Likewise.
	* lto-section-out.cc: Likewise.
	* lto-streamer-in.cc: Likewise.
	* lto-streamer-out.cc: Likewise.
	* lto-streamer.cc: Likewise.
	* lto-wrapper.cc: Likewise.  Include "make-unique.h".
	(main): Use ::make_unique when creating option manager.
	* multiple_target.cc: Likewise.
	* omp-expand.cc: Likewise.
	* omp-general.cc: Likewise.
	* omp-low.cc: Likewise.
	* omp-oacc-neuter-broadcast.cc: Likewise.
	* omp-offload.cc: Likewise.
	* omp-simd-clone.cc: Likewise.
	* optc-gen.awk: Likewise in output.
	* optc-save-gen.awk: Likewise in output.
	* options-urls-cc-gen.awk: Likewise in output.
	* opts-common.cc: Likewise.
	* opts-global.cc: Likewise.
	* opts.cc: Likewise.
	* pair-fusion.cc: Likewise.
	* passes.cc: Likewise.
	* pointer-query.cc: Likewise.
	* predict.cc: Likewise.
	* pretty-print.cc (pretty_printer::clone): Use std::unique_ptr and
	::make_unique.
	* pretty-print.h: Complain if INCLUDE_MEMORY is not defined.
	(pretty_printer::clone): Use std::unique_ptr.
	* print-rtl.cc: Add #define INCLUDE_MEMORY.
	* print-tree.cc: Likewise.
	* profile-count.cc: Likewise.
	* range-op-float.cc: Likewise.
	* range-op-ptr.cc: Likewise.
	* range-op.cc: Likewise.
	* range.cc: Likewise.
	* read-rtl-function.cc: Likewise.
	* rtl-error.cc: Likewise.
	* rtl-ssa/accesses.cc: Likewise.
	* rtl-ssa/blocks.cc: Likewise.
	* rtl-ssa/changes.cc: Likewise.
	* rtl-ssa/functions.cc: Likewise.
	* rtl-ssa/insns.cc: Likewise.
	* rtl-ssa/movement.cc: Likewise.
	* rtl-tests.cc: Likewise.
	* sanopt.cc: Likewise.
	* sched-rgn.cc: Likewise.
	* selftest-diagnostic-path.cc: Likewise.
	* selftest-diagnostic.cc: Likewise.
	* splay-tree-utils.cc: Likewise.
	* sreal.cc: Likewise.
	* stmt.cc: Likewise.
	* substring-locations.cc: Likewise.
	* symtab-clones.cc: Likewise.
	* symtab-thunks.cc: Likewise.
	* symtab.cc: Likewise.
	* text-art/box-drawing.cc: Likewise.
	* text-art/canvas.cc: Likewise.
	* text-art/ruler.cc: Likewise.
	* text-art/selftests.cc: Likewise.
	* text-art/theme.cc: Likewise.
	* toplev.cc: Likewise.  Include "make-unique.h".
	(general_init): Use ::make_unique when setting option_manager.
	* trans-mem.cc: Add #define INCLUDE_MEMORY.
	* tree-affine.cc: Likewise.
	* tree-call-cdce.cc: Likewise.
	* tree-cfg.cc: Likewise.
	* tree-chrec.cc: Likewise.
	* tree-dfa.cc: Likewise.
	* tree-diagnostic-client-data-hooks.cc: Include "make-unique.h".
	(make_compiler_data_hooks): Use std::unique_ptr and ::make_unique.
	* tree-diagnostic.cc: Add #define INCLUDE_MEMORY.
	* tree-dump.cc: Likewise.
	* tree-inline.cc: Likewise.
	* tree-into-ssa.cc: Likewise.
	* tree-logical-location.cc: Likewise.
	* tree-nested.cc: Likewise.
	* tree-nrv.cc: Likewise.
	* tree-object-size.cc: Likewise.
	* tree-outof-ssa.cc: Likewise.
	* tree-pretty-print.cc: Likewise.
	* tree-profile.cc: Likewise.
	* tree-scalar-evolution.cc: Likewise.
	* tree-sra.cc: Likewise.
	* tree-ssa-address.cc: Likewise.
	* tree-ssa-alias.cc: Likewise.
	* tree-ssa-ccp.cc: Likewise.
	* tree-ssa-coalesce.cc: Likewise.
	* tree-ssa-copy.cc: Likewise.
	* tree-ssa-dce.cc: Likewise.
	* tree-ssa-dom.cc: Likewise.
	* tree-ssa-forwprop.cc: Likewise.
	* tree-ssa-ifcombine.cc: Likewise.
	* tree-ssa-loop-ch.cc: Likewise.
	* tree-ssa-loop-im.cc: Likewise.
	* tree-ssa-loop-manip.cc: Likewise.
	* tree-ssa-loop-niter.cc: Likewise.
	* tree-ssa-loop-split.cc: Likewise.
	* tree-ssa-math-opts.cc: Likewise.
	* tree-ssa-operands.cc: Likewise.
	* tree-ssa-phiprop.cc: Likewise.
	* tree-ssa-pre.cc: Likewise.
	* tree-ssa-propagate.cc: Likewise.
	* tree-ssa-reassoc.cc: Likewise.
	* tree-ssa-sccvn.cc: Likewise.
	* tree-ssa-scopedtables.cc: Likewise.
	* tree-ssa-sink.cc: Likewise.
	* tree-ssa-strlen.cc: Likewise.
	* tree-ssa-structalias.cc: Likewise.
	* tree-ssa-ter.cc: Likewise.
	* tree-ssa-uninit.cc: Likewise.
	* tree-ssa.cc: Likewise.
	* tree-ssanames.cc: Likewise.
	* tree-stdarg.cc: Likewise.
	* tree-streamer-in.cc: Likewise.
	* tree-streamer-out.cc: Likewise.
	* tree-streamer.cc: Likewise.
	* tree-switch-conversion.cc: Likewise.
	* tree-tailcall.cc: Likewise.
	* tree-vrp.cc: Likewise.
	* tree.cc: Likewise.
	* ubsan.cc: Likewise.
	* value-pointer-equiv.cc: Likewise.
	* value-prof.cc: Likewise.
	* value-query.cc: Likewise.
	* value-range-pretty-print.cc: Likewise.
	* value-range-storage.cc: Likewise.
	* value-range.cc: Likewise.
	* value-relation.cc: Likewise.
	* var-tracking.cc: Likewise.
	* varpool.cc: Likewise.
	* vr-values.cc: Likewise.
	* wide-int-print.cc: Likewise.

gcc/testsuite/ChangeLog:
	PR other/116613
	* gcc.dg/plugin/diagnostic_group_plugin.c: Update for use of
	std::unique_ptr.
	* gcc.dg/plugin/diagnostic_plugin_xhtml_format.c: Likewise.
	* gcc.dg/plugin/ggcplug.c: Likewise.

libgcc/ChangeLog:
	PR other/116613
	* libgcov-util.c: Add #define INCLUDE_MEMORY.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
Co-authored-by: Gaius Mulley <gaiusmod2@gmail.com>
---
 gcc/ada/gcc-interface/misc.cc                 |   1 +
 gcc/ada/gcc-interface/trans.cc                |   1 +
 gcc/ada/gcc-interface/utils.cc                |   1 +
 gcc/analyzer/analyzer-logging.cc              |  16 +--
 gcc/analyzer/analyzer-logging.h               |   4 +-
 gcc/analyzer/analyzer.cc                      |  27 ++--
 gcc/analyzer/bar-chart.cc                     |   1 +
 gcc/analyzer/pending-diagnostic.cc            |  12 +-
 gcc/analyzer/sm-malloc.cc                     |  13 +-
 gcc/analyzer/supergraph.cc                    |  11 +-
 gcc/asan.cc                                   |   1 +
 gcc/attribs.cc                                |   8 +-
 gcc/auto-profile.cc                           |   1 +
 gcc/c-family/c-ada-spec.cc                    |   1 +
 gcc/c-family/c-attribs.cc                     |   1 +
 gcc/c-family/c-common.cc                      |   1 +
 gcc/c-family/c-format.cc                      |   1 +
 gcc/c-family/c-gimplify.cc                    |   1 +
 gcc/c-family/c-indentation.cc                 |   1 +
 gcc/c-family/c-opts.cc                        |   1 +
 gcc/c-family/c-pch.cc                         |   1 +
 gcc/c-family/c-pragma.cc                      |   1 +
 gcc/c-family/c-pretty-print.cc                |   6 +-
 gcc/c-family/c-pretty-print.h                 |   2 +-
 gcc/c-family/c-type-mismatch.cc               |   1 +
 gcc/c-family/c-warn.cc                        |   1 +
 gcc/c/c-aux-info.cc                           |   1 +
 gcc/c/c-convert.cc                            |   1 +
 gcc/c/c-errors.cc                             |   1 +
 gcc/c/c-fold.cc                               |   1 +
 gcc/c/c-lang.cc                               |   1 +
 gcc/c/c-objc-common.cc                        |   5 +-
 gcc/c/c-typeck.cc                             |   1 +
 gcc/c/gimple-parser.cc                        |   1 +
 gcc/calls.cc                                  |   1 +
 gcc/cfganal.cc                                |   1 +
 gcc/cfgexpand.cc                              |   1 +
 gcc/cfghooks.cc                               |   1 +
 gcc/cfgloop.cc                                |   1 +
 gcc/cgraph.cc                                 |   1 +
 gcc/cgraphclones.cc                           |   1 +
 gcc/cgraphunit.cc                             |   1 +
 gcc/collect-utils.cc                          |   1 +
 gcc/collect2.cc                               |   1 +
 gcc/common/config/aarch64/aarch64-common.cc   |   1 +
 gcc/common/config/arm/arm-common.cc           |   1 +
 gcc/common/config/avr/avr-common.cc           |   1 +
 gcc/config/aarch64/aarch64-cc-fusion.cc       |   1 +
 gcc/config/aarch64/aarch64-early-ra.cc        |   1 +
 gcc/config/aarch64/aarch64-sve-builtins.cc    |   1 +
 gcc/config/arc/arc.cc                         |   1 +
 gcc/config/arm/aarch-common.cc                |   1 +
 gcc/config/arm/arm-mve-builtins.cc            |   1 +
 gcc/config/avr/avr-devices.cc                 |   1 +
 gcc/config/avr/driver-avr.cc                  |   1 +
 gcc/config/bpf/bpf.cc                         |   1 +
 gcc/config/bpf/btfext-out.cc                  |   1 +
 gcc/config/bpf/core-builtins.cc               |   1 +
 gcc/config/darwin.cc                          |   1 +
 gcc/config/i386/driver-i386.cc                |   1 +
 gcc/config/i386/i386-builtins.cc              |   1 +
 gcc/config/i386/i386-expand.cc                |   1 +
 gcc/config/i386/i386-features.cc              |   1 +
 gcc/config/i386/i386-options.cc               |   1 +
 gcc/config/loongarch/loongarch-builtins.cc    |   1 +
 gcc/config/mingw/winnt-cxx.cc                 |   1 +
 gcc/config/mingw/winnt.cc                     |   1 +
 gcc/config/mips/mips.cc                       |   1 +
 gcc/config/msp430/driver-msp430.cc            |   1 +
 gcc/config/nvptx/mkoffload.cc                 |   1 +
 gcc/config/nvptx/nvptx.cc                     |   1 +
 gcc/config/riscv/riscv-avlprop.cc             |   1 +
 gcc/config/riscv/riscv-vector-builtins.cc     |   1 +
 gcc/config/riscv/riscv-vsetvl.cc              |   1 +
 gcc/config/rs6000/driver-rs6000.cc            |   1 +
 gcc/config/rs6000/host-darwin.cc              |   1 +
 gcc/config/rs6000/rs6000-c.cc                 |   1 +
 gcc/config/s390/s390-c.cc                     |   1 +
 gcc/config/s390/s390.cc                       |   1 +
 gcc/config/sol2-cxx.cc                        |   1 +
 gcc/config/vms/vms-c.cc                       |   1 +
 gcc/config/xtensa/xtensa-dynconfig.cc         |   1 +
 gcc/coroutine-passes.cc                       |   1 +
 gcc/coverage.cc                               |   1 +
 gcc/cp/call.cc                                |   1 +
 gcc/cp/class.cc                               |   1 +
 gcc/cp/constexpr.cc                           |   1 +
 gcc/cp/constraint.cc                          |   1 +
 gcc/cp/contracts.cc                           |   1 +
 gcc/cp/coroutines.cc                          |   1 +
 gcc/cp/cp-gimplify.cc                         |   1 +
 gcc/cp/cp-lang.cc                             |   1 +
 gcc/cp/cp-objcp-common.cc                     |   1 +
 gcc/cp/cp-ubsan.cc                            |   1 +
 gcc/cp/cvt.cc                                 |   1 +
 gcc/cp/cxx-pretty-print.cc                    |   6 +-
 gcc/cp/cxx-pretty-print.h                     |   2 +-
 gcc/cp/decl2.cc                               |   1 +
 gcc/cp/dump.cc                                |   1 +
 gcc/cp/except.cc                              |   1 +
 gcc/cp/expr.cc                                |   1 +
 gcc/cp/friend.cc                              |   1 +
 gcc/cp/init.cc                                |   1 +
 gcc/cp/lambda.cc                              |   1 +
 gcc/cp/logic.cc                               |   1 +
 gcc/cp/mangle.cc                              |   1 +
 gcc/cp/method.cc                              |   1 +
 gcc/cp/optimize.cc                            |   1 +
 gcc/cp/pt.cc                                  |   1 +
 gcc/cp/ptree.cc                               |   1 +
 gcc/cp/rtti.cc                                |   1 +
 gcc/cp/search.cc                              |   1 +
 gcc/cp/semantics.cc                           |   1 +
 gcc/cp/tree.cc                                |   1 +
 gcc/cp/typeck.cc                              |   1 +
 gcc/cp/typeck2.cc                             |   1 +
 gcc/cp/vtable-class-hierarchy.cc              |   1 +
 gcc/d/d-attribs.cc                            |   1 +
 gcc/d/d-builtins.cc                           |   1 +
 gcc/d/d-codegen.cc                            |   1 +
 gcc/d/d-convert.cc                            |   1 +
 gcc/d/d-diagnostic.cc                         |   1 +
 gcc/d/d-frontend.cc                           |   1 +
 gcc/d/d-lang.cc                               |   1 +
 gcc/d/d-longdouble.cc                         |   1 +
 gcc/d/d-target.cc                             |   1 +
 gcc/d/decl.cc                                 |   1 +
 gcc/d/expr.cc                                 |   1 +
 gcc/d/intrinsics.cc                           |   1 +
 gcc/d/modules.cc                              |   1 +
 gcc/d/toir.cc                                 |   1 +
 gcc/d/typeinfo.cc                             |   1 +
 gcc/d/types.cc                                |   1 +
 gcc/data-streamer-in.cc                       |   1 +
 gcc/data-streamer-out.cc                      |   1 +
 gcc/data-streamer.cc                          |   1 +
 gcc/diagnostic-buffer.h                       |   3 +-
 gcc/diagnostic-client-data-hooks.h            |   2 +-
 gcc/diagnostic-format-json.cc                 |   7 +-
 gcc/diagnostic-format-sarif.cc                |   9 +-
 gcc/diagnostic-format-text.cc                 |   6 +-
 gcc/diagnostic-format-text.h                  |   3 +-
 gcc/diagnostic-format.h                       |   3 +-
 gcc/diagnostic-global-context.cc              |   1 +
 gcc/diagnostic-macro-unwinding.cc             |   1 +
 gcc/diagnostic-show-locus.cc                  |   1 +
 gcc/diagnostic-spec.cc                        |   1 +
 gcc/diagnostic.cc                             |  37 +++---
 gcc/diagnostic.h                              |  52 ++++++--
 gcc/digraph.cc                                |   1 +
 gcc/dwarf2out.cc                              |   1 +
 gcc/edit-context.cc                           |   1 +
 gcc/except.cc                                 |   1 +
 gcc/expr.cc                                   |   1 +
 gcc/file-prefix-map.cc                        |   1 +
 gcc/final.cc                                  |   1 +
 gcc/fortran/arith.cc                          |   1 +
 gcc/fortran/array.cc                          |   1 +
 gcc/fortran/bbt.cc                            |   1 +
 gcc/fortran/check.cc                          |   1 +
 gcc/fortran/class.cc                          |   1 +
 gcc/fortran/constructor.cc                    |   1 +
 gcc/fortran/convert.cc                        |   1 +
 gcc/fortran/cpp.cc                            |   1 +
 gcc/fortran/data.cc                           |   1 +
 gcc/fortran/decl.cc                           |   1 +
 gcc/fortran/dependency.cc                     |   1 +
 gcc/fortran/dump-parse-tree.cc                |   1 +
 gcc/fortran/error.cc                          |   1 +
 gcc/fortran/expr.cc                           |   1 +
 gcc/fortran/f95-lang.cc                       |   1 +
 gcc/fortran/frontend-passes.cc                |   1 +
 gcc/fortran/interface.cc                      |   1 +
 gcc/fortran/intrinsic.cc                      |   1 +
 gcc/fortran/io.cc                             |   1 +
 gcc/fortran/iresolve.cc                       |   1 +
 gcc/fortran/match.cc                          |   1 +
 gcc/fortran/matchexp.cc                       |   1 +
 gcc/fortran/misc.cc                           |   1 +
 gcc/fortran/module.cc                         |   1 +
 gcc/fortran/openmp.cc                         |   1 +
 gcc/fortran/options.cc                        |   1 +
 gcc/fortran/parse.cc                          |   1 +
 gcc/fortran/primary.cc                        |   1 +
 gcc/fortran/resolve.cc                        |   1 +
 gcc/fortran/scanner.cc                        |   1 +
 gcc/fortran/simplify.cc                       |   1 +
 gcc/fortran/st.cc                             |   1 +
 gcc/fortran/symbol.cc                         |   1 +
 gcc/fortran/target-memory.cc                  |   1 +
 gcc/fortran/trans-array.cc                    |   1 +
 gcc/fortran/trans-common.cc                   |   1 +
 gcc/fortran/trans-const.cc                    |   1 +
 gcc/fortran/trans-decl.cc                     |   1 +
 gcc/fortran/trans-expr.cc                     |   1 +
 gcc/fortran/trans-intrinsic.cc                |   1 +
 gcc/fortran/trans-io.cc                       |   1 +
 gcc/fortran/trans-openmp.cc                   |   1 +
 gcc/fortran/trans-stmt.cc                     |   1 +
 gcc/fortran/trans-types.cc                    |   1 +
 gcc/fortran/trans.cc                          |   1 +
 gcc/fwprop.cc                                 |   1 +
 gcc/gcc-plugin.h                              |   1 +
 gcc/gcc-rich-location.cc                      |   1 +
 gcc/gcc-urlifier.cc                           |   6 +-
 gcc/gcc-urlifier.h                            |   2 +-
 gcc/gcc.cc                                    |   2 +
 gcc/gcov-dump.cc                              |   1 +
 gcc/gcov-tool.cc                              |   1 +
 gcc/gengtype.cc                               |   1 +
 gcc/genmatch.cc                               |   1 +
 gcc/gimple-fold.cc                            |   1 +
 gcc/gimple-harden-conditionals.cc             |   1 +
 gcc/gimple-harden-control-flow.cc             |   1 +
 gcc/gimple-if-to-switch.cc                    |   1 +
 gcc/gimple-lower-bitint.cc                    |   1 +
 gcc/gimple-predicate-analysis.cc              |   1 +
 gcc/gimple-pretty-print.cc                    |   1 +
 gcc/gimple-range-cache.cc                     |   1 +
 gcc/gimple-range-edge.cc                      |   1 +
 gcc/gimple-range-fold.cc                      |   1 +
 gcc/gimple-range-gori.cc                      |   1 +
 gcc/gimple-range-infer.cc                     |   1 +
 gcc/gimple-range-op.cc                        |   1 +
 gcc/gimple-range-path.cc                      |   1 +
 gcc/gimple-range-phi.cc                       |   1 +
 gcc/gimple-range-trace.cc                     |   1 +
 gcc/gimple-range.cc                           |   1 +
 gcc/gimple-ssa-backprop.cc                    |   1 +
 gcc/gimple-ssa-sprintf.cc                     |   1 +
 gcc/gimple-ssa-store-merging.cc               |   1 +
 gcc/gimple-ssa-strength-reduction.cc          |   1 +
 gcc/gimple-ssa-warn-access.cc                 |   1 +
 gcc/gimple-ssa-warn-alloca.cc                 |   1 +
 gcc/gimple-ssa-warn-restrict.cc               |   1 +
 gcc/gimple-streamer-in.cc                     |   1 +
 gcc/gimple-streamer-out.cc                    |   1 +
 gcc/gimple.cc                                 |   1 +
 gcc/gimplify.cc                               |   1 +
 gcc/go/go-backend.cc                          |   1 +
 gcc/go/go-lang.cc                             |   1 +
 gcc/graph.cc                                  |   1 +
 gcc/graphviz.cc                               |   1 +
 gcc/input.cc                                  |   1 +
 gcc/ipa-cp.cc                                 |   1 +
 gcc/ipa-devirt.cc                             |   1 +
 gcc/ipa-fnsummary.cc                          |   1 +
 gcc/ipa-free-lang-data.cc                     |   1 +
 gcc/ipa-icf-gimple.cc                         |   1 +
 gcc/ipa-icf.cc                                |   1 +
 gcc/ipa-inline-analysis.cc                    |   1 +
 gcc/ipa-inline.cc                             |   1 +
 gcc/ipa-modref-tree.cc                        |   1 +
 gcc/ipa-modref.cc                             |   1 +
 gcc/ipa-param-manipulation.cc                 |   1 +
 gcc/ipa-polymorphic-call.cc                   |   1 +
 gcc/ipa-predicate.cc                          |   1 +
 gcc/ipa-profile.cc                            |   1 +
 gcc/ipa-prop.cc                               |   1 +
 gcc/ipa-pure-const.cc                         |   1 +
 gcc/ipa-reference.cc                          |   1 +
 gcc/ipa-split.cc                              |   1 +
 gcc/ipa-sra.cc                                |   1 +
 gcc/ipa-strub.cc                              |   1 +
 gcc/ipa-utils.cc                              |   1 +
 gcc/jit/dummy-frontend.cc                     |   1 +
 gcc/jit/jit-playback.cc                       |   1 +
 gcc/jit/jit-recording.cc                      |   1 +
 gcc/langhooks.cc                              |   1 +
 gcc/late-combine.cc                           |   1 +
 gcc/lto-cgraph.cc                             |   1 +
 gcc/lto-compress.cc                           |   1 +
 gcc/lto-opts.cc                               |   1 +
 gcc/lto-section-in.cc                         |   1 +
 gcc/lto-section-out.cc                        |   1 +
 gcc/lto-streamer-in.cc                        |   1 +
 gcc/lto-streamer-out.cc                       |   1 +
 gcc/lto-streamer.cc                           |   1 +
 gcc/lto-wrapper.cc                            |   5 +-
 gcc/lto/lto-common.cc                         |   1 +
 gcc/lto/lto-dump.cc                           |   1 +
 gcc/lto/lto-partition.cc                      |   1 +
 gcc/lto/lto-symtab.cc                         |   1 +
 gcc/lto/lto.cc                                |   1 +
 gcc/m2/gm2-gcc/gcc-consolidation.h            |   1 +
 gcc/m2/gm2-gcc/m2configure.cc                 |   1 +
 gcc/m2/mc-boot/GASCII.cc                      |   1 +
 gcc/m2/mc-boot/GASCII.h                       |   1 +
 gcc/m2/mc-boot/GArgs.cc                       |   1 +
 gcc/m2/mc-boot/GArgs.h                        |   1 +
 gcc/m2/mc-boot/GAssertion.cc                  |   1 +
 gcc/m2/mc-boot/GAssertion.h                   |   1 +
 gcc/m2/mc-boot/GBreak.cc                      |   1 +
 gcc/m2/mc-boot/GBreak.h                       |   1 +
 gcc/m2/mc-boot/GCOROUTINES.h                  |   1 +
 gcc/m2/mc-boot/GCmdArgs.cc                    |   1 +
 gcc/m2/mc-boot/GCmdArgs.h                     |   1 +
 gcc/m2/mc-boot/GDebug.cc                      |   1 +
 gcc/m2/mc-boot/GDebug.h                       |   1 +
 gcc/m2/mc-boot/GDynamicStrings.cc             |   1 +
 gcc/m2/mc-boot/GDynamicStrings.h              |   1 +
 gcc/m2/mc-boot/GEnvironment.cc                |   1 +
 gcc/m2/mc-boot/GEnvironment.h                 |   1 +
 gcc/m2/mc-boot/GFIO.cc                        |   1 +
 gcc/m2/mc-boot/GFIO.h                         |   1 +
 gcc/m2/mc-boot/GFormatStrings.cc              |   1 +
 gcc/m2/mc-boot/GFormatStrings.h               |   1 +
 gcc/m2/mc-boot/GFpuIO.cc                      |   1 +
 gcc/m2/mc-boot/GFpuIO.h                       |   1 +
 gcc/m2/mc-boot/GIO.cc                         |   1 +
 gcc/m2/mc-boot/GIO.h                          |   1 +
 gcc/m2/mc-boot/GIndexing.cc                   |   1 +
 gcc/m2/mc-boot/GIndexing.h                    |   1 +
 gcc/m2/mc-boot/GM2Dependent.cc                |   1 +
 gcc/m2/mc-boot/GM2Dependent.h                 |   1 +
 gcc/m2/mc-boot/GM2EXCEPTION.cc                |   1 +
 gcc/m2/mc-boot/GM2EXCEPTION.h                 |   1 +
 gcc/m2/mc-boot/GM2RTS.cc                      |   1 +
 gcc/m2/mc-boot/GM2RTS.h                       |   1 +
 gcc/m2/mc-boot/GMemUtils.cc                   |   1 +
 gcc/m2/mc-boot/GMemUtils.h                    |   1 +
 gcc/m2/mc-boot/GNumberIO.cc                   |   1 +
 gcc/m2/mc-boot/GNumberIO.h                    |   1 +
 gcc/m2/mc-boot/GPushBackInput.cc              |   1 +
 gcc/m2/mc-boot/GPushBackInput.h               |   1 +
 gcc/m2/mc-boot/GRTExceptions.cc               |   1 +
 gcc/m2/mc-boot/GRTExceptions.h                |   1 +
 gcc/m2/mc-boot/GRTco.h                        |   1 +
 gcc/m2/mc-boot/GRTentity.h                    |   1 +
 gcc/m2/mc-boot/GRTint.cc                      |   1 +
 gcc/m2/mc-boot/GRTint.h                       |   1 +
 gcc/m2/mc-boot/GSArgs.cc                      |   1 +
 gcc/m2/mc-boot/GSArgs.h                       |   1 +
 gcc/m2/mc-boot/GSFIO.cc                       |   1 +
 gcc/m2/mc-boot/GSFIO.h                        |   1 +
 gcc/m2/mc-boot/GSYSTEM.h                      |   1 +
 gcc/m2/mc-boot/GSelective.h                   |   1 +
 gcc/m2/mc-boot/GStdIO.cc                      |   1 +
 gcc/m2/mc-boot/GStdIO.h                       |   1 +
 gcc/m2/mc-boot/GStorage.cc                    |   1 +
 gcc/m2/mc-boot/GStorage.h                     |   1 +
 gcc/m2/mc-boot/GStrCase.cc                    |   1 +
 gcc/m2/mc-boot/GStrCase.h                     |   1 +
 gcc/m2/mc-boot/GStrIO.cc                      |   1 +
 gcc/m2/mc-boot/GStrIO.h                       |   1 +
 gcc/m2/mc-boot/GStrLib.cc                     |   1 +
 gcc/m2/mc-boot/GStrLib.h                      |   1 +
 gcc/m2/mc-boot/GStringConvert.cc              |   1 +
 gcc/m2/mc-boot/GStringConvert.h               |   1 +
 gcc/m2/mc-boot/GSysExceptions.h               |   1 +
 gcc/m2/mc-boot/GSysStorage.cc                 |   1 +
 gcc/m2/mc-boot/GSysStorage.h                  |   1 +
 gcc/m2/mc-boot/GTimeString.cc                 |   1 +
 gcc/m2/mc-boot/GTimeString.h                  |   1 +
 gcc/m2/mc-boot/GUnixArgs.h                    |   1 +
 gcc/m2/mc-boot/Galists.cc                     |   1 +
 gcc/m2/mc-boot/Galists.h                      |   1 +
 gcc/m2/mc-boot/Gdecl.cc                       |   1 +
 gcc/m2/mc-boot/Gdecl.h                        |   1 +
 gcc/m2/mc-boot/Gdtoa.h                        |   1 +
 gcc/m2/mc-boot/Gerrno.h                       |   1 +
 gcc/m2/mc-boot/Gkeyc.cc                       |   2 +
 gcc/m2/mc-boot/Gkeyc.h                        |   1 +
 gcc/m2/mc-boot/Gldtoa.h                       |   1 +
 gcc/m2/mc-boot/Glibc.h                        |   1 +
 gcc/m2/mc-boot/Glibm.h                        |   1 +
 gcc/m2/mc-boot/Glists.cc                      |   1 +
 gcc/m2/mc-boot/Glists.h                       |   1 +
 gcc/m2/mc-boot/GmcComment.cc                  |   1 +
 gcc/m2/mc-boot/GmcComment.h                   |   1 +
 gcc/m2/mc-boot/GmcComp.cc                     |   1 +
 gcc/m2/mc-boot/GmcComp.h                      |   1 +
 gcc/m2/mc-boot/GmcDebug.cc                    |   1 +
 gcc/m2/mc-boot/GmcDebug.h                     |   1 +
 gcc/m2/mc-boot/GmcError.cc                    |   1 +
 gcc/m2/mc-boot/GmcError.h                     |   1 +
 gcc/m2/mc-boot/GmcFileName.cc                 |   1 +
 gcc/m2/mc-boot/GmcFileName.h                  |   1 +
 gcc/m2/mc-boot/GmcLexBuf.cc                   |   1 +
 gcc/m2/mc-boot/GmcLexBuf.h                    |   1 +
 gcc/m2/mc-boot/GmcMetaError.cc                |   1 +
 gcc/m2/mc-boot/GmcMetaError.h                 |   1 +
 gcc/m2/mc-boot/GmcOptions.cc                  |   1 +
 gcc/m2/mc-boot/GmcOptions.h                   |   1 +
 gcc/m2/mc-boot/GmcPreprocess.cc               |   1 +
 gcc/m2/mc-boot/GmcPreprocess.h                |   1 +
 gcc/m2/mc-boot/GmcPretty.cc                   |   1 +
 gcc/m2/mc-boot/GmcPretty.h                    |   1 +
 gcc/m2/mc-boot/GmcPrintf.cc                   |   1 +
 gcc/m2/mc-boot/GmcPrintf.h                    |   1 +
 gcc/m2/mc-boot/GmcQuiet.cc                    |   1 +
 gcc/m2/mc-boot/GmcQuiet.h                     |   1 +
 gcc/m2/mc-boot/GmcReserved.cc                 |   1 +
 gcc/m2/mc-boot/GmcReserved.h                  |   1 +
 gcc/m2/mc-boot/GmcSearch.cc                   |   1 +
 gcc/m2/mc-boot/GmcSearch.h                    |   1 +
 gcc/m2/mc-boot/GmcStack.cc                    |   1 +
 gcc/m2/mc-boot/GmcStack.h                     |   1 +
 gcc/m2/mc-boot/GmcStream.cc                   |   1 +
 gcc/m2/mc-boot/GmcStream.h                    |   1 +
 gcc/m2/mc-boot/Gmcflex.h                      |   1 +
 gcc/m2/mc-boot/Gmcp1.cc                       |   1 +
 gcc/m2/mc-boot/Gmcp1.h                        |   1 +
 gcc/m2/mc-boot/Gmcp2.cc                       |   1 +
 gcc/m2/mc-boot/Gmcp2.h                        |   1 +
 gcc/m2/mc-boot/Gmcp3.cc                       |   1 +
 gcc/m2/mc-boot/Gmcp3.h                        |   1 +
 gcc/m2/mc-boot/Gmcp4.cc                       |   1 +
 gcc/m2/mc-boot/Gmcp4.h                        |   1 +
 gcc/m2/mc-boot/Gmcp5.cc                       |   1 +
 gcc/m2/mc-boot/Gmcp5.h                        |   1 +
 gcc/m2/mc-boot/GnameKey.cc                    |   1 +
 gcc/m2/mc-boot/GnameKey.h                     |   1 +
 gcc/m2/mc-boot/GsymbolKey.cc                  |   1 +
 gcc/m2/mc-boot/GsymbolKey.h                   |   1 +
 gcc/m2/mc-boot/Gtermios.h                     |   1 +
 gcc/m2/mc-boot/Gtop.cc                        |   1 +
 gcc/m2/mc-boot/Gvarargs.cc                    |   1 +
 gcc/m2/mc-boot/Gvarargs.h                     |   1 +
 gcc/m2/mc-boot/Gwlists.cc                     |   1 +
 gcc/m2/mc-boot/Gwlists.h                      |   1 +
 gcc/m2/mc-boot/Gwrapc.h                       |   1 +
 gcc/m2/mc/keyc.mod                            |   1 +
 gcc/m2/pge-boot/GASCII.cc                     |   2 +-
 gcc/m2/pge-boot/GASCII.h                      |   2 -
 gcc/m2/pge-boot/GArgs.cc                      |   6 +-
 gcc/m2/pge-boot/GArgs.h                       |   2 -
 gcc/m2/pge-boot/GAssertion.cc                 |   2 +-
 gcc/m2/pge-boot/GAssertion.h                  |   2 -
 gcc/m2/pge-boot/GBreak.h                      |   2 -
 gcc/m2/pge-boot/GCmdArgs.h                    |   2 -
 gcc/m2/pge-boot/GDebug.cc                     |   2 +-
 gcc/m2/pge-boot/GDebug.h                      |   2 -
 gcc/m2/pge-boot/GDynamicStrings.cc            |  13 +-
 gcc/m2/pge-boot/GDynamicStrings.h             |   2 -
 gcc/m2/pge-boot/GEnvironment.h                |   2 -
 gcc/m2/pge-boot/GFIO.cc                       |  47 ++++---
 gcc/m2/pge-boot/GFIO.h                        |   2 -
 gcc/m2/pge-boot/GFormatStrings.h              |   2 -
 gcc/m2/pge-boot/GFpuIO.h                      |   2 -
 gcc/m2/pge-boot/GIO.cc                        |   2 +-
 gcc/m2/pge-boot/GIO.h                         |   2 -
 gcc/m2/pge-boot/GIndexing.cc                  | 123 +++++++++++-------
 gcc/m2/pge-boot/GIndexing.h                   |   8 ++
 gcc/m2/pge-boot/GLists.cc                     |  81 ++++++------
 gcc/m2/pge-boot/GLists.h                      |   2 -
 gcc/m2/pge-boot/GM2Dependent.cc               |  15 +--
 gcc/m2/pge-boot/GM2Dependent.h                |   2 -
 gcc/m2/pge-boot/GM2EXCEPTION.cc               |   6 +-
 gcc/m2/pge-boot/GM2EXCEPTION.h                |   2 -
 gcc/m2/pge-boot/GM2RTS.cc                     |  66 +++++-----
 gcc/m2/pge-boot/GM2RTS.h                      |   2 -
 gcc/m2/pge-boot/GNameKey.cc                   |   6 +-
 gcc/m2/pge-boot/GNameKey.h                    |   2 -
 gcc/m2/pge-boot/GNumberIO.cc                  |  36 ++---
 gcc/m2/pge-boot/GNumberIO.h                   |   2 -
 gcc/m2/pge-boot/GOutput.cc                    |   2 +-
 gcc/m2/pge-boot/GOutput.h                     |   2 -
 gcc/m2/pge-boot/GPushBackInput.cc             |   2 +-
 gcc/m2/pge-boot/GPushBackInput.h              |   2 -
 gcc/m2/pge-boot/GRTExceptions.cc              | 107 ++++++++-------
 gcc/m2/pge-boot/GRTExceptions.h               |   2 -
 gcc/m2/pge-boot/GSArgs.h                      |   2 -
 gcc/m2/pge-boot/GSEnvironment.h               |   1 +
 gcc/m2/pge-boot/GSFIO.cc                      |   2 +-
 gcc/m2/pge-boot/GSFIO.h                       |   2 -
 gcc/m2/pge-boot/GSYSTEM.h                     |   2 -
 gcc/m2/pge-boot/GScan.h                       |   1 +
 gcc/m2/pge-boot/GStdIO.cc                     |   8 +-
 gcc/m2/pge-boot/GStdIO.h                      |   2 -
 gcc/m2/pge-boot/GStorage.cc                   |   2 +-
 gcc/m2/pge-boot/GStorage.h                    |   2 -
 gcc/m2/pge-boot/GStrCase.cc                   |  10 +-
 gcc/m2/pge-boot/GStrCase.h                    |   2 -
 gcc/m2/pge-boot/GStrIO.cc                     |  14 +-
 gcc/m2/pge-boot/GStrIO.h                      |   2 -
 gcc/m2/pge-boot/GStrLib.cc                    |  14 +-
 gcc/m2/pge-boot/GStrLib.h                     |   2 -
 gcc/m2/pge-boot/GStringConvert.h              |   2 -
 gcc/m2/pge-boot/GSymbolKey.cc                 |   3 +-
 gcc/m2/pge-boot/GSymbolKey.h                  |   2 -
 gcc/m2/pge-boot/GSysExceptions.h              |   2 -
 gcc/m2/pge-boot/GSysStorage.cc                |   6 +-
 gcc/m2/pge-boot/GSysStorage.h                 |   2 -
 gcc/m2/pge-boot/GTimeString.h                 |   2 -
 gcc/m2/pge-boot/GUnixArgs.h                   |   2 -
 gcc/m2/pge-boot/Gbnflex.cc                    |   4 +-
 gcc/m2/pge-boot/Gbnflex.h                     |   2 -
 gcc/m2/pge-boot/Gdtoa.h                       |   4 +-
 gcc/m2/pge-boot/Gerrno.h                      |   2 -
 gcc/m2/pge-boot/Gldtoa.h                      |   4 +-
 gcc/m2/pge-boot/Glibc.h                       |  17 ++-
 gcc/m2/pge-boot/Glibm.h                       |   2 -
 gcc/m2/pge-boot/Gpge.cc                       |  16 +--
 gcc/m2/pge-boot/Gtermios.h                    |   2 -
 gcc/m2/pge-boot/Gwrapc.h                      |   2 -
 gcc/multiple_target.cc                        |   1 +
 gcc/objc/objc-act.cc                          |   1 +
 gcc/objc/objc-encoding.cc                     |   1 +
 gcc/objc/objc-gnu-runtime-abi-01.cc           |   1 +
 gcc/objc/objc-lang.cc                         |   2 +-
 gcc/objc/objc-next-runtime-abi-01.cc          |   1 +
 gcc/objc/objc-next-runtime-abi-02.cc          |   1 +
 gcc/objc/objc-runtime-shared-support.cc       |   1 +
 gcc/objcp/objcp-decl.cc                       |   1 +
 gcc/objcp/objcp-lang.cc                       |   1 +
 gcc/omp-expand.cc                             |   1 +
 gcc/omp-general.cc                            |   1 +
 gcc/omp-low.cc                                |   1 +
 gcc/omp-oacc-neuter-broadcast.cc              |   1 +
 gcc/omp-offload.cc                            |   1 +
 gcc/omp-simd-clone.cc                         |   1 +
 gcc/optc-gen.awk                              |   1 +
 gcc/optc-save-gen.awk                         |   1 +
 gcc/options-urls-cc-gen.awk                   |   1 +
 gcc/opts-common.cc                            |   1 +
 gcc/opts-global.cc                            |   1 +
 gcc/opts.cc                                   |   1 +
 gcc/pair-fusion.cc                            |   1 +
 gcc/passes.cc                                 |   1 +
 gcc/pointer-query.cc                          |   1 +
 gcc/predict.cc                                |   2 +-
 gcc/pretty-print.cc                           |   4 +-
 gcc/pretty-print.h                            |  10 +-
 gcc/print-rtl.cc                              |   1 +
 gcc/print-tree.cc                             |   1 +
 gcc/profile-count.cc                          |   1 +
 gcc/range-op-float.cc                         |   1 +
 gcc/range-op-ptr.cc                           |   1 +
 gcc/range-op.cc                               |   1 +
 gcc/range.cc                                  |   1 +
 gcc/read-rtl-function.cc                      |   1 +
 gcc/rtl-error.cc                              |   1 +
 gcc/rtl-ssa/accesses.cc                       |   1 +
 gcc/rtl-ssa/blocks.cc                         |   1 +
 gcc/rtl-ssa/changes.cc                        |   1 +
 gcc/rtl-ssa/functions.cc                      |   1 +
 gcc/rtl-ssa/insns.cc                          |   1 +
 gcc/rtl-ssa/movement.cc                       |   1 +
 gcc/rtl-tests.cc                              |   1 +
 gcc/rust/resolve/rust-ast-resolve-expr.cc     |   1 +
 gcc/rust/rust-attribs.cc                      |   1 +
 gcc/rust/rust-system.h                        |   1 +
 gcc/sanopt.cc                                 |   1 +
 gcc/sched-rgn.cc                              |   1 +
 gcc/selftest-diagnostic-path.cc               |   1 +
 gcc/selftest-diagnostic.cc                    |   1 +
 gcc/splay-tree-utils.cc                       |   1 +
 gcc/sreal.cc                                  |   1 +
 gcc/stmt.cc                                   |   1 +
 gcc/substring-locations.cc                    |   1 +
 gcc/symtab-clones.cc                          |   1 +
 gcc/symtab-thunks.cc                          |   1 +
 gcc/symtab.cc                                 |   1 +
 .../gcc.dg/plugin/diagnostic_group_plugin.c   |   3 +-
 .../plugin/diagnostic_plugin_xhtml_format.c   |  14 +-
 gcc/testsuite/gcc.dg/plugin/ggcplug.c         |   1 +
 gcc/text-art/box-drawing.cc                   |   1 +
 gcc/text-art/canvas.cc                        |   1 +
 gcc/text-art/ruler.cc                         |   1 +
 gcc/text-art/selftests.cc                     |   1 +
 gcc/text-art/theme.cc                         |   1 +
 gcc/toplev.cc                                 |   8 +-
 gcc/trans-mem.cc                              |   1 +
 gcc/tree-affine.cc                            |   1 +
 gcc/tree-call-cdce.cc                         |   1 +
 gcc/tree-cfg.cc                               |   1 +
 gcc/tree-chrec.cc                             |   1 +
 gcc/tree-dfa.cc                               |   1 +
 gcc/tree-diagnostic-client-data-hooks.cc      |   5 +-
 gcc/tree-diagnostic.cc                        |   1 +
 gcc/tree-dump.cc                              |   1 +
 gcc/tree-inline.cc                            |   1 +
 gcc/tree-into-ssa.cc                          |   1 +
 gcc/tree-logical-location.cc                  |   1 +
 gcc/tree-nested.cc                            |   1 +
 gcc/tree-nrv.cc                               |   1 +
 gcc/tree-object-size.cc                       |   1 +
 gcc/tree-outof-ssa.cc                         |   1 +
 gcc/tree-pretty-print.cc                      |   1 +
 gcc/tree-profile.cc                           |   1 +
 gcc/tree-scalar-evolution.cc                  |   1 +
 gcc/tree-sra.cc                               |   1 +
 gcc/tree-ssa-address.cc                       |   1 +
 gcc/tree-ssa-alias.cc                         |   1 +
 gcc/tree-ssa-ccp.cc                           |   1 +
 gcc/tree-ssa-coalesce.cc                      |   1 +
 gcc/tree-ssa-copy.cc                          |   1 +
 gcc/tree-ssa-dce.cc                           |   1 +
 gcc/tree-ssa-dom.cc                           |   1 +
 gcc/tree-ssa-forwprop.cc                      |   1 +
 gcc/tree-ssa-ifcombine.cc                     |   1 +
 gcc/tree-ssa-loop-ch.cc                       |   1 +
 gcc/tree-ssa-loop-im.cc                       |   1 +
 gcc/tree-ssa-loop-manip.cc                    |   1 +
 gcc/tree-ssa-loop-niter.cc                    |   1 +
 gcc/tree-ssa-loop-split.cc                    |   1 +
 gcc/tree-ssa-math-opts.cc                     |   1 +
 gcc/tree-ssa-operands.cc                      |   1 +
 gcc/tree-ssa-phiprop.cc                       |   1 +
 gcc/tree-ssa-pre.cc                           |   1 +
 gcc/tree-ssa-propagate.cc                     |   1 +
 gcc/tree-ssa-reassoc.cc                       |   1 +
 gcc/tree-ssa-sccvn.cc                         |   1 +
 gcc/tree-ssa-scopedtables.cc                  |   1 +
 gcc/tree-ssa-sink.cc                          |   1 +
 gcc/tree-ssa-strlen.cc                        |   1 +
 gcc/tree-ssa-structalias.cc                   |   1 +
 gcc/tree-ssa-ter.cc                           |   1 +
 gcc/tree-ssa-uninit.cc                        |   1 +
 gcc/tree-ssa.cc                               |   1 +
 gcc/tree-ssanames.cc                          |   1 +
 gcc/tree-stdarg.cc                            |   1 +
 gcc/tree-streamer-in.cc                       |   1 +
 gcc/tree-streamer-out.cc                      |   1 +
 gcc/tree-streamer.cc                          |   1 +
 gcc/tree-switch-conversion.cc                 |   1 +
 gcc/tree-tailcall.cc                          |   1 +
 gcc/tree-vrp.cc                               |   1 +
 gcc/tree.cc                                   |   1 +
 gcc/ubsan.cc                                  |   1 +
 gcc/value-pointer-equiv.cc                    |   1 +
 gcc/value-prof.cc                             |   1 +
 gcc/value-query.cc                            |   1 +
 gcc/value-range-pretty-print.cc               |   1 +
 gcc/value-range-storage.cc                    |   1 +
 gcc/value-range.cc                            |   1 +
 gcc/value-relation.cc                         |   1 +
 gcc/var-tracking.cc                           |   1 +
 gcc/varpool.cc                                |   1 +
 gcc/vr-values.cc                              |   1 +
 gcc/wide-int-print.cc                         |   1 +
 libgcc/libgcov-util.c                         |   1 +
 633 files changed, 1035 insertions(+), 502 deletions(-)
  

Patch

diff --git a/gcc/ada/gcc-interface/misc.cc b/gcc/ada/gcc-interface/misc.cc
index 2aa1bfd410b2..8c921db7dcdd 100644
--- a/gcc/ada/gcc-interface/misc.cc
+++ b/gcc/ada/gcc-interface/misc.cc
@@ -23,6 +23,7 @@ 
  *                                                                          *
  ****************************************************************************/
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/ada/gcc-interface/trans.cc b/gcc/ada/gcc-interface/trans.cc
index a073b2d94f1c..5f5cbe5b4774 100644
--- a/gcc/ada/gcc-interface/trans.cc
+++ b/gcc/ada/gcc-interface/trans.cc
@@ -23,6 +23,7 @@ 
  *                                                                          *
  ****************************************************************************/
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/ada/gcc-interface/utils.cc b/gcc/ada/gcc-interface/utils.cc
index a88a23860d3e..951d3848d09b 100644
--- a/gcc/ada/gcc-interface/utils.cc
+++ b/gcc/ada/gcc-interface/utils.cc
@@ -23,6 +23,7 @@ 
  *                                                                          *
  ****************************************************************************/
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/analyzer/analyzer-logging.cc b/gcc/analyzer/analyzer-logging.cc
index d3b04f2d9b10..2a4d02f83ba6 100644
--- a/gcc/analyzer/analyzer-logging.cc
+++ b/gcc/analyzer/analyzer-logging.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
@@ -50,12 +51,12 @@  logger::logger (FILE *f_out,
   m_log_refcount_changes (false),
   m_pp (reference_pp.clone ())
 {
-  pp_show_color (m_pp) = 0;
-  pp_buffer (m_pp)->m_stream = f_out;
+  pp_show_color (m_pp.get ()) = 0;
+  pp_buffer (m_pp.get ())->m_stream = f_out;
 
   /* %qE in logs for SSA_NAMEs should show the ssa names, rather than
      trying to prettify things by showing the underlying var.  */
-  pp_format_decoder (m_pp) = default_tree_printer;
+  pp_format_decoder (m_pp.get ()) = default_tree_printer;
 
   /* Begin the log by writing the GCC version.  */
   print_version (f_out, "", false);
@@ -70,7 +71,6 @@  logger::~logger ()
   /* This should be the last message emitted.  */
   log ("%s", __PRETTY_FUNCTION__);
   gcc_assert (m_refcount == 0);
-  delete m_pp;
 }
 
 /* Increment the reference count of the logger.  */
@@ -145,15 +145,15 @@  void
 logger::log_va_partial (const char *fmt, va_list *ap)
 {
   text_info text (fmt, ap, 0);
-  pp_format (m_pp, &text);
-  pp_output_formatted_text (m_pp);
+  pp_format (m_pp.get (), &text);
+  pp_output_formatted_text (m_pp.get ());
 }
 
 void
 logger::end_log_line ()
 {
-  pp_flush (m_pp);
-  pp_clear_output_area (m_pp);
+  pp_flush (m_pp.get ());
+  pp_clear_output_area (m_pp.get ());
   fprintf (m_f_out, "\n");
   fflush (m_f_out);
 }
diff --git a/gcc/analyzer/analyzer-logging.h b/gcc/analyzer/analyzer-logging.h
index eb2cde7a306b..aaa3d79a30e4 100644
--- a/gcc/analyzer/analyzer-logging.h
+++ b/gcc/analyzer/analyzer-logging.h
@@ -57,7 +57,7 @@  class logger
   void inc_indent () { m_indent_level++; }
   void dec_indent () { m_indent_level--; }
 
-  pretty_printer *get_printer () const { return m_pp; }
+  pretty_printer *get_printer () const { return m_pp.get (); }
   FILE *get_file () const { return m_f_out; }
 
 private:
@@ -67,7 +67,7 @@  private:
   FILE *m_f_out;
   int m_indent_level;
   bool m_log_refcount_changes;
-  pretty_printer *m_pp;
+  std::unique_ptr<pretty_printer> m_pp;
 };
 
 /* The class log_scope is an RAII-style class intended to make
diff --git a/gcc/analyzer/analyzer.cc b/gcc/analyzer/analyzer.cc
index 4a1a36157133..0f998e3f66f7 100644
--- a/gcc/analyzer/analyzer.cc
+++ b/gcc/analyzer/analyzer.cc
@@ -494,11 +494,11 @@  get_user_facing_name (const gcall *call)
 label_text
 make_label_text (bool can_colorize, const char *fmt, ...)
 {
-  pretty_printer *pp = global_dc->m_printer->clone ();
-  pp_clear_output_area (pp);
+  std::unique_ptr<pretty_printer> pp (global_dc->clone_printer ());
+  pp_clear_output_area (pp.get ());
 
   if (!can_colorize)
-    pp_show_color (pp) = false;
+    pp_show_color (pp.get ()) = false;
 
   rich_location rich_loc (line_table, UNKNOWN_LOCATION);
 
@@ -507,13 +507,12 @@  make_label_text (bool can_colorize, const char *fmt, ...)
   va_start (ap, fmt);
 
   text_info ti (_(fmt), &ap, 0, NULL, &rich_loc);
-  pp_format (pp, &ti);
-  pp_output_formatted_text (pp);
+  pp_format (pp.get (), &ti);
+  pp_output_formatted_text (pp.get ());
 
   va_end (ap);
 
-  label_text result = label_text::take (xstrdup (pp_formatted_text (pp)));
-  delete pp;
+  label_text result = label_text::take (xstrdup (pp_formatted_text (pp.get ())));
   return result;
 }
 
@@ -524,11 +523,11 @@  make_label_text_n (bool can_colorize, unsigned HOST_WIDE_INT n,
 		   const char *singular_fmt,
 		   const char *plural_fmt, ...)
 {
-  pretty_printer *pp = global_dc->m_printer->clone ();
-  pp_clear_output_area (pp);
+  std::unique_ptr<pretty_printer> pp (global_dc->clone_printer ());
+  pp_clear_output_area (pp.get ());
 
   if (!can_colorize)
-    pp_show_color (pp) = false;
+    pp_show_color (pp.get ()) = false;
 
   rich_location rich_loc (line_table, UNKNOWN_LOCATION);
 
@@ -540,13 +539,13 @@  make_label_text_n (bool can_colorize, unsigned HOST_WIDE_INT n,
 
   text_info ti (fmt, &ap, 0, NULL, &rich_loc);
 
-  pp_format (pp, &ti);
-  pp_output_formatted_text (pp);
+  pp_format (pp.get (), &ti);
+  pp_output_formatted_text (pp.get ());
 
   va_end (ap);
 
-  label_text result = label_text::take (xstrdup (pp_formatted_text (pp)));
-  delete pp;
+  label_text result
+    = label_text::take (xstrdup (pp_formatted_text (pp.get ())));
   return result;
 }
 
diff --git a/gcc/analyzer/bar-chart.cc b/gcc/analyzer/bar-chart.cc
index 4a4acf5f377c..3a259f80066b 100644
--- a/gcc/analyzer/bar-chart.cc
+++ b/gcc/analyzer/bar-chart.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/analyzer/pending-diagnostic.cc b/gcc/analyzer/pending-diagnostic.cc
index ec6f5acf21f3..a900839375cb 100644
--- a/gcc/analyzer/pending-diagnostic.cc
+++ b/gcc/analyzer/pending-diagnostic.cc
@@ -93,21 +93,19 @@  interesting_t::dump_to_pp (pretty_printer *pp, bool simple) const
 label_text
 evdesc::event_desc::formatted_print (const char *fmt, ...) const
 {
-  pretty_printer *pp = global_dc->m_printer->clone ();
+  auto pp = global_dc->clone_printer ();
 
-  pp_show_color (pp) = m_colorize;
+  pp_show_color (pp.get ()) = m_colorize;
 
   rich_location rich_loc (line_table, UNKNOWN_LOCATION);
   va_list ap;
   va_start (ap, fmt);
   text_info ti (_(fmt), &ap, 0, nullptr, &rich_loc);
-  pp_format (pp, &ti);
-  pp_output_formatted_text (pp);
+  pp_format (pp.get (), &ti);
+  pp_output_formatted_text (pp.get ());
   va_end (ap);
 
-  label_text result = label_text::take (xstrdup (pp_formatted_text (pp)));
-  delete pp;
-  return result;
+  return label_text::take (xstrdup (pp_formatted_text (pp.get ())));
 }
 
 /* class diagnostic_emission_context.  */
diff --git a/gcc/analyzer/sm-malloc.cc b/gcc/analyzer/sm-malloc.cc
index 11c0e1b1a2fd..12465cbe42b2 100644
--- a/gcc/analyzer/sm-malloc.cc
+++ b/gcc/analyzer/sm-malloc.cc
@@ -1648,14 +1648,13 @@  private:
 
   static bool sufficiently_similar_p (tree expr_a, tree expr_b)
   {
-    pretty_printer *pp_a = global_dc->m_printer->clone ();
-    pretty_printer *pp_b = global_dc->m_printer->clone ();
-    pp_printf (pp_a, "%qE", expr_a);
-    pp_printf (pp_b, "%qE", expr_b);
-    bool result = (strcmp (pp_formatted_text (pp_a), pp_formatted_text (pp_b))
+    auto pp_a = global_dc->clone_printer ();
+    auto pp_b = global_dc->clone_printer ();
+    pp_printf (pp_a.get (), "%qE", expr_a);
+    pp_printf (pp_b.get (), "%qE", expr_b);
+    bool result = (strcmp (pp_formatted_text (pp_a.get ()),
+			   pp_formatted_text (pp_b.get ()))
 		   == 0);
-    delete pp_a;
-    delete pp_b;
     return result;
   }
 
diff --git a/gcc/analyzer/supergraph.cc b/gcc/analyzer/supergraph.cc
index 55bd42a89a1a..826f8f614f75 100644
--- a/gcc/analyzer/supergraph.cc
+++ b/gcc/analyzer/supergraph.cc
@@ -437,16 +437,15 @@  supergraph::dump_dot_to_pp (pretty_printer *pp,
 void
 supergraph::dump_dot_to_file (FILE *fp, const dump_args_t &dump_args) const
 {
-  pretty_printer *pp = global_dc->m_printer->clone ();
-  pp_show_color (pp) = 0;
+  std::unique_ptr<pretty_printer> pp (global_dc->clone_printer ());
+  pp_show_color (pp.get ()) = 0;
   /* %qE in logs for SSA_NAMEs should show the ssa names, rather than
      trying to prettify things by showing the underlying var.  */
-  pp_format_decoder (pp) = default_tree_printer;
+  pp_format_decoder (pp.get ()) = default_tree_printer;
 
   pp->set_output_stream (fp);
-  dump_dot_to_pp (pp, dump_args);
-  pp_flush (pp);
-  delete pp;
+  dump_dot_to_pp (pp.get (), dump_args);
+  pp_flush (pp.get ());
 }
 
 /* Dump this graph in .dot format to PATH, using DUMP_ARGS.  */
diff --git a/gcc/asan.cc b/gcc/asan.cc
index 5f262d54a3ac..0a348a6decdb 100644
--- a/gcc/asan.cc
+++ b/gcc/asan.cc
@@ -19,6 +19,7 @@  along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/attribs.cc b/gcc/attribs.cc
index 0be7b83b2642..311242815fa7 100644
--- a/gcc/attribs.cc
+++ b/gcc/attribs.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #define INCLUDE_STRING
 #include "config.h"
 #include "system.h"
@@ -2673,10 +2674,9 @@  attr_access::array_as_string (tree type) const
 
   /* Format the type using the current pretty printer.  The generic tree
      printer does a terrible job.  */
-  pretty_printer *pp = global_dc->m_printer->clone ();
-  pp_printf (pp, "%qT", type);
-  typstr = pp_formatted_text (pp);
-  delete pp;
+  std::unique_ptr<pretty_printer> pp (global_dc->clone_printer ());
+  pp_printf (pp.get (), "%qT", type);
+  typstr = pp_formatted_text (pp.get ());
 
   return typstr;
 }
diff --git a/gcc/auto-profile.cc b/gcc/auto-profile.cc
index de59b94bcb33..242b71d11655 100644
--- a/gcc/auto-profile.cc
+++ b/gcc/auto-profile.cc
@@ -20,6 +20,7 @@  along with GCC; see the file COPYING3.  If not see
 
 #include "config.h"
 #define INCLUDE_MAP
+#define INCLUDE_MEMORY
 #define INCLUDE_SET
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/c-family/c-ada-spec.cc b/gcc/c-family/c-ada-spec.cc
index fbba44362540..db5c0b5d746d 100644
--- a/gcc/c-family/c-ada-spec.cc
+++ b/gcc/c-family/c-ada-spec.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/c-family/c-attribs.cc b/gcc/c-family/c-attribs.cc
index 4dd2eecbea54..cf9523aacf56 100644
--- a/gcc/c-family/c-attribs.cc
+++ b/gcc/c-family/c-attribs.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #define INCLUDE_STRING
 #include "config.h"
 #include "system.h"
diff --git a/gcc/c-family/c-common.cc b/gcc/c-family/c-common.cc
index 7494a2dac0ae..28a2d4b17df0 100644
--- a/gcc/c-family/c-common.cc
+++ b/gcc/c-family/c-common.cc
@@ -19,6 +19,7 @@  along with GCC; see the file COPYING3.  If not see
 
 #define GCC_C_COMMON_C
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/c-family/c-format.cc b/gcc/c-family/c-format.cc
index f4a65a5019c3..211fb3be7d91 100644
--- a/gcc/c-family/c-format.cc
+++ b/gcc/c-family/c-format.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/c-family/c-gimplify.cc b/gcc/c-family/c-gimplify.cc
index 09ea1b791590..7885e2950334 100644
--- a/gcc/c-family/c-gimplify.cc
+++ b/gcc/c-family/c-gimplify.cc
@@ -23,6 +23,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/c-family/c-indentation.cc b/gcc/c-family/c-indentation.cc
index 38be7d24da0e..7adec84ce2b0 100644
--- a/gcc/c-family/c-indentation.cc
+++ b/gcc/c-family/c-indentation.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/c-family/c-opts.cc b/gcc/c-family/c-opts.cc
index afb963de0619..f0b20b192dee 100644
--- a/gcc/c-family/c-opts.cc
+++ b/gcc/c-family/c-opts.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/c-family/c-pch.cc b/gcc/c-family/c-pch.cc
index f104575d3d08..50479ad43f43 100644
--- a/gcc/c-family/c-pch.cc
+++ b/gcc/c-family/c-pch.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/c-family/c-pragma.cc b/gcc/c-family/c-pragma.cc
index ed2a7a00e9eb..9d7153489f9c 100644
--- a/gcc/c-family/c-pragma.cc
+++ b/gcc/c-family/c-pragma.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/c-family/c-pretty-print.cc b/gcc/c-family/c-pretty-print.cc
index 13806714446c..fadb9e3ecfef 100644
--- a/gcc/c-family/c-pretty-print.cc
+++ b/gcc/c-family/c-pretty-print.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
@@ -36,6 +37,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "function.h"
 #include "basic-block.h"
 #include "gimple.h"
+#include "make-unique.h"
 
 /* The pretty-printer code is primarily designed to closely follow
    (GNU) C and C++ grammars.  That is to be contrasted with spaghetti
@@ -2986,10 +2988,10 @@  c_pretty_printer::c_pretty_printer ()
 
 /* c_pretty_printer's implementation of pretty_printer::clone vfunc.  */
 
-pretty_printer *
+std::unique_ptr<pretty_printer>
 c_pretty_printer::clone () const
 {
-  return new c_pretty_printer (*this);
+  return ::make_unique<c_pretty_printer> (*this);
 }
 
 /* Print the tree T in full, on file FILE.  */
diff --git a/gcc/c-family/c-pretty-print.h b/gcc/c-family/c-pretty-print.h
index 550e4cb68820..80854b079175 100644
--- a/gcc/c-family/c-pretty-print.h
+++ b/gcc/c-family/c-pretty-print.h
@@ -51,7 +51,7 @@  class c_pretty_printer : public pretty_printer
 {
 public:
   c_pretty_printer ();
-  pretty_printer *clone () const override;
+  std::unique_ptr<pretty_printer> clone () const override;
 
   // Format string, possibly translated.
   void translate_string (const char *);
diff --git a/gcc/c-family/c-type-mismatch.cc b/gcc/c-family/c-type-mismatch.cc
index 89646854f3c7..abc8cb83cc54 100644
--- a/gcc/c-family/c-type-mismatch.cc
+++ b/gcc/c-family/c-type-mismatch.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/c-family/c-warn.cc b/gcc/c-family/c-warn.cc
index 47e0a6bfa073..979467bb7df2 100644
--- a/gcc/c-family/c-warn.cc
+++ b/gcc/c-family/c-warn.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #define INCLUDE_STRING
 #include "config.h"
 #include "system.h"
diff --git a/gcc/c/c-aux-info.cc b/gcc/c/c-aux-info.cc
index f6b5980aa830..b422da0e7264 100644
--- a/gcc/c/c-aux-info.cc
+++ b/gcc/c/c-aux-info.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/c/c-convert.cc b/gcc/c/c-convert.cc
index 7c1064c6691b..9180c6ae14ec 100644
--- a/gcc/c/c-convert.cc
+++ b/gcc/c/c-convert.cc
@@ -23,6 +23,7 @@  along with GCC; see the file COPYING3.  If not see
    Every language front end must have a `convert' function
    but what kind of conversions it does will depend on the language.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/c/c-errors.cc b/gcc/c/c-errors.cc
index c6b7c108354b..38b11a7c70a8 100644
--- a/gcc/c/c-errors.cc
+++ b/gcc/c/c-errors.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/c/c-fold.cc b/gcc/c/c-fold.cc
index 9ea174f79c49..06085f5f58f5 100644
--- a/gcc/c/c-fold.cc
+++ b/gcc/c/c-fold.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/c/c-lang.cc b/gcc/c/c-lang.cc
index 870e23b4a33c..7e5604fce6b6 100644
--- a/gcc/c/c-lang.cc
+++ b/gcc/c/c-lang.cc
@@ -18,6 +18,7 @@  along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/c/c-objc-common.cc b/gcc/c/c-objc-common.cc
index eb0c4b85772f..dc91373f5b98 100644
--- a/gcc/c/c-objc-common.cc
+++ b/gcc/c/c-objc-common.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
@@ -295,11 +296,11 @@  print_type (c_pretty_printer *cpp, tree t, bool *quoted,
 void
 pp_markup::element_quoted_type::print_type (pp_markup::context &ctxt)
 {
-  c_pretty_printer *cpp = (c_pretty_printer *) ctxt.m_pp.clone ();
+  auto pp = ctxt.m_pp.clone ();
+  c_pretty_printer *cpp = (c_pretty_printer *)pp.get ();
   cpp->set_padding (pp_none);
   ::print_type (cpp, m_type, &ctxt.m_quoted, m_highlight_color);
   pp_string (&ctxt.m_pp, pp_formatted_text (cpp));
-  delete cpp;
 }
 
 /* Called during diagnostic message formatting process to print a
diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc
index 108ea5ca3e8c..2a99c0e435d0 100644
--- a/gcc/c/c-typeck.cc
+++ b/gcc/c/c-typeck.cc
@@ -23,6 +23,7 @@  along with GCC; see the file COPYING3.  If not see
    including computing the types of the result, C-specific error checks,
    and some optimization.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/c/gimple-parser.cc b/gcc/c/gimple-parser.cc
index d156d83cd378..8d1db33b8441 100644
--- a/gcc/c/gimple-parser.cc
+++ b/gcc/c/gimple-parser.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/calls.cc b/gcc/calls.cc
index c5c26f65280f..05eaa0d7b148 100644
--- a/gcc/calls.cc
+++ b/gcc/calls.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cfganal.cc b/gcc/cfganal.cc
index 35c59f3f5d26..863f88ff1eab 100644
--- a/gcc/cfganal.cc
+++ b/gcc/cfganal.cc
@@ -19,6 +19,7 @@  along with GCC; see the file COPYING3.  If not see
 
 /* This file contains various simple utilities to analyze the CFG.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cfgexpand.cc b/gcc/cfgexpand.cc
index 6c1096363afb..885f488a9d41 100644
--- a/gcc/cfgexpand.cc
+++ b/gcc/cfgexpand.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cfghooks.cc b/gcc/cfghooks.cc
index 3ced91c96394..55fdf983e1ce 100644
--- a/gcc/cfghooks.cc
+++ b/gcc/cfghooks.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cfgloop.cc b/gcc/cfgloop.cc
index 5202c3865d16..df0ec7722bc2 100644
--- a/gcc/cfgloop.cc
+++ b/gcc/cfgloop.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cgraph.cc b/gcc/cgraph.cc
index b5d096d530c0..45f851d0f4ab 100644
--- a/gcc/cgraph.cc
+++ b/gcc/cgraph.cc
@@ -24,6 +24,7 @@  along with GCC; see the file COPYING3.  If not see
     optimization.  It represents a multi-graph where nodes are functions
     (symbols within symbol table) and edges are call sites. */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cgraphclones.cc b/gcc/cgraphclones.cc
index 4fff6873a369..ede720f4b157 100644
--- a/gcc/cgraphclones.cc
+++ b/gcc/cgraphclones.cc
@@ -64,6 +64,7 @@  along with GCC; see the file COPYING3.  If not see
    only difference is that clones are not visible during the
    Generate Summary stage.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cgraphunit.cc b/gcc/cgraphunit.cc
index 2bd0289ffba5..0052b92715ad 100644
--- a/gcc/cgraphunit.cc
+++ b/gcc/cgraphunit.cc
@@ -157,6 +157,7 @@  along with GCC; see the file COPYING3.  If not see
       and apply simple transformations
 */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/collect-utils.cc b/gcc/collect-utils.cc
index 981a14a554b9..5397fe2c7a09 100644
--- a/gcc/collect-utils.cc
+++ b/gcc/collect-utils.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/collect2.cc b/gcc/collect2.cc
index 902014a9cc15..2bd618d27c16 100644
--- a/gcc/collect2.cc
+++ b/gcc/collect2.cc
@@ -24,6 +24,7 @@  along with GCC; see the file COPYING3.  If not see
 
 /* Build tables of static constructors and destructors and run ld.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/common/config/aarch64/aarch64-common.cc b/gcc/common/config/aarch64/aarch64-common.cc
index 64b65b7ff9e4..2bfc597e333b 100644
--- a/gcc/common/config/aarch64/aarch64-common.cc
+++ b/gcc/common/config/aarch64/aarch64-common.cc
@@ -19,6 +19,7 @@ 
    <http://www.gnu.org/licenses/>.  */
 
 #include "config.h"
+#define INCLUDE_MEMORY
 #define INCLUDE_STRING
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/common/config/arm/arm-common.cc b/gcc/common/config/arm/arm-common.cc
index dbcbe3f6e996..68674575ccfc 100644
--- a/gcc/common/config/arm/arm-common.cc
+++ b/gcc/common/config/arm/arm-common.cc
@@ -18,6 +18,7 @@ 
    <http://www.gnu.org/licenses/>.  */
 
 #define INCLUDE_LIST
+#define INCLUDE_MEMORY
 #define INCLUDE_VECTOR
 #define INCLUDE_ALGORITHM
 #include "config.h"
diff --git a/gcc/common/config/avr/avr-common.cc b/gcc/common/config/avr/avr-common.cc
index bb454a208568..f14a4a48e7c9 100644
--- a/gcc/common/config/avr/avr-common.cc
+++ b/gcc/common/config/avr/avr-common.cc
@@ -17,6 +17,7 @@ 
    along with GCC; see the file COPYING3.  If not see
    <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/aarch64/aarch64-cc-fusion.cc b/gcc/config/aarch64/aarch64-cc-fusion.cc
index 3af8c00d8462..3cae4c4d8bd5 100644
--- a/gcc/config/aarch64/aarch64-cc-fusion.cc
+++ b/gcc/config/aarch64/aarch64-cc-fusion.cc
@@ -64,6 +64,7 @@ 
 #define INCLUDE_ALGORITHM
 #define INCLUDE_FUNCTIONAL
 #define INCLUDE_ARRAY
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/aarch64/aarch64-early-ra.cc b/gcc/config/aarch64/aarch64-early-ra.cc
index 6e544dd61915..bbd84686e13f 100644
--- a/gcc/config/aarch64/aarch64-early-ra.cc
+++ b/gcc/config/aarch64/aarch64-early-ra.cc
@@ -40,6 +40,7 @@ 
 
 #define INCLUDE_ALGORITHM
 #define INCLUDE_FUNCTIONAL
+#define INCLUDE_MEMORY
 #define INCLUDE_ARRAY
 #include "config.h"
 #include "system.h"
diff --git a/gcc/config/aarch64/aarch64-sve-builtins.cc b/gcc/config/aarch64/aarch64-sve-builtins.cc
index 41673745cfea..9b86facf0b07 100644
--- a/gcc/config/aarch64/aarch64-sve-builtins.cc
+++ b/gcc/config/aarch64/aarch64-sve-builtins.cc
@@ -19,6 +19,7 @@ 
 
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/arc/arc.cc b/gcc/config/arc/arc.cc
index ba7bde1de443..db8168650c79 100644
--- a/gcc/config/arc/arc.cc
+++ b/gcc/config/arc/arc.cc
@@ -30,6 +30,7 @@  along with GCC; see the file COPYING3.  If not see
 
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/arm/aarch-common.cc b/gcc/config/arm/aarch-common.cc
index aa405af8192b..44012feb5be7 100644
--- a/gcc/config/arm/aarch-common.cc
+++ b/gcc/config/arm/aarch-common.cc
@@ -23,6 +23,7 @@ 
 
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/arm/arm-mve-builtins.cc b/gcc/config/arm/arm-mve-builtins.cc
index 252744596ce1..804eb88b6a5e 100644
--- a/gcc/config/arm/arm-mve-builtins.cc
+++ b/gcc/config/arm/arm-mve-builtins.cc
@@ -19,6 +19,7 @@ 
 
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/avr/avr-devices.cc b/gcc/config/avr/avr-devices.cc
index 456a6b72c8b0..83b4a2ec64cd 100644
--- a/gcc/config/avr/avr-devices.cc
+++ b/gcc/config/avr/avr-devices.cc
@@ -20,6 +20,7 @@ 
 #ifndef IN_GEN_AVR_MMCU_TEXI
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/avr/driver-avr.cc b/gcc/config/avr/driver-avr.cc
index 4dcabc604e85..3eefcabe48dd 100644
--- a/gcc/config/avr/driver-avr.cc
+++ b/gcc/config/avr/driver-avr.cc
@@ -20,6 +20,7 @@  along with GCC; see the file COPYING3.  If not see
 
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/bpf/bpf.cc b/gcc/config/bpf/bpf.cc
index 2051fa5b08b1..aa00d149c4d3 100644
--- a/gcc/config/bpf/bpf.cc
+++ b/gcc/config/bpf/bpf.cc
@@ -19,6 +19,7 @@  along with GCC; see the file COPYING3.  If not see
 
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/bpf/btfext-out.cc b/gcc/config/bpf/btfext-out.cc
index b3df7b555d5f..ca6241aa52ee 100644
--- a/gcc/config/bpf/btfext-out.cc
+++ b/gcc/config/bpf/btfext-out.cc
@@ -19,6 +19,7 @@ 
 
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/bpf/core-builtins.cc b/gcc/config/bpf/core-builtins.cc
index 86e2e9d6e39f..deb368a1d3db 100644
--- a/gcc/config/bpf/core-builtins.cc
+++ b/gcc/config/bpf/core-builtins.cc
@@ -19,6 +19,7 @@  along with GCC; see the file COPYING3.  If not see
 
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/darwin.cc b/gcc/config/darwin.cc
index 47e41ac8a123..ae821e320121 100644
--- a/gcc/config/darwin.cc
+++ b/gcc/config/darwin.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/i386/driver-i386.cc b/gcc/config/i386/driver-i386.cc
index 445f5640155a..26f094cd45d3 100644
--- a/gcc/config/i386/driver-i386.cc
+++ b/gcc/config/i386/driver-i386.cc
@@ -19,6 +19,7 @@  along with GCC; see the file COPYING3.  If not see
 
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/i386/i386-builtins.cc b/gcc/config/i386/i386-builtins.cc
index 4286eeb80e63..a778f049a88c 100644
--- a/gcc/config/i386/i386-builtins.cc
+++ b/gcc/config/i386/i386-builtins.cc
@@ -18,6 +18,7 @@  along with GCC; see the file COPYING3.  If not see
 
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/i386/i386-expand.cc b/gcc/config/i386/i386-expand.cc
index 63f5e348d64e..a5094b5b2cc8 100644
--- a/gcc/config/i386/i386-expand.cc
+++ b/gcc/config/i386/i386-expand.cc
@@ -18,6 +18,7 @@  along with GCC; see the file COPYING3.  If not see
 
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/i386/i386-features.cc b/gcc/config/i386/i386-features.cc
index 3434d0069439..16b1e6ca66e5 100644
--- a/gcc/config/i386/i386-features.cc
+++ b/gcc/config/i386/i386-features.cc
@@ -18,6 +18,7 @@  along with GCC; see the file COPYING3.  If not see
 
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/i386/i386-options.cc b/gcc/config/i386/i386-options.cc
index 55e0210260f5..5fa6e021778f 100644
--- a/gcc/config/i386/i386-options.cc
+++ b/gcc/config/i386/i386-options.cc
@@ -18,6 +18,7 @@  along with GCC; see the file COPYING3.  If not see
 
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/loongarch/loongarch-builtins.cc b/gcc/config/loongarch/loongarch-builtins.cc
index cf92770de30e..64529da8250c 100644
--- a/gcc/config/loongarch/loongarch-builtins.cc
+++ b/gcc/config/loongarch/loongarch-builtins.cc
@@ -20,6 +20,7 @@  along with GCC; see the file COPYING3.  If not see
 
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/mingw/winnt-cxx.cc b/gcc/config/mingw/winnt-cxx.cc
index f4d7a50262bf..621366e99743 100644
--- a/gcc/config/mingw/winnt-cxx.cc
+++ b/gcc/config/mingw/winnt-cxx.cc
@@ -20,6 +20,7 @@  along with GCC; see the file COPYING3.  If not see
 
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/mingw/winnt.cc b/gcc/config/mingw/winnt.cc
index 803e5f5ec857..fb4b8a484158 100644
--- a/gcc/config/mingw/winnt.cc
+++ b/gcc/config/mingw/winnt.cc
@@ -20,6 +20,7 @@  along with GCC; see the file COPYING3.  If not see
 
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/mips/mips.cc b/gcc/config/mips/mips.cc
index 173f792bf55a..cd5c5970f0b1 100644
--- a/gcc/config/mips/mips.cc
+++ b/gcc/config/mips/mips.cc
@@ -23,6 +23,7 @@  along with GCC; see the file COPYING3.  If not see
 
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/msp430/driver-msp430.cc b/gcc/config/msp430/driver-msp430.cc
index a11fd3d7dec8..5ffa8ef35e65 100644
--- a/gcc/config/msp430/driver-msp430.cc
+++ b/gcc/config/msp430/driver-msp430.cc
@@ -20,6 +20,7 @@ 
 
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/nvptx/mkoffload.cc b/gcc/config/nvptx/mkoffload.cc
index df16ee647364..ddb1c6631648 100644
--- a/gcc/config/nvptx/mkoffload.cc
+++ b/gcc/config/nvptx/mkoffload.cc
@@ -29,6 +29,7 @@ 
 
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/nvptx/nvptx.cc b/gcc/config/nvptx/nvptx.cc
index 96a1134220ed..3ac61b498944 100644
--- a/gcc/config/nvptx/nvptx.cc
+++ b/gcc/config/nvptx/nvptx.cc
@@ -20,6 +20,7 @@ 
 
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include <sstream>
 #include "system.h"
diff --git a/gcc/config/riscv/riscv-avlprop.cc b/gcc/config/riscv/riscv-avlprop.cc
index 91d80aa00d62..066377c5c14b 100644
--- a/gcc/config/riscv/riscv-avlprop.cc
+++ b/gcc/config/riscv/riscv-avlprop.cc
@@ -65,6 +65,7 @@  along with GCC; see the file COPYING3.  If not see
 #define IN_TARGET_CODE 1
 #define INCLUDE_ALGORITHM
 #define INCLUDE_FUNCTIONAL
+#define INCLUDE_MEMORY
 #define INCLUDE_ARRAY
 
 #include "config.h"
diff --git a/gcc/config/riscv/riscv-vector-builtins.cc b/gcc/config/riscv/riscv-vector-builtins.cc
index 41730c483ee1..458d9b0886e3 100644
--- a/gcc/config/riscv/riscv-vector-builtins.cc
+++ b/gcc/config/riscv/riscv-vector-builtins.cc
@@ -20,6 +20,7 @@ 
 
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/riscv/riscv-vsetvl.cc b/gcc/config/riscv/riscv-vsetvl.cc
index 030ffbe2ebbc..0b53b20f9f6c 100644
--- a/gcc/config/riscv/riscv-vsetvl.cc
+++ b/gcc/config/riscv/riscv-vsetvl.cc
@@ -63,6 +63,7 @@  along with GCC; see the file COPYING3.  If not see
 #define IN_TARGET_CODE 1
 #define INCLUDE_ALGORITHM
 #define INCLUDE_FUNCTIONAL
+#define INCLUDE_MEMORY
 #define INCLUDE_ARRAY
 
 #include "config.h"
diff --git a/gcc/config/rs6000/driver-rs6000.cc b/gcc/config/rs6000/driver-rs6000.cc
index f4900724b98a..fd457e72d972 100644
--- a/gcc/config/rs6000/driver-rs6000.cc
+++ b/gcc/config/rs6000/driver-rs6000.cc
@@ -19,6 +19,7 @@  along with GCC; see the file COPYING3.  If not see
 
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/rs6000/host-darwin.cc b/gcc/config/rs6000/host-darwin.cc
index e0001776339d..15c40b16e674 100644
--- a/gcc/config/rs6000/host-darwin.cc
+++ b/gcc/config/rs6000/host-darwin.cc
@@ -19,6 +19,7 @@ 
 
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/rs6000/rs6000-c.cc b/gcc/config/rs6000/rs6000-c.cc
index 04882c396bfe..5ff346edc2e2 100644
--- a/gcc/config/rs6000/rs6000-c.cc
+++ b/gcc/config/rs6000/rs6000-c.cc
@@ -22,6 +22,7 @@ 
 
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/s390/s390-c.cc b/gcc/config/s390/s390-c.cc
index 4521a86f0480..0332fb4e904b 100644
--- a/gcc/config/s390/s390-c.cc
+++ b/gcc/config/s390/s390-c.cc
@@ -29,6 +29,7 @@ 
 
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/s390/s390.cc b/gcc/config/s390/s390.cc
index 25d43ae3e138..874b11274a43 100644
--- a/gcc/config/s390/s390.cc
+++ b/gcc/config/s390/s390.cc
@@ -22,6 +22,7 @@  along with GCC; see the file COPYING3.  If not see
 
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/sol2-cxx.cc b/gcc/config/sol2-cxx.cc
index aa558be585ef..4f5fbc602249 100644
--- a/gcc/config/sol2-cxx.cc
+++ b/gcc/config/sol2-cxx.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/vms/vms-c.cc b/gcc/config/vms/vms-c.cc
index d0620b4d7a5f..0e9fa2f14d6f 100644
--- a/gcc/config/vms/vms-c.cc
+++ b/gcc/config/vms/vms-c.cc
@@ -20,6 +20,7 @@  along with GCC; see the file COPYING3.  If not see
 
 #define IN_TARGET_CODE 1
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/config/xtensa/xtensa-dynconfig.cc b/gcc/config/xtensa/xtensa-dynconfig.cc
index 3bd2760e4d89..6ddc02a6e9b0 100644
--- a/gcc/config/xtensa/xtensa-dynconfig.cc
+++ b/gcc/config/xtensa/xtensa-dynconfig.cc
@@ -17,6 +17,7 @@ 
    along with GCC; see the file COPYING3.  If not see
    <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/coroutine-passes.cc b/gcc/coroutine-passes.cc
index 0f8e24f8d551..ce74a0278b3e 100644
--- a/gcc/coroutine-passes.cc
+++ b/gcc/coroutine-passes.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/coverage.cc b/gcc/coverage.cc
index a964ed5a48fe..a9825e53d695 100644
--- a/gcc/coverage.cc
+++ b/gcc/coverage.cc
@@ -24,6 +24,7 @@  along with GCC; see the file COPYING3.  If not see
 
 #define GCOV_LINKAGE
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/call.cc b/gcc/cp/call.cc
index 309ab01d12d3..cc25b48d362d 100644
--- a/gcc/cp/call.cc
+++ b/gcc/cp/call.cc
@@ -22,6 +22,7 @@  along with GCC; see the file COPYING3.  If not see
 
 /* High-level class interface.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/class.cc b/gcc/cp/class.cc
index 8c39bb4a76b1..eed9df7dd956 100644
--- a/gcc/cp/class.cc
+++ b/gcc/cp/class.cc
@@ -21,6 +21,7 @@  along with GCC; see the file COPYING3.  If not see
 
 /* High-level class interface.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/constexpr.cc b/gcc/cp/constexpr.cc
index 4e4df94f4206..ad68afef96ec 100644
--- a/gcc/cp/constexpr.cc
+++ b/gcc/cp/constexpr.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/constraint.cc b/gcc/cp/constraint.cc
index cf0e5d37571c..8a36b9c88c4d 100644
--- a/gcc/cp/constraint.cc
+++ b/gcc/cp/constraint.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/contracts.cc b/gcc/cp/contracts.cc
index 4d2849a289a1..2a55b87bd036 100644
--- a/gcc/cp/contracts.cc
+++ b/gcc/cp/contracts.cc
@@ -130,6 +130,7 @@  along with GCC; see the file COPYING3.  If not see
    More helpful for optimization might be to make the contracts a wrapper
    function that could be inlined into the caller, the callee, or both.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/coroutines.cc b/gcc/cp/coroutines.cc
index 86a5ac8999ac..ef64a98972ba 100644
--- a/gcc/cp/coroutines.cc
+++ b/gcc/cp/coroutines.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/cp-gimplify.cc b/gcc/cp/cp-gimplify.cc
index 003e68f1ea72..68f651e96051 100644
--- a/gcc/cp/cp-gimplify.cc
+++ b/gcc/cp/cp-gimplify.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/cp-lang.cc b/gcc/cp/cp-lang.cc
index e1e2ab2e3966..3959b3194e51 100644
--- a/gcc/cp/cp-lang.cc
+++ b/gcc/cp/cp-lang.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/cp-objcp-common.cc b/gcc/cp/cp-objcp-common.cc
index cd379514991d..7a0636f16532 100644
--- a/gcc/cp/cp-objcp-common.cc
+++ b/gcc/cp/cp-objcp-common.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/cp-ubsan.cc b/gcc/cp/cp-ubsan.cc
index c4ae0fe7eea3..1055714fa357 100644
--- a/gcc/cp/cp-ubsan.cc
+++ b/gcc/cp/cp-ubsan.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/cvt.cc b/gcc/cp/cvt.cc
index 526937d36181..54e700ceeda5 100644
--- a/gcc/cp/cvt.cc
+++ b/gcc/cp/cvt.cc
@@ -24,6 +24,7 @@  along with GCC; see the file COPYING3.  If not see
    Every language front end must have a `convert' function
    but what kind of conversions it does will depend on the language.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/cxx-pretty-print.cc b/gcc/cp/cxx-pretty-print.cc
index 41e6bdfdda50..c0608ac0b26f 100644
--- a/gcc/cp/cxx-pretty-print.cc
+++ b/gcc/cp/cxx-pretty-print.cc
@@ -18,12 +18,14 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
 #include "cp-tree.h"
 #include "cxx-pretty-print.h"
 #include "tree-pretty-print.h"
+#include "make-unique.h"
 
 static void pp_cxx_unqualified_id (cxx_pretty_printer *, tree);
 static void pp_cxx_nested_name_specifier (cxx_pretty_printer *, tree);
@@ -2927,8 +2929,8 @@  cxx_pretty_printer::cxx_pretty_printer ()
 
 /* cxx_pretty_printer's implementation of pretty_printer::clone vfunc.  */
 
-pretty_printer *
+std::unique_ptr<pretty_printer>
 cxx_pretty_printer::clone () const
 {
-  return new cxx_pretty_printer (*this);
+  return ::make_unique<cxx_pretty_printer> (*this);
 }
diff --git a/gcc/cp/cxx-pretty-print.h b/gcc/cp/cxx-pretty-print.h
index a4fcf7c71024..f0865cc9d8ca 100644
--- a/gcc/cp/cxx-pretty-print.h
+++ b/gcc/cp/cxx-pretty-print.h
@@ -34,7 +34,7 @@  class cxx_pretty_printer : public c_pretty_printer
 public:
   cxx_pretty_printer ();
 
-  pretty_printer *clone () const override;
+  std::unique_ptr<pretty_printer> clone () const override;
 
   void constant (tree) final override;
   void id_expression (tree) final override;
diff --git a/gcc/cp/decl2.cc b/gcc/cp/decl2.cc
index a0c319086d71..a455eb481b1a 100644
--- a/gcc/cp/decl2.cc
+++ b/gcc/cp/decl2.cc
@@ -26,6 +26,7 @@  along with GCC; see the file COPYING3.  If not see
 /* ??? not all decl nodes are given the most useful possible
    line numbers.  For example, the CONST_DECLs for enum values.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/dump.cc b/gcc/cp/dump.cc
index aafb62ffaa01..8166bbfdee6e 100644
--- a/gcc/cp/dump.cc
+++ b/gcc/cp/dump.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/except.cc b/gcc/cp/except.cc
index 7b4abd1f56e5..e14a9fd3f9c9 100644
--- a/gcc/cp/except.cc
+++ b/gcc/cp/except.cc
@@ -21,6 +21,7 @@  along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/expr.cc b/gcc/cp/expr.cc
index de4991e616cd..e5ec2352f57f 100644
--- a/gcc/cp/expr.cc
+++ b/gcc/cp/expr.cc
@@ -19,6 +19,7 @@  along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/friend.cc b/gcc/cp/friend.cc
index 2e70d0160c46..5261daa4994c 100644
--- a/gcc/cp/friend.cc
+++ b/gcc/cp/friend.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/init.cc b/gcc/cp/init.cc
index 10b83efa8506..d72964d2b740 100644
--- a/gcc/cp/init.cc
+++ b/gcc/cp/init.cc
@@ -20,6 +20,7 @@  along with GCC; see the file COPYING3.  If not see
 
 /* High-level class interface.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/lambda.cc b/gcc/cp/lambda.cc
index d51b513f0fae..1453bc51d923 100644
--- a/gcc/cp/lambda.cc
+++ b/gcc/cp/lambda.cc
@@ -21,6 +21,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/logic.cc b/gcc/cp/logic.cc
index fab2c357dc4e..f36abb2d4e46 100644
--- a/gcc/cp/logic.cc
+++ b/gcc/cp/logic.cc
@@ -20,6 +20,7 @@  along with GCC; see the file COPYING3.  If not see
 
 #include "config.h"
 #define INCLUDE_LIST
+#define INCLUDE_MEMORY
 #include "system.h"
 #include "coretypes.h"
 #include "tm.h"
diff --git a/gcc/cp/mangle.cc b/gcc/cp/mangle.cc
index 17988d69e1ea..828e32633578 100644
--- a/gcc/cp/mangle.cc
+++ b/gcc/cp/mangle.cc
@@ -44,6 +44,7 @@  along with GCC; see the file COPYING3.  If not see
      mangle_ctor_vtbl_for_type:		`C-in-B' constructor virtual table data
      mangle_thunk:			thunk function or entry  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/method.cc b/gcc/cp/method.cc
index d704db2af061..adffa9ba0f33 100644
--- a/gcc/cp/method.cc
+++ b/gcc/cp/method.cc
@@ -21,6 +21,7 @@  along with GCC; see the file COPYING3.  If not see
 
 
 /* Handle method declarations.  */
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/optimize.cc b/gcc/cp/optimize.cc
index 8429d856728f..f93e0262fa76 100644
--- a/gcc/cp/optimize.cc
+++ b/gcc/cp/optimize.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/pt.cc b/gcc/cp/pt.cc
index 0141c53b617c..025614978bcd 100644
--- a/gcc/cp/pt.cc
+++ b/gcc/cp/pt.cc
@@ -28,6 +28,7 @@  along with GCC; see the file COPYING3.  If not see
 
 #include "config.h"
 #define INCLUDE_ALGORITHM // for std::equal
+#define INCLUDE_MEMORY
 #include "system.h"
 #include "coretypes.h"
 #include "cp-tree.h"
diff --git a/gcc/cp/ptree.cc b/gcc/cp/ptree.cc
index 15e46752d011..77bffa0b8997 100644
--- a/gcc/cp/ptree.cc
+++ b/gcc/cp/ptree.cc
@@ -19,6 +19,7 @@  along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/rtti.cc b/gcc/cp/rtti.cc
index cc006ea927f2..fff89856e6b7 100644
--- a/gcc/cp/rtti.cc
+++ b/gcc/cp/rtti.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/search.cc b/gcc/cp/search.cc
index 54eb4f4010f2..2f5df8a2d40c 100644
--- a/gcc/cp/search.cc
+++ b/gcc/cp/search.cc
@@ -21,6 +21,7 @@  along with GCC; see the file COPYING3.  If not see
 
 /* High-level class interface.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/semantics.cc b/gcc/cp/semantics.cc
index dabfb1ff53f5..8c1a8b3c68dc 100644
--- a/gcc/cp/semantics.cc
+++ b/gcc/cp/semantics.cc
@@ -23,6 +23,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/tree.cc b/gcc/cp/tree.cc
index c80ee0689588..28c4a7654f4b 100644
--- a/gcc/cp/tree.cc
+++ b/gcc/cp/tree.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/typeck.cc b/gcc/cp/typeck.cc
index 71d879abef12..859b874f66ed 100644
--- a/gcc/cp/typeck.cc
+++ b/gcc/cp/typeck.cc
@@ -24,6 +24,7 @@  along with GCC; see the file COPYING3.  If not see
    including computing the types of the result, C and C++ specific error
    checks, and some optimization.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/typeck2.cc b/gcc/cp/typeck2.cc
index 79b397a69faf..9f57020e2537 100644
--- a/gcc/cp/typeck2.cc
+++ b/gcc/cp/typeck2.cc
@@ -25,6 +25,7 @@  along with GCC; see the file COPYING3.  If not see
    including computing the types of the result, C and C++ specific error
    checks, and some optimization.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/cp/vtable-class-hierarchy.cc b/gcc/cp/vtable-class-hierarchy.cc
index afe1e96f5e27..7e4f613c2051 100644
--- a/gcc/cp/vtable-class-hierarchy.cc
+++ b/gcc/cp/vtable-class-hierarchy.cc
@@ -110,6 +110,7 @@  along with GCC; see the file COPYING3.  If not see
   gcc/vtable-verify.h, because they are used both here and in
   gcc/vtable-verify.cc.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/d/d-attribs.cc b/gcc/d/d-attribs.cc
index 0f7ca10e0175..873140ee7c8b 100644
--- a/gcc/d/d-attribs.cc
+++ b/gcc/d/d-attribs.cc
@@ -18,6 +18,7 @@  along with GCC; see the file COPYING3.  If not see
 /* Implementation of attribute handlers for user defined attributes and
    internal built-in functions.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/d/d-builtins.cc b/gcc/d/d-builtins.cc
index 4546c0e9b563..2ca02fe691cb 100644
--- a/gcc/d/d-builtins.cc
+++ b/gcc/d/d-builtins.cc
@@ -15,6 +15,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/d/d-codegen.cc b/gcc/d/d-codegen.cc
index 2b3089b5f6dd..eeeb48defa28 100644
--- a/gcc/d/d-codegen.cc
+++ b/gcc/d/d-codegen.cc
@@ -15,6 +15,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/d/d-convert.cc b/gcc/d/d-convert.cc
index 5c79cdf6e1e4..a07c7d8ba68e 100644
--- a/gcc/d/d-convert.cc
+++ b/gcc/d/d-convert.cc
@@ -15,6 +15,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/d/d-diagnostic.cc b/gcc/d/d-diagnostic.cc
index 373075ca54de..d584d2ac2b23 100644
--- a/gcc/d/d-diagnostic.cc
+++ b/gcc/d/d-diagnostic.cc
@@ -15,6 +15,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/d/d-frontend.cc b/gcc/d/d-frontend.cc
index 0d7f4a3ec7fd..c3e5d8594adc 100644
--- a/gcc/d/d-frontend.cc
+++ b/gcc/d/d-frontend.cc
@@ -15,6 +15,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/d/d-lang.cc b/gcc/d/d-lang.cc
index 89ffa7e61ea1..2aa2a3f9767f 100644
--- a/gcc/d/d-lang.cc
+++ b/gcc/d/d-lang.cc
@@ -15,6 +15,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/d/d-longdouble.cc b/gcc/d/d-longdouble.cc
index e4c8c5e6eb06..ba10a3569096 100644
--- a/gcc/d/d-longdouble.cc
+++ b/gcc/d/d-longdouble.cc
@@ -15,6 +15,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/d/d-target.cc b/gcc/d/d-target.cc
index dd46e5358918..17cae450623f 100644
--- a/gcc/d/d-target.cc
+++ b/gcc/d/d-target.cc
@@ -15,6 +15,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/d/decl.cc b/gcc/d/decl.cc
index 0a87c85ae2e5..0afaa71664d5 100644
--- a/gcc/d/decl.cc
+++ b/gcc/d/decl.cc
@@ -15,6 +15,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/d/expr.cc b/gcc/d/expr.cc
index d055e0b4025b..a690f2ef2cf1 100644
--- a/gcc/d/expr.cc
+++ b/gcc/d/expr.cc
@@ -15,6 +15,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/d/intrinsics.cc b/gcc/d/intrinsics.cc
index c895c1a1a529..34143b343e8b 100644
--- a/gcc/d/intrinsics.cc
+++ b/gcc/d/intrinsics.cc
@@ -15,6 +15,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/d/modules.cc b/gcc/d/modules.cc
index b111ee90cea0..f9b4a1e8e412 100644
--- a/gcc/d/modules.cc
+++ b/gcc/d/modules.cc
@@ -15,6 +15,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/d/toir.cc b/gcc/d/toir.cc
index a6848f2ffa2c..2bbba1035c7f 100644
--- a/gcc/d/toir.cc
+++ b/gcc/d/toir.cc
@@ -15,6 +15,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/d/typeinfo.cc b/gcc/d/typeinfo.cc
index cadcbe8164e9..56aaf29d54eb 100644
--- a/gcc/d/typeinfo.cc
+++ b/gcc/d/typeinfo.cc
@@ -15,6 +15,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/d/types.cc b/gcc/d/types.cc
index 9fa2f888cb22..2f78c917de23 100644
--- a/gcc/d/types.cc
+++ b/gcc/d/types.cc
@@ -15,6 +15,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/data-streamer-in.cc b/gcc/data-streamer-in.cc
index 07dbc5e2bc36..64dec35296cc 100644
--- a/gcc/data-streamer-in.cc
+++ b/gcc/data-streamer-in.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/data-streamer-out.cc b/gcc/data-streamer-out.cc
index c237e30f7048..95715436cdc5 100644
--- a/gcc/data-streamer-out.cc
+++ b/gcc/data-streamer-out.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/data-streamer.cc b/gcc/data-streamer.cc
index 896413e8d2b6..1caf72f9e965 100644
--- a/gcc/data-streamer.cc
+++ b/gcc/data-streamer.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/diagnostic-buffer.h b/gcc/diagnostic-buffer.h
index 07acd0449209..deb933a87630 100644
--- a/gcc/diagnostic-buffer.h
+++ b/gcc/diagnostic-buffer.h
@@ -59,7 +59,6 @@  class diagnostic_buffer
   friend class diagnostic_context;
 
   diagnostic_buffer (diagnostic_context &ctxt);
-  ~diagnostic_buffer ();
 
   void dump (FILE *out, int indent) const;
   void DEBUG_FUNCTION dump () const { dump (stderr, 0); }
@@ -77,7 +76,7 @@  class diagnostic_buffer
   void ensure_per_format_buffer ();
 
   diagnostic_context &m_ctxt;
-  diagnostic_per_format_buffer *m_per_format_buffer;
+  std::unique_ptr<diagnostic_per_format_buffer> m_per_format_buffer;
 
   /* The number of buffered diagnostics of each kind.  */
   diagnostic_counters m_diagnostic_counters;
diff --git a/gcc/diagnostic-client-data-hooks.h b/gcc/diagnostic-client-data-hooks.h
index a67a3dbff479..9e2bd606378a 100644
--- a/gcc/diagnostic-client-data-hooks.h
+++ b/gcc/diagnostic-client-data-hooks.h
@@ -53,7 +53,7 @@  class diagnostic_client_data_hooks
    for use in the compiler (i.e. with knowledge of "tree", access to
    langhooks, etc).  */
 
-extern diagnostic_client_data_hooks *make_compiler_data_hooks ();
+extern std::unique_ptr<diagnostic_client_data_hooks> make_compiler_data_hooks ();
 
 class diagnostic_client_plugin_info;
 
diff --git a/gcc/diagnostic-format-json.cc b/gcc/diagnostic-format-json.cc
index 022e3a9ae7d3..7b89ee81d700 100644
--- a/gcc/diagnostic-format-json.cc
+++ b/gcc/diagnostic-format-json.cc
@@ -72,9 +72,10 @@  public:
     diagnostic_output_format::dump (out, indent);
   }
 
-  diagnostic_per_format_buffer *make_per_format_buffer () final override
+  std::unique_ptr<diagnostic_per_format_buffer>
+  make_per_format_buffer () final override
   {
-    return new diagnostic_json_format_buffer (*this);
+    return ::make_unique<diagnostic_json_format_buffer> (*this);
   }
   void set_buffer (diagnostic_per_format_buffer *base_buffer) final override
   {
@@ -505,7 +506,7 @@  diagnostic_output_format_init_json (diagnostic_context &context,
   pp_show_color (fmt->get_printer ()) = false;
   context.set_show_highlight_colors (false);
 
-  context.set_output_format (fmt.release ());
+  context.set_output_format (std::move (fmt));
 }
 
 /* Populate CONTEXT in preparation for JSON output to stderr.  */
diff --git a/gcc/diagnostic-format-sarif.cc b/gcc/diagnostic-format-sarif.cc
index 4ce356190007..a5c6ce290851 100644
--- a/gcc/diagnostic-format-sarif.cc
+++ b/gcc/diagnostic-format-sarif.cc
@@ -3409,9 +3409,10 @@  public:
     diagnostic_output_format::dump (out, indent);
   }
 
-  diagnostic_per_format_buffer *make_per_format_buffer () final override
+  std::unique_ptr<diagnostic_per_format_buffer>
+  make_per_format_buffer () final override
   {
-    return new diagnostic_sarif_format_buffer (m_builder);
+    return ::make_unique<diagnostic_sarif_format_buffer> (m_builder);
   }
   void set_buffer (diagnostic_per_format_buffer *base_buffer) final override
   {
@@ -3657,7 +3658,7 @@  diagnostic_output_format_init_sarif (diagnostic_context &context,
 
   context.m_printer->set_token_printer
     (&fmt->get_builder ().get_token_printer ());
-  context.set_output_format (fmt.release ());
+  context.set_output_format (std::move (fmt));
 }
 
 /* Populate CONTEXT in preparation for SARIF output to stderr.  */
@@ -4255,7 +4256,7 @@  test_message_with_embedded_link (enum sarif_version version)
     };
 
     test_sarif_diagnostic_context dc ("test.c", version);
-    dc.set_urlifier (new test_urlifier ());
+    dc.set_urlifier (::make_unique<test_urlifier> ());
     rich_location richloc (line_table, UNKNOWN_LOCATION);
     dc.report (DK_ERROR, richloc, nullptr, 0,
 	       "foo %<-foption%> %<unrecognized%> bar");
diff --git a/gcc/diagnostic-format-text.cc b/gcc/diagnostic-format-text.cc
index 03f5518d6206..c23ac6c505d8 100644
--- a/gcc/diagnostic-format-text.cc
+++ b/gcc/diagnostic-format-text.cc
@@ -19,6 +19,7 @@  along with GCC; see the file COPYING3.  If not see
 
 
 #include "config.h"
+#define INCLUDE_MEMORY
 #define INCLUDE_VECTOR
 #include "system.h"
 #include "coretypes.h"
@@ -34,6 +35,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "diagnostic-format-text.h"
 #include "diagnostic-buffer.h"
 #include "text-art/theme.h"
+#include "make-unique.h"
 
 /* Disable warnings about quoting issues in the pp_xxx calls below
    that (intentionally) don't follow GCC diagnostic conventions.  */
@@ -186,10 +188,10 @@  diagnostic_text_output_format::set_buffer (diagnostic_per_format_buffer *base)
     }
 }
 
-diagnostic_per_format_buffer *
+std::unique_ptr<diagnostic_per_format_buffer>
 diagnostic_text_output_format::make_per_format_buffer ()
 {
-  return new diagnostic_text_format_buffer (*this);
+  return ::make_unique<diagnostic_text_format_buffer> (*this);
 }
 
 /* Implementation of diagnostic_output_format::on_report_diagnostic vfunc
diff --git a/gcc/diagnostic-format-text.h b/gcc/diagnostic-format-text.h
index 12a65bf6ee8f..b43501eaa4ab 100644
--- a/gcc/diagnostic-format-text.h
+++ b/gcc/diagnostic-format-text.h
@@ -43,7 +43,8 @@  public:
 
   void dump (FILE *out, int indent) const override;
 
-  diagnostic_per_format_buffer *make_per_format_buffer () final override;
+  std::unique_ptr<diagnostic_per_format_buffer>
+  make_per_format_buffer () final override;
   void set_buffer (diagnostic_per_format_buffer *) final override;
 
   void on_begin_group () override {}
diff --git a/gcc/diagnostic-format.h b/gcc/diagnostic-format.h
index e2ae155eec1e..a38d177ce8d1 100644
--- a/gcc/diagnostic-format.h
+++ b/gcc/diagnostic-format.h
@@ -38,7 +38,8 @@  public:
 
   /* Vfunc for making an appropriate diagnostic_per_format_buffer
      subclass for this format.  */
-  virtual diagnostic_per_format_buffer *make_per_format_buffer () = 0;
+  virtual std::unique_ptr<diagnostic_per_format_buffer>
+  make_per_format_buffer () = 0;
 
   /* Vfunc to be called when call a diagnostic_buffer is set on
      a diagnostic_context, to update this format.  The per_format_buffer
diff --git a/gcc/diagnostic-global-context.cc b/gcc/diagnostic-global-context.cc
index 9e151905a6bb..e82588e54047 100644
--- a/gcc/diagnostic-global-context.cc
+++ b/gcc/diagnostic-global-context.cc
@@ -22,6 +22,7 @@  along with GCC; see the file COPYING3.  If not see
 /* This file implements the parts of the language independent aspect
    of diagnostic messages that implicitly use global_dc.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/diagnostic-macro-unwinding.cc b/gcc/diagnostic-macro-unwinding.cc
index a9838ffb52ca..38f827f66381 100644
--- a/gcc/diagnostic-macro-unwinding.cc
+++ b/gcc/diagnostic-macro-unwinding.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/diagnostic-show-locus.cc b/gcc/diagnostic-show-locus.cc
index 415de42cbc7b..79499dc549d3 100644
--- a/gcc/diagnostic-show-locus.cc
+++ b/gcc/diagnostic-show-locus.cc
@@ -19,6 +19,7 @@  along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 #include "config.h"
+#define INCLUDE_MEMORY
 #define INCLUDE_VECTOR
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/diagnostic-spec.cc b/gcc/diagnostic-spec.cc
index addaf089f035..77e4b67dc887 100644
--- a/gcc/diagnostic-spec.cc
+++ b/gcc/diagnostic-spec.cc
@@ -19,6 +19,7 @@ 
    along with GCC; see the file COPYING3.  If not see
    <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/diagnostic.cc b/gcc/diagnostic.cc
index 712300896573..f1cef0b01a88 100644
--- a/gcc/diagnostic.cc
+++ b/gcc/diagnostic.cc
@@ -454,19 +454,21 @@  diagnostic_context::execution_failed_p () const
 }
 
 void
-diagnostic_context::set_output_format (diagnostic_output_format *output_format)
+diagnostic_context::
+set_output_format (std::unique_ptr<diagnostic_output_format> output_format)
 {
-  /* Ideally we'd use a std::unique_ptr here.  */
   delete m_output_format;
-  m_output_format = output_format;
+  /* Ideally this field would be a std::unique_ptr.  */
+  m_output_format = output_format.release ();
 }
 
 void
-diagnostic_context::set_client_data_hooks (diagnostic_client_data_hooks *hooks)
+diagnostic_context::
+set_client_data_hooks (std::unique_ptr<diagnostic_client_data_hooks> hooks)
 {
-  /* Ideally we'd use a std::unique_ptr here.  */
   delete m_client_data_hooks;
-  m_client_data_hooks = hooks;
+  /* Ideally the field would be a std::unique_ptr here.  */
+  m_client_data_hooks = hooks.release ();
 }
 
 void
@@ -483,20 +485,21 @@  diagnostic_context::set_original_argv (unique_argv original_argv)
 }
 
 void
-diagnostic_context::set_option_manager (diagnostic_option_manager *mgr,
-					unsigned lang_mask)
+diagnostic_context::
+set_option_manager (std::unique_ptr<diagnostic_option_manager> mgr,
+		    unsigned lang_mask)
 {
   delete m_option_mgr;
-  m_option_mgr = mgr;
+  m_option_mgr = mgr.release ();
   m_lang_mask = lang_mask;
 }
 
 void
-diagnostic_context::set_urlifier (urlifier *urlifier)
+diagnostic_context::set_urlifier (std::unique_ptr<urlifier> urlifier)
 {
-  /* Ideally we'd use a std::unique_ptr here.  */
   delete m_urlifier;
-  m_urlifier = urlifier;
+  /* Ideally the field would be a std::unique_ptr here.  */
+  m_urlifier = urlifier.release ();
 }
 
 void
@@ -1715,7 +1718,7 @@  diagnostic_context::set_diagnostic_buffer (diagnostic_buffer *buffer)
     {
       buffer->ensure_per_format_buffer ();
       gcc_assert (buffer->m_per_format_buffer);
-      m_output_format->set_buffer (buffer->m_per_format_buffer);
+      m_output_format->set_buffer (buffer->m_per_format_buffer.get ());
     }
   else
     m_output_format->set_buffer (nullptr);
@@ -1793,14 +1796,8 @@  diagnostic_counters::clear ()
 /* class diagnostic_buffer.  */
 
 diagnostic_buffer::diagnostic_buffer (diagnostic_context &ctxt)
-: m_ctxt (ctxt),
-  m_per_format_buffer (nullptr)
-{
-}
-
-diagnostic_buffer::~diagnostic_buffer ()
+: m_ctxt (ctxt)
 {
-  delete m_per_format_buffer;
 }
 
 void
diff --git a/gcc/diagnostic.h b/gcc/diagnostic.h
index f1f475540de3..3da1ae9c8019 100644
--- a/gcc/diagnostic.h
+++ b/gcc/diagnostic.h
@@ -21,6 +21,14 @@  along with GCC; see the file COPYING3.  If not see
 #ifndef GCC_DIAGNOSTIC_H
 #define GCC_DIAGNOSTIC_H
 
+/* This header uses std::unique_ptr, but <memory> can't be directly
+   included due to issues with macros.  Hence it must be included from
+   system.h by defining INCLUDE_MEMORY in any source file using it.  */
+
+#ifndef INCLUDE_MEMORY
+# error "You must define INCLUDE_MEMORY before including system.h to use diagnostic.h"
+#endif
+
 #include "unique-argv.h"
 #include "rich-location.h"
 #include "pretty-print.h"
@@ -574,10 +582,10 @@  public:
   }
 
   /* Various setters for use by option-handling logic.  */
-  void set_output_format (diagnostic_output_format *output_format);
+  void set_output_format (std::unique_ptr<diagnostic_output_format> output_format);
   void set_text_art_charset (enum diagnostic_text_art_charset charset);
-  void set_client_data_hooks (diagnostic_client_data_hooks *hooks);
-  void set_urlifier (urlifier *);
+  void set_client_data_hooks (std::unique_ptr<diagnostic_client_data_hooks> hooks);
+  void set_urlifier (std::unique_ptr<urlifier>);
   void create_edit_context ();
   void set_warning_as_error_requested (bool val)
   {
@@ -672,7 +680,7 @@  public:
   }
 
   void
-  set_option_manager (diagnostic_option_manager *mgr,
+  set_option_manager (std::unique_ptr<diagnostic_option_manager> mgr,
 		      unsigned lang_mask);
 
   unsigned get_lang_mask () const
@@ -700,6 +708,7 @@  public:
     return m_option_classifier.pch_restore (f);
   }
 
+
   void set_diagnostic_buffer (diagnostic_buffer *);
   diagnostic_buffer *get_diagnostic_buffer () const
   {
@@ -708,6 +717,11 @@  public:
   void clear_diagnostic_buffer (diagnostic_buffer &);
   void flush_diagnostic_buffer (diagnostic_buffer &);
 
+  std::unique_ptr<pretty_printer> clone_printer () const
+  {
+    return m_printer->clone ();
+  }
+
 private:
   void error_recursion () ATTRIBUTE_NORETURN;
 
@@ -722,11 +736,15 @@  private:
      Ideally, all of these would be private.  */
 
 public:
-  /* Where most of the diagnostic formatting work is done.  */
+  /* Where most of the diagnostic formatting work is done.
+     Owned by the context; this would be a std::unique_ptr if
+     diagnostic_context had a proper ctor.  */
   pretty_printer *m_printer;
 
 private:
-  /* Cache of source code.  */
+  /* Cache of source code.
+     Owned by the context; this would be a std::unique_ptr if
+     diagnostic_context had a proper ctor.  */
   file_cache *m_file_cache;
 
   /* The number of times we have issued diagnostics.  */
@@ -818,11 +836,15 @@  public:
   void (*m_adjust_diagnostic_info)(diagnostic_context *, diagnostic_info *);
 
 private:
+  /* Owned by the context; this would be a std::unique_ptr if
+     diagnostic_context had a proper ctor.  */
   diagnostic_option_manager *m_option_mgr;
   unsigned m_lang_mask;
 
   /* An optional hook for adding URLs to quoted text strings in
-     diagnostics.  Only used for the main diagnostic message.  */
+     diagnostics.  Only used for the main diagnostic message.
+     Owned by the context; this would be a std::unique_ptr if
+     diagnostic_context had a proper ctor.  */
   urlifier *m_urlifier;
 
 public:
@@ -865,7 +887,9 @@  private:
   enum diagnostics_escape_format m_escape_format;
 
   /* If non-NULL, an edit_context to which fix-it hints should be
-     applied, for generating patches.  */
+     applied, for generating patches.
+     Owned by the context; this would be a std::unique_ptr if
+     diagnostic_context had a proper ctor.  */
   edit_context *m_edit_context_ptr;
 
   /* Fields relating to diagnostic groups.  */
@@ -879,7 +903,9 @@  private:
   } m_diagnostic_groups;
 
   /* How to output diagnostics (text vs a structured format such as JSON).
-     Must be non-NULL; owned by context.  */
+     Must be non-NULL; owned by context.
+     This would be a std::unique_ptr if diagnostic_context had a proper
+     ctor.  */
   diagnostic_output_format *m_output_format;
 
   /* Callback to set the locations of call sites along the inlining
@@ -891,14 +917,18 @@  private:
   /* A bundle of hooks for providing data to the context about its client
      e.g. version information, plugins, etc.
      Used by SARIF output to give metadata about the client that's
-     producing diagnostics.  */
+     producing diagnostics.
+     Owned by the context; this would be a std::unique_ptr if
+     diagnostic_context had a proper ctor.  */
   diagnostic_client_data_hooks *m_client_data_hooks;
 
   /* Support for diagrams.  */
   struct
   {
     /* Theme to use when generating diagrams.
-       Can be NULL (if text art is disabled).  */
+       Can be NULL (if text art is disabled).
+       Owned by the context; this would be a std::unique_ptr if
+       diagnostic_context had a proper ctor.  */
     text_art::theme *m_theme;
 
   } m_diagrams;
diff --git a/gcc/digraph.cc b/gcc/digraph.cc
index b323764a93cd..7b2726d24fe3 100644
--- a/gcc/digraph.cc
+++ b/gcc/digraph.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/dwarf2out.cc b/gcc/dwarf2out.cc
index 38aedb644709..fc23e4ba4601 100644
--- a/gcc/dwarf2out.cc
+++ b/gcc/dwarf2out.cc
@@ -55,6 +55,7 @@  along with GCC; see the file COPYING3.  If not see
    DW_CFA_... = DWARF2 CFA call frame instruction
    DW_TAG_... = DWARF2 DIE tag */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/edit-context.cc b/gcc/edit-context.cc
index 37ac4989de0b..f51ebf0e5158 100644
--- a/gcc/edit-context.cc
+++ b/gcc/edit-context.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/except.cc b/gcc/except.cc
index 5bb5edbd8065..4bec795010b0 100644
--- a/gcc/except.cc
+++ b/gcc/except.cc
@@ -109,6 +109,7 @@  along with GCC; see the file COPYING3.  If not see
    output_call_frame_info (dwarf2out.cc) emits the required unwind data.  */
 
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/expr.cc b/gcc/expr.cc
index 87f9e002c07c..51a7e5a60d3e 100644
--- a/gcc/expr.cc
+++ b/gcc/expr.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/file-prefix-map.cc b/gcc/file-prefix-map.cc
index 6b432e2a15af..6841559c5ed8 100644
--- a/gcc/file-prefix-map.cc
+++ b/gcc/file-prefix-map.cc
@@ -15,6 +15,7 @@ 
    along with this program; see the file COPYING3.  If not see
    <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/final.cc b/gcc/final.cc
index 5d911586de5b..11141f2b56c8 100644
--- a/gcc/final.cc
+++ b/gcc/final.cc
@@ -44,6 +44,7 @@  along with GCC; see the file COPYING3.  If not see
 
 #include "config.h"
 #define INCLUDE_ALGORITHM /* reverse */
+#define INCLUDE_MEMORY
 #include "system.h"
 #include "coretypes.h"
 #include "backend.h"
diff --git a/gcc/fortran/arith.cc b/gcc/fortran/arith.cc
index a214b8bc1b37..3ecbbd30cfa2 100644
--- a/gcc/fortran/arith.cc
+++ b/gcc/fortran/arith.cc
@@ -23,6 +23,7 @@  along with GCC; see the file COPYING3.  If not see
    would evaluate them.  We use the GNU MP library and the MPFR
    library to do arithmetic, and this file provides the interface.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/array.cc b/gcc/fortran/array.cc
index 773c5b72c851..31bdd736a9ee 100644
--- a/gcc/fortran/array.cc
+++ b/gcc/fortran/array.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/bbt.cc b/gcc/fortran/bbt.cc
index f564ce104e87..556baeec71db 100644
--- a/gcc/fortran/bbt.cc
+++ b/gcc/fortran/bbt.cc
@@ -35,6 +35,7 @@  along with GCC; see the file COPYING3.  If not see
    This implementation is based on Stefan Nilsson's article in the
    July 1997 Doctor Dobb's Journal, "Treaps in Java".  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/check.cc b/gcc/fortran/check.cc
index e90073ad4b04..304ca1b9ae82 100644
--- a/gcc/fortran/check.cc
+++ b/gcc/fortran/check.cc
@@ -25,6 +25,7 @@  along with GCC; see the file COPYING3.  If not see
    has been sorted into the right order and has NULL arguments in the
    correct places for missing optional arguments.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/class.cc b/gcc/fortran/class.cc
index f9e0d416e487..4b2234a958fc 100644
--- a/gcc/fortran/class.cc
+++ b/gcc/fortran/class.cc
@@ -56,6 +56,7 @@  along with GCC; see the file COPYING3.  If not see
    type-bound procedures.  */
 
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/constructor.cc b/gcc/fortran/constructor.cc
index 942e26397321..8a4e11d86861 100644
--- a/gcc/fortran/constructor.cc
+++ b/gcc/fortran/constructor.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/convert.cc b/gcc/fortran/convert.cc
index 674e3f425e85..187bda64063e 100644
--- a/gcc/fortran/convert.cc
+++ b/gcc/fortran/convert.cc
@@ -22,6 +22,7 @@  along with GCC; see the file COPYING3.  If not see
    different data types for the translation of the gfortran internal
    representation to GIMPLE.  The only entry point is `convert'.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/cpp.cc b/gcc/fortran/cpp.cc
index 7c5f00cfd690..9d662ac5ab23 100644
--- a/gcc/fortran/cpp.cc
+++ b/gcc/fortran/cpp.cc
@@ -16,6 +16,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/data.cc b/gcc/fortran/data.cc
index e7202455b3ec..3aa869be1aaa 100644
--- a/gcc/fortran/data.cc
+++ b/gcc/fortran/data.cc
@@ -32,6 +32,7 @@  along with GCC; see the file COPYING3.  If not see
    etc., to convert the initial value. Refer to trans-expr.cc and
    trans-array.cc.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/decl.cc b/gcc/fortran/decl.cc
index 151578954dc3..499a8462629e 100644
--- a/gcc/fortran/decl.cc
+++ b/gcc/fortran/decl.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/dependency.cc b/gcc/fortran/dependency.cc
index 15edf1af9dff..2d3db9541bba 100644
--- a/gcc/fortran/dependency.cc
+++ b/gcc/fortran/dependency.cc
@@ -23,6 +23,7 @@  along with GCC; see the file COPYING3.  If not see
    have different dependency checking functions for different types
    if dependencies.  Ideally these would probably be merged.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/dump-parse-tree.cc b/gcc/fortran/dump-parse-tree.cc
index bc8a95a809b2..ea5d2ab66a6f 100644
--- a/gcc/fortran/dump-parse-tree.cc
+++ b/gcc/fortran/dump-parse-tree.cc
@@ -30,6 +30,7 @@  along with GCC; see the file COPYING3.  If not see
 
    TODO: Dump DATA.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/error.cc b/gcc/fortran/error.cc
index e5e24bd4974f..d633dc30d821 100644
--- a/gcc/fortran/error.cc
+++ b/gcc/fortran/error.cc
@@ -24,6 +24,7 @@  along with GCC; see the file COPYING3.  If not see
    for possible use later.  If a line does not match a legal
    construction, then the saved error message is reported.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/expr.cc b/gcc/fortran/expr.cc
index 65bb9f11815e..19e2826f14f6 100644
--- a/gcc/fortran/expr.cc
+++ b/gcc/fortran/expr.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/f95-lang.cc b/gcc/fortran/f95-lang.cc
index 770f31b221d6..611c299b654a 100644
--- a/gcc/fortran/f95-lang.cc
+++ b/gcc/fortran/f95-lang.cc
@@ -22,6 +22,7 @@  along with GCC; see the file COPYING3.  If not see
 
 /* declare required prototypes: */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/frontend-passes.cc b/gcc/fortran/frontend-passes.cc
index 405074ecb02b..3a36b1ddf735 100644
--- a/gcc/fortran/frontend-passes.cc
+++ b/gcc/fortran/frontend-passes.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/interface.cc b/gcc/fortran/interface.cc
index b592fe4f6c7f..ca5d4aa10282 100644
--- a/gcc/fortran/interface.cc
+++ b/gcc/fortran/interface.cc
@@ -63,6 +63,7 @@  along with GCC; see the file COPYING3.  If not see
    formal argument list points to symbols within the same namespace as
    the program unit name.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/intrinsic.cc b/gcc/fortran/intrinsic.cc
index c6fb0a6de45a..61558d487502 100644
--- a/gcc/fortran/intrinsic.cc
+++ b/gcc/fortran/intrinsic.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/io.cc b/gcc/fortran/io.cc
index ac4e5c56f454..5e1785e2dbd3 100644
--- a/gcc/fortran/io.cc
+++ b/gcc/fortran/io.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/iresolve.cc b/gcc/fortran/iresolve.cc
index 9fb221284928..d8b216bcc67c 100644
--- a/gcc/fortran/iresolve.cc
+++ b/gcc/fortran/iresolve.cc
@@ -26,6 +26,7 @@  along with GCC; see the file COPYING3.  If not see
    code node is passed.  The result type and library subroutine name
    are generally set according to the function arguments.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/match.cc b/gcc/fortran/match.cc
index 3a993ede880b..da431c5dd531 100644
--- a/gcc/fortran/match.cc
+++ b/gcc/fortran/match.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/matchexp.cc b/gcc/fortran/matchexp.cc
index 9e773cf8feeb..f7185d5aa4ff 100644
--- a/gcc/fortran/matchexp.cc
+++ b/gcc/fortran/matchexp.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/misc.cc b/gcc/fortran/misc.cc
index 991829516efe..0ef6679fee9c 100644
--- a/gcc/fortran/misc.cc
+++ b/gcc/fortran/misc.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/module.cc b/gcc/fortran/module.cc
index 880aef2c7a89..9ab4d2bf1ea3 100644
--- a/gcc/fortran/module.cc
+++ b/gcc/fortran/module.cc
@@ -64,6 +64,7 @@  along with GCC; see the file COPYING3.  If not see
    which are zero based.  Symbols are written to the module in no
    particular order.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/openmp.cc b/gcc/fortran/openmp.cc
index 7aa0d5974444..aaede547d001 100644
--- a/gcc/fortran/openmp.cc
+++ b/gcc/fortran/openmp.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #define INCLUDE_VECTOR
 #define INCLUDE_STRING
 #include "config.h"
diff --git a/gcc/fortran/options.cc b/gcc/fortran/options.cc
index a55f1f36f3f9..db7bfa001009 100644
--- a/gcc/fortran/options.cc
+++ b/gcc/fortran/options.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/parse.cc b/gcc/fortran/parse.cc
index 1821871819bc..ebfcf81a9884 100644
--- a/gcc/fortran/parse.cc
+++ b/gcc/fortran/parse.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/primary.cc b/gcc/fortran/primary.cc
index b93ee56fb357..bacbaeddd32e 100644
--- a/gcc/fortran/primary.cc
+++ b/gcc/fortran/primary.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc
index ce4bf036c545..edb43f8b90b3 100644
--- a/gcc/fortran/resolve.cc
+++ b/gcc/fortran/resolve.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/scanner.cc b/gcc/fortran/scanner.cc
index 09d7d8c5e399..7e3237cdd55d 100644
--- a/gcc/fortran/scanner.cc
+++ b/gcc/fortran/scanner.cc
@@ -40,6 +40,7 @@  along with GCC; see the file COPYING3.  If not see
    From the scanner's viewpoint, the higher level subroutines ask for
    new characters and do a lot of jumping backwards.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/simplify.cc b/gcc/fortran/simplify.cc
index 2f6c3c39dad8..1e2fa3eb8ea2 100644
--- a/gcc/fortran/simplify.cc
+++ b/gcc/fortran/simplify.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/st.cc b/gcc/fortran/st.cc
index 904b00080705..076b642483da 100644
--- a/gcc/fortran/st.cc
+++ b/gcc/fortran/st.cc
@@ -23,6 +23,7 @@  along with GCC; see the file COPYING3.  If not see
    GENERIC tree structures and from there to executable code for a
    target.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/symbol.cc b/gcc/fortran/symbol.cc
index e803cdd93c9a..5e83fb400e3f 100644
--- a/gcc/fortran/symbol.cc
+++ b/gcc/fortran/symbol.cc
@@ -19,6 +19,7 @@  along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/target-memory.cc b/gcc/fortran/target-memory.cc
index c71c40320900..235ecc49e399 100644
--- a/gcc/fortran/target-memory.cc
+++ b/gcc/fortran/target-memory.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc
index dbf7bc880a40..f5543223665c 100644
--- a/gcc/fortran/trans-array.cc
+++ b/gcc/fortran/trans-array.cc
@@ -75,6 +75,7 @@  along with GCC; see the file COPYING3.  If not see
    After the loop code has been added into its parent scope gfc_cleanup_loop
    is called to free all the SS allocated by the scalarizer.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/trans-common.cc b/gcc/fortran/trans-common.cc
index 49b0c3de4716..7c3681a93089 100644
--- a/gcc/fortran/trans-common.cc
+++ b/gcc/fortran/trans-common.cc
@@ -94,6 +94,7 @@  along with GCC; see the file COPYING3.  If not see
 
 #include "config.h"
 #define INCLUDE_MAP
+#define INCLUDE_MEMORY
 #include "system.h"
 #include "coretypes.h"
 #include "tm.h"
diff --git a/gcc/fortran/trans-const.cc b/gcc/fortran/trans-const.cc
index 204f4df301c0..9c2d683b1a16 100644
--- a/gcc/fortran/trans-const.cc
+++ b/gcc/fortran/trans-const.cc
@@ -20,6 +20,7 @@  along with GCC; see the file COPYING3.  If not see
 
 /* trans-const.cc -- convert constant values */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/trans-decl.cc b/gcc/fortran/trans-decl.cc
index a62fe3f0441c..a2c15959551e 100644
--- a/gcc/fortran/trans-decl.cc
+++ b/gcc/fortran/trans-decl.cc
@@ -20,6 +20,7 @@  along with GCC; see the file COPYING3.  If not see
 
 /* trans-decl.cc -- Handling of backend function and variable decls, etc */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc
index 735ab3a21e77..7ec0ad54d271 100644
--- a/gcc/fortran/trans-expr.cc
+++ b/gcc/fortran/trans-expr.cc
@@ -21,6 +21,7 @@  along with GCC; see the file COPYING3.  If not see
 
 /* trans-expr.cc-- generate GENERIC trees for gfc_expr.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/trans-intrinsic.cc b/gcc/fortran/trans-intrinsic.cc
index 80d75f26b095..20ccbb123c68 100644
--- a/gcc/fortran/trans-intrinsic.cc
+++ b/gcc/fortran/trans-intrinsic.cc
@@ -21,6 +21,7 @@  along with GCC; see the file COPYING3.  If not see
 
 /* trans-intrinsic.cc-- generate GENERIC trees for calls to intrinsics.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/trans-io.cc b/gcc/fortran/trans-io.cc
index 961a711c5301..41396a3fe4c6 100644
--- a/gcc/fortran/trans-io.cc
+++ b/gcc/fortran/trans-io.cc
@@ -19,6 +19,7 @@  along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/trans-openmp.cc b/gcc/fortran/trans-openmp.cc
index 5f7e29c2c644..279090f1c55d 100644
--- a/gcc/fortran/trans-openmp.cc
+++ b/gcc/fortran/trans-openmp.cc
@@ -19,6 +19,7 @@  along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/trans-stmt.cc b/gcc/fortran/trans-stmt.cc
index 81d9740b5655..e33dbe2f123e 100644
--- a/gcc/fortran/trans-stmt.cc
+++ b/gcc/fortran/trans-stmt.cc
@@ -20,6 +20,7 @@  along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/trans-types.cc b/gcc/fortran/trans-types.cc
index e596a362c023..2170869206e4 100644
--- a/gcc/fortran/trans-types.cc
+++ b/gcc/fortran/trans-types.cc
@@ -21,6 +21,7 @@  along with GCC; see the file COPYING3.  If not see
 
 /* trans-types.cc -- gfortran backend types */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fortran/trans.cc b/gcc/fortran/trans.cc
index 7182fa055985..58b93e233a1c 100644
--- a/gcc/fortran/trans.cc
+++ b/gcc/fortran/trans.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/fwprop.cc b/gcc/fwprop.cc
index 2ebb2f146cc6..8cba6b7ce9fa 100644
--- a/gcc/fwprop.cc
+++ b/gcc/fwprop.cc
@@ -20,6 +20,7 @@  along with GCC; see the file COPYING3.  If not see
 
 #define INCLUDE_ALGORITHM
 #define INCLUDE_FUNCTIONAL
+#define INCLUDE_MEMORY
 #define INCLUDE_ARRAY
 #include "config.h"
 #include "system.h"
diff --git a/gcc/gcc-plugin.h b/gcc/gcc-plugin.h
index 8eb33d6a8f54..683fc3ece3ad 100644
--- a/gcc/gcc-plugin.h
+++ b/gcc/gcc-plugin.h
@@ -24,6 +24,7 @@  along with GCC; see the file COPYING3.  If not see
 #define IN_GCC
 #endif
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gcc-rich-location.cc b/gcc/gcc-rich-location.cc
index 568744b39a31..0fa9db8e66db 100644
--- a/gcc/gcc-rich-location.cc
+++ b/gcc/gcc-rich-location.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gcc-urlifier.cc b/gcc/gcc-urlifier.cc
index be6459e8d7c1..0db5429395eb 100644
--- a/gcc/gcc-urlifier.cc
+++ b/gcc/gcc-urlifier.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
@@ -27,6 +28,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "opts.h"
 #include "options.h"
 #include "selftest.h"
+#include "make-unique.h"
 
 namespace {
 
@@ -213,10 +215,10 @@  gcc_urlifier::make_doc_url (const char *doc_url_suffix)
 
 } // anonymous namespace
 
-urlifier *
+std::unique_ptr<urlifier>
 make_gcc_urlifier (unsigned int lang_mask)
 {
-  return new gcc_urlifier (lang_mask);
+  return ::make_unique<gcc_urlifier> (lang_mask);
 }
 
 #if CHECKING_P
diff --git a/gcc/gcc-urlifier.h b/gcc/gcc-urlifier.h
index 660d4f8828e7..c4cd03cc34ae 100644
--- a/gcc/gcc-urlifier.h
+++ b/gcc/gcc-urlifier.h
@@ -21,6 +21,6 @@  along with GCC; see the file COPYING3.  If not see
 #ifndef GCC_GCC_URLIFIER_H
 #define GCC_GCC_URLIFIER_H
 
-extern urlifier *make_gcc_urlifier (unsigned int lang_mask);
+extern std::unique_ptr<urlifier> make_gcc_urlifier (unsigned int lang_mask);
 
 #endif /* GCC_GCC_URLIFIER_H */
diff --git a/gcc/gcc.cc b/gcc/gcc.cc
index 16fed46fb35f..9998fd33343f 100644
--- a/gcc/gcc.cc
+++ b/gcc/gcc.cc
@@ -27,6 +27,7 @@  CC recognizes how to compile each input file by suffixes in the file names.
 Once it knows which kind of compilation to perform, the procedure for
 compilation is specified by a string called a "spec".  */
 
+#define INCLUDE_MEMORY
 #define INCLUDE_STRING
 #include "config.h"
 #include "system.h"
@@ -41,6 +42,7 @@  compilation is specified by a string called a "spec".  */
 #include "gcc.h"
 #include "diagnostic.h"
 #include "diagnostic-format.h"
+#include "pretty-print-urlifier.h"
 #include "flags.h"
 #include "opts.h"
 #include "filenames.h"
diff --git a/gcc/gcov-dump.cc b/gcc/gcov-dump.cc
index 731172f39ee1..a511e37205c9 100644
--- a/gcc/gcov-dump.cc
+++ b/gcc/gcov-dump.cc
@@ -17,6 +17,7 @@  along with Gcov; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 #include "config.h"
+#define INCLUDE_MEMORY
 #define INCLUDE_VECTOR
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gcov-tool.cc b/gcc/gcov-tool.cc
index 100f7357bcf8..0f3c5c751102 100644
--- a/gcc/gcov-tool.cc
+++ b/gcc/gcov-tool.cc
@@ -23,6 +23,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gengtype.cc b/gcc/gengtype.cc
index c0ecbe8558b1..4cd0974966d9 100644
--- a/gcc/gengtype.cc
+++ b/gcc/gengtype.cc
@@ -1724,6 +1724,7 @@  open_base_files (void)
     outf_p gtype_desc_c;
 
     gtype_desc_c = create_file ("GCC", "gtype-desc.cc");
+    oprintf (gtype_desc_c, "#define INCLUDE_MEMORY\n");
     for (ifp = ifiles; *ifp; ifp++)
       oprintf (gtype_desc_c, "#include \"%s\"\n", *ifp);
     for (int j = 0; j < (int) num_build_headers; j++)
diff --git a/gcc/genmatch.cc b/gcc/genmatch.cc
index 6287d6a7bc2e..317d02a2a4f3 100644
--- a/gcc/genmatch.cc
+++ b/gcc/genmatch.cc
@@ -21,6 +21,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "bconfig.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gimple-fold.cc b/gcc/gimple-fold.cc
index d4ec74759902..00913bbbb11d 100644
--- a/gcc/gimple-fold.cc
+++ b/gcc/gimple-fold.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gimple-harden-conditionals.cc b/gcc/gimple-harden-conditionals.cc
index 4ab086e1ab0b..7bfa75a5bd6d 100644
--- a/gcc/gimple-harden-conditionals.cc
+++ b/gcc/gimple-harden-conditionals.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gimple-harden-control-flow.cc b/gcc/gimple-harden-control-flow.cc
index 70383e6e2658..f5654c3bb9f6 100644
--- a/gcc/gimple-harden-control-flow.cc
+++ b/gcc/gimple-harden-control-flow.cc
@@ -20,6 +20,7 @@  along with GCC; see the file COPYING3.  If not see
 
 #include "config.h"
 #define INCLUDE_ALGORITHM /* find */
+#define INCLUDE_MEMORY
 #include "system.h"
 #include "coretypes.h"
 #include "backend.h"
diff --git a/gcc/gimple-if-to-switch.cc b/gcc/gimple-if-to-switch.cc
index 96ce1c380a59..4246e12606f9 100644
--- a/gcc/gimple-if-to-switch.cc
+++ b/gcc/gimple-if-to-switch.cc
@@ -28,6 +28,7 @@  along with GCC; see the file COPYING3.  If not see
    d) We move all GIMPLE statements in the removed blocks into the
       first one.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gimple-lower-bitint.cc b/gcc/gimple-lower-bitint.cc
index 58deaf253e93..1d1e300643c7 100644
--- a/gcc/gimple-lower-bitint.cc
+++ b/gcc/gimple-lower-bitint.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gimple-predicate-analysis.cc b/gcc/gimple-predicate-analysis.cc
index 01688b8581bc..6b9043cc2dd0 100644
--- a/gcc/gimple-predicate-analysis.cc
+++ b/gcc/gimple-predicate-analysis.cc
@@ -20,6 +20,7 @@ 
    along with GCC; see the file COPYING3.  If not see
    <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #define INCLUDE_STRING
 #include "config.h"
 #include "system.h"
diff --git a/gcc/gimple-pretty-print.cc b/gcc/gimple-pretty-print.cc
index 01d7c9f6eebd..30da3af36bdf 100644
--- a/gcc/gimple-pretty-print.cc
+++ b/gcc/gimple-pretty-print.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gimple-range-cache.cc b/gcc/gimple-range-cache.cc
index 035076be5d87..4210841645c0 100644
--- a/gcc/gimple-range-cache.cc
+++ b/gcc/gimple-range-cache.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gimple-range-edge.cc b/gcc/gimple-range-edge.cc
index 0c75ad0519c0..6e082ffc9e8d 100644
--- a/gcc/gimple-range-edge.cc
+++ b/gcc/gimple-range-edge.cc
@@ -20,6 +20,7 @@  along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gimple-range-fold.cc b/gcc/gimple-range-fold.cc
index dcd0cae03517..82dd363f2eca 100644
--- a/gcc/gimple-range-fold.cc
+++ b/gcc/gimple-range-fold.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gimple-range-gori.cc b/gcc/gimple-range-gori.cc
index f2e2b5049aaa..f5103fd0e98f 100644
--- a/gcc/gimple-range-gori.cc
+++ b/gcc/gimple-range-gori.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gimple-range-infer.cc b/gcc/gimple-range-infer.cc
index 98642e2438fc..dd748248eaa5 100644
--- a/gcc/gimple-range-infer.cc
+++ b/gcc/gimple-range-infer.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gimple-range-op.cc b/gcc/gimple-range-op.cc
index 68a7df8d01bc..030030cb1562 100644
--- a/gcc/gimple-range-op.cc
+++ b/gcc/gimple-range-op.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gimple-range-path.cc b/gcc/gimple-range-path.cc
index f64a7a5e8cae..85c3d15c9039 100644
--- a/gcc/gimple-range-path.cc
+++ b/gcc/gimple-range-path.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gimple-range-phi.cc b/gcc/gimple-range-phi.cc
index c679e4ed7f29..aeb6c400ae93 100644
--- a/gcc/gimple-range-phi.cc
+++ b/gcc/gimple-range-phi.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gimple-range-trace.cc b/gcc/gimple-range-trace.cc
index e1679a1bfc9f..5302646ed49f 100644
--- a/gcc/gimple-range-trace.cc
+++ b/gcc/gimple-range-trace.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gimple-range.cc b/gcc/gimple-range.cc
index 7ba7d464b5ea..e250b26281e3 100644
--- a/gcc/gimple-range.cc
+++ b/gcc/gimple-range.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gimple-ssa-backprop.cc b/gcc/gimple-ssa-backprop.cc
index e3374b181386..ea3ae0bf0438 100644
--- a/gcc/gimple-ssa-backprop.cc
+++ b/gcc/gimple-ssa-backprop.cc
@@ -84,6 +84,7 @@  along with GCC; see the file COPYING3.  If not see
    Note that this pass does not deal with direct redundancies,
    such as cos(-x)->cos(x).  match.pd handles those cases instead.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gimple-ssa-sprintf.cc b/gcc/gimple-ssa-sprintf.cc
index 0900710647c4..2e06b9112f0b 100644
--- a/gcc/gimple-ssa-sprintf.cc
+++ b/gcc/gimple-ssa-sprintf.cc
@@ -45,6 +45,7 @@  along with GCC; see the file COPYING3.  If not see
    character arrays that a character pointer may point to as a bound
    on the longest string.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gimple-ssa-store-merging.cc b/gcc/gimple-ssa-store-merging.cc
index 7dba4a7a781f..99103076945e 100644
--- a/gcc/gimple-ssa-store-merging.cc
+++ b/gcc/gimple-ssa-store-merging.cc
@@ -138,6 +138,7 @@ 
   [p]      (32-bit) := 0x12345678; // (val & 0xffffffff0000) >> 16;
   [p + 4B] (16-bit) := 0xabcd;     //  val & 0x00000000ffff;  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gimple-ssa-strength-reduction.cc b/gcc/gimple-ssa-strength-reduction.cc
index 39cd9339c778..13e05b094de4 100644
--- a/gcc/gimple-ssa-strength-reduction.cc
+++ b/gcc/gimple-ssa-strength-reduction.cc
@@ -33,6 +33,7 @@  along with GCC; see the file COPYING3.  If not see
    If desired, it could be extended to floating-point operations under
    control of something like -funsafe-math-optimizations.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gimple-ssa-warn-access.cc b/gcc/gimple-ssa-warn-access.cc
index 950d96bf9d62..904ec2bf3243 100644
--- a/gcc/gimple-ssa-warn-access.cc
+++ b/gcc/gimple-ssa-warn-access.cc
@@ -20,6 +20,7 @@ 
    along with GCC; see the file COPYING3.  If not see
    <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #define INCLUDE_STRING
 #include "config.h"
 #include "system.h"
diff --git a/gcc/gimple-ssa-warn-alloca.cc b/gcc/gimple-ssa-warn-alloca.cc
index f12e55bc7957..c85f5c773121 100644
--- a/gcc/gimple-ssa-warn-alloca.cc
+++ b/gcc/gimple-ssa-warn-alloca.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gimple-ssa-warn-restrict.cc b/gcc/gimple-ssa-warn-restrict.cc
index d71f1331c854..4bccca52f0d1 100644
--- a/gcc/gimple-ssa-warn-restrict.cc
+++ b/gcc/gimple-ssa-warn-restrict.cc
@@ -19,6 +19,7 @@ 
    along with GCC; see the file COPYING3.  If not see
    <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gimple-streamer-in.cc b/gcc/gimple-streamer-in.cc
index 61f6d069875f..d7843c5ecaae 100644
--- a/gcc/gimple-streamer-in.cc
+++ b/gcc/gimple-streamer-in.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gimple-streamer-out.cc b/gcc/gimple-streamer-out.cc
index e63d8b4df0cc..f30f06ee720c 100644
--- a/gcc/gimple-streamer-out.cc
+++ b/gcc/gimple-streamer-out.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gimple.cc b/gcc/gimple.cc
index 6e28cf291e16..13aa3d27844d 100644
--- a/gcc/gimple.cc
+++ b/gcc/gimple.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/gimplify.cc b/gcc/gimplify.cc
index 769b880cce58..9e7a1b5eb46b 100644
--- a/gcc/gimplify.cc
+++ b/gcc/gimplify.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/go/go-backend.cc b/gcc/go/go-backend.cc
index 25e5d35e6f1e..69dbef664151 100644
--- a/gcc/go/go-backend.cc
+++ b/gcc/go/go-backend.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/go/go-lang.cc b/gcc/go/go-lang.cc
index 9316425b2aaf..42a21594f358 100644
--- a/gcc/go/go-lang.cc
+++ b/gcc/go/go-lang.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/graph.cc b/gcc/graph.cc
index 07da0798f51d..677dc50b61bc 100644
--- a/gcc/graph.cc
+++ b/gcc/graph.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/graphviz.cc b/gcc/graphviz.cc
index e41c8bc0ef38..daa970669533 100644
--- a/gcc/graphviz.cc
+++ b/gcc/graphviz.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/input.cc b/gcc/input.cc
index 9f5228d255c0..04462ef6f5a7 100644
--- a/gcc/input.cc
+++ b/gcc/input.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/ipa-cp.cc b/gcc/ipa-cp.cc
index fa7bd6a15da7..212d9ccbbfe0 100644
--- a/gcc/ipa-cp.cc
+++ b/gcc/ipa-cp.cc
@@ -101,6 +101,7 @@  along with GCC; see the file COPYING3.  If not see
    the second stage.  */
 
 #define INCLUDE_ALGORITHM
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/ipa-devirt.cc b/gcc/ipa-devirt.cc
index c406e5138db6..9f06f597e916 100644
--- a/gcc/ipa-devirt.cc
+++ b/gcc/ipa-devirt.cc
@@ -105,6 +105,7 @@  along with GCC; see the file COPYING3.  If not see
   pass_ipa_devirt performs simple speculative devirtualization.
 */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/ipa-fnsummary.cc b/gcc/ipa-fnsummary.cc
index b38247834065..42e3efc53b6d 100644
--- a/gcc/ipa-fnsummary.cc
+++ b/gcc/ipa-fnsummary.cc
@@ -52,6 +52,7 @@  along with GCC; see the file COPYING3.  If not see
    inlined performs analysis via its analyze_function method. */
 
 #include "config.h"
+#define INCLUDE_MEMORY
 #define INCLUDE_VECTOR
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/ipa-free-lang-data.cc b/gcc/ipa-free-lang-data.cc
index 3ad203fec4c2..80e30f587540 100644
--- a/gcc/ipa-free-lang-data.cc
+++ b/gcc/ipa-free-lang-data.cc
@@ -29,6 +29,7 @@ 
    It is intended to be language-independent but can occasionally
    calls language-dependent routines.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/ipa-icf-gimple.cc b/gcc/ipa-icf-gimple.cc
index 31f6cdbda060..73fc56557fe7 100644
--- a/gcc/ipa-icf-gimple.cc
+++ b/gcc/ipa-icf-gimple.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/ipa-icf.cc b/gcc/ipa-icf.cc
index b10a6baf1097..fbb241867777 100644
--- a/gcc/ipa-icf.cc
+++ b/gcc/ipa-icf.cc
@@ -51,6 +51,7 @@  along with GCC; see the file COPYING3.  If not see
 
 */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/ipa-inline-analysis.cc b/gcc/ipa-inline-analysis.cc
index a190cb6501b8..e52199872cf4 100644
--- a/gcc/ipa-inline-analysis.cc
+++ b/gcc/ipa-inline-analysis.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/ipa-inline.cc b/gcc/ipa-inline.cc
index f15e141aa527..74a0c86a5d0e 100644
--- a/gcc/ipa-inline.cc
+++ b/gcc/ipa-inline.cc
@@ -89,6 +89,7 @@  along with GCC; see the file COPYING3.  If not see
 	 This should almost always lead to reduction of code size by eliminating
 	 the need for offline copy of the function.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/ipa-modref-tree.cc b/gcc/ipa-modref-tree.cc
index 961d46621a0c..4bf7158535c5 100644
--- a/gcc/ipa-modref-tree.cc
+++ b/gcc/ipa-modref-tree.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/ipa-modref.cc b/gcc/ipa-modref.cc
index 19359662f8ff..c1973aa36c4c 100644
--- a/gcc/ipa-modref.cc
+++ b/gcc/ipa-modref.cc
@@ -53,6 +53,7 @@  along with GCC; see the file COPYING3.  If not see
        That is a vector recording what function parameters
        may escape to a function call (and with what parameter index).  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/ipa-param-manipulation.cc b/gcc/ipa-param-manipulation.cc
index ad36b8389c00..e1f6f3db2999 100644
--- a/gcc/ipa-param-manipulation.cc
+++ b/gcc/ipa-param-manipulation.cc
@@ -19,6 +19,7 @@  along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 #define INCLUDE_ALGORITHM
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/ipa-polymorphic-call.cc b/gcc/ipa-polymorphic-call.cc
index 7d3df7c474cc..eb5f1e784561 100644
--- a/gcc/ipa-polymorphic-call.cc
+++ b/gcc/ipa-polymorphic-call.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/ipa-predicate.cc b/gcc/ipa-predicate.cc
index 164aba4a1266..fbe1d6d917d0 100644
--- a/gcc/ipa-predicate.cc
+++ b/gcc/ipa-predicate.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/ipa-profile.cc b/gcc/ipa-profile.cc
index 27f411ce81a0..88e7523c0f24 100644
--- a/gcc/ipa-profile.cc
+++ b/gcc/ipa-profile.cc
@@ -37,6 +37,7 @@  along with GCC; see the file COPYING3.  If not see
      once, executed at startup and executed at exit.  These flags are used to
      control code size/performance threshold and code placement (by producing
      .text.unlikely/.text.hot/.text.startup/.text.exit subsections).  */
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/ipa-prop.cc b/gcc/ipa-prop.cc
index 78d1fb7086d5..e96ade34b34c 100644
--- a/gcc/ipa-prop.cc
+++ b/gcc/ipa-prop.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/ipa-pure-const.cc b/gcc/ipa-pure-const.cc
index b5a1dcdc154f..79fde2449d2d 100644
--- a/gcc/ipa-pure-const.cc
+++ b/gcc/ipa-pure-const.cc
@@ -31,6 +31,7 @@  along with GCC; see the file COPYING3.  If not see
    should be one of the later passes since it's information is used by
    the rest of the compilation. */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/ipa-reference.cc b/gcc/ipa-reference.cc
index 4c8a362b57b7..2930888e356a 100644
--- a/gcc/ipa-reference.cc
+++ b/gcc/ipa-reference.cc
@@ -36,6 +36,7 @@  along with GCC; see the file COPYING3.  If not see
    traumatic, promote some statics to registers, and improve aliasing
    information.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/ipa-split.cc b/gcc/ipa-split.cc
index caf6279ab218..eb1f7937a0ba 100644
--- a/gcc/ipa-split.cc
+++ b/gcc/ipa-split.cc
@@ -74,6 +74,7 @@  along with GCC; see the file COPYING3.  If not see
    7) There is nothing preventing us from producing multiple parts of single function
       when needed or splitting also the parts.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/ipa-sra.cc b/gcc/ipa-sra.cc
index 04920f2aa8e4..585ba53ce63e 100644
--- a/gcc/ipa-sra.cc
+++ b/gcc/ipa-sra.cc
@@ -56,6 +56,7 @@  along with GCC; see the file COPYING3.  If not see
    ipa-param-manipulation.h for more details.  */
 
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/ipa-strub.cc b/gcc/ipa-strub.cc
index 8fa7bdf53002..6dbef204de60 100644
--- a/gcc/ipa-strub.cc
+++ b/gcc/ipa-strub.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/ipa-utils.cc b/gcc/ipa-utils.cc
index 2366fa778d15..38dd47047931 100644
--- a/gcc/ipa-utils.cc
+++ b/gcc/ipa-utils.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/jit/dummy-frontend.cc b/gcc/jit/dummy-frontend.cc
index 17f37a3f405a..12167829b277 100644
--- a/gcc/jit/dummy-frontend.cc
+++ b/gcc/jit/dummy-frontend.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/jit/jit-playback.cc b/gcc/jit/jit-playback.cc
index 583956fb4635..e732c2287518 100644
--- a/gcc/jit/jit-playback.cc
+++ b/gcc/jit/jit-playback.cc
@@ -19,6 +19,7 @@  along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 #include "config.h"
+#define INCLUDE_MEMORY
 #define INCLUDE_MUTEX
 #include "libgccjit.h"
 #include "system.h"
diff --git a/gcc/jit/jit-recording.cc b/gcc/jit/jit-recording.cc
index cc7f529c9e8a..83a36db653de 100644
--- a/gcc/jit/jit-recording.cc
+++ b/gcc/jit/jit-recording.cc
@@ -19,6 +19,7 @@  along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 #include "config.h"
+#define INCLUDE_MEMORY
 #define INCLUDE_SSTREAM
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/langhooks.cc b/gcc/langhooks.cc
index 54fc94e4364e..fe32be449560 100644
--- a/gcc/langhooks.cc
+++ b/gcc/langhooks.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/late-combine.cc b/gcc/late-combine.cc
index 1d81b386c3d6..1b6cd0bea2c1 100644
--- a/gcc/late-combine.cc
+++ b/gcc/late-combine.cc
@@ -30,6 +30,7 @@ 
 
 #define INCLUDE_ALGORITHM
 #define INCLUDE_FUNCTIONAL
+#define INCLUDE_MEMORY
 #define INCLUDE_ARRAY
 #include "config.h"
 #include "system.h"
diff --git a/gcc/lto-cgraph.cc b/gcc/lto-cgraph.cc
index 1d4311a8832b..e1d19f909dd6 100644
--- a/gcc/lto-cgraph.cc
+++ b/gcc/lto-cgraph.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/lto-compress.cc b/gcc/lto-compress.cc
index bebf0277ef67..1895bb433458 100644
--- a/gcc/lto-compress.cc
+++ b/gcc/lto-compress.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/lto-opts.cc b/gcc/lto-opts.cc
index a3a1d110329c..93ac83081f63 100644
--- a/gcc/lto-opts.cc
+++ b/gcc/lto-opts.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/lto-section-in.cc b/gcc/lto-section-in.cc
index fc2ba1906e19..22c203b22625 100644
--- a/gcc/lto-section-in.cc
+++ b/gcc/lto-section-in.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/lto-section-out.cc b/gcc/lto-section-out.cc
index d9c42653713f..c05e97133b74 100644
--- a/gcc/lto-section-out.cc
+++ b/gcc/lto-section-out.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/lto-streamer-in.cc b/gcc/lto-streamer-in.cc
index 15181c3f5746..c541a0524c8f 100644
--- a/gcc/lto-streamer-in.cc
+++ b/gcc/lto-streamer-in.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/lto-streamer-out.cc b/gcc/lto-streamer-out.cc
index a464c2d5ddf1..fab0702f99b9 100644
--- a/gcc/lto-streamer-out.cc
+++ b/gcc/lto-streamer-out.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/lto-streamer.cc b/gcc/lto-streamer.cc
index 40ca6b2da1b8..884861d4dd15 100644
--- a/gcc/lto-streamer.cc
+++ b/gcc/lto-streamer.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/lto-wrapper.cc b/gcc/lto-wrapper.cc
index 9d7fe18b2296..a8bf847eb8c4 100644
--- a/gcc/lto-wrapper.cc
+++ b/gcc/lto-wrapper.cc
@@ -37,6 +37,7 @@  along with GCC; see the file COPYING3.  If not see
    ./ccCJuXGv.lto.ltrans.o
 */
 
+#define INCLUDE_MEMORY
 #define INCLUDE_STRING
 #include "config.h"
 #include "system.h"
@@ -52,6 +53,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "opts-diagnostic.h"
 #include "opt-suggestions.h"
 #include "opts-jobserver.h"
+#include "make-unique.h"
 
 /* Environment variable, used for passing the names of offload targets from GCC
    driver to lto-wrapper.  */
@@ -2174,7 +2176,8 @@  main (int argc, char *argv[])
   diagnostic_initialize (global_dc, 0);
   diagnostic_color_init (global_dc);
   diagnostic_urls_init (global_dc);
-  global_dc->set_option_manager (new lto_diagnostic_option_manager (), 0);
+  global_dc->set_option_manager
+    (::make_unique<lto_diagnostic_option_manager> (), 0);
 
   if (atexit (lto_wrapper_cleanup) != 0)
     fatal_error (input_location, "%<atexit%> failed");
diff --git a/gcc/lto/lto-common.cc b/gcc/lto/lto-common.cc
index 34aa63b179cd..77607751db52 100644
--- a/gcc/lto/lto-common.cc
+++ b/gcc/lto/lto-common.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/lto/lto-dump.cc b/gcc/lto/lto-dump.cc
index b570bccf8edd..be869c29431a 100644
--- a/gcc/lto/lto-dump.cc
+++ b/gcc/lto/lto-dump.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/lto/lto-partition.cc b/gcc/lto/lto-partition.cc
index 2238650fa0eb..2267b4edaf4f 100644
--- a/gcc/lto/lto-partition.cc
+++ b/gcc/lto/lto-partition.cc
@@ -18,6 +18,7 @@  along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 #include "config.h"
+#define INCLUDE_MEMORY
 #define INCLUDE_VECTOR
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/lto/lto-symtab.cc b/gcc/lto/lto-symtab.cc
index a40218beac55..b12937c6a0ad 100644
--- a/gcc/lto/lto-symtab.cc
+++ b/gcc/lto/lto-symtab.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/lto/lto.cc b/gcc/lto/lto.cc
index 1ee215d8f1d3..e5b24f243704 100644
--- a/gcc/lto/lto.cc
+++ b/gcc/lto/lto.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #define INCLUDE_STRING
 #include "config.h"
 #include "system.h"
diff --git a/gcc/m2/gm2-gcc/gcc-consolidation.h b/gcc/m2/gm2-gcc/gcc-consolidation.h
index 637ec0bcc54e..e0a94eeb279d 100644
--- a/gcc/m2/gm2-gcc/gcc-consolidation.h
+++ b/gcc/m2/gm2-gcc/gcc-consolidation.h
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GNU Modula-2; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/m2/gm2-gcc/m2configure.cc b/gcc/m2/gm2-gcc/m2configure.cc
index 9e0e82f86c01..d55d6c25e8fd 100644
--- a/gcc/m2/gm2-gcc/m2configure.cc
+++ b/gcc/m2/gm2-gcc/m2configure.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GNU Modula-2; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "libiberty.h"
diff --git a/gcc/m2/mc-boot/GASCII.cc b/gcc/m2/mc-boot/GASCII.cc
index a5c59fd3c4b8..76e1dd901edd 100644
--- a/gcc/m2/mc-boot/GASCII.cc
+++ b/gcc/m2/mc-boot/GASCII.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GASCII.h b/gcc/m2/mc-boot/GASCII.h
index c157a8b7686e..76c961a9d57d 100644
--- a/gcc/m2/mc-boot/GASCII.h
+++ b/gcc/m2/mc-boot/GASCII.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_ASCII_H)
 #   define _ASCII_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GArgs.cc b/gcc/m2/mc-boot/GArgs.cc
index 182def800ea0..8fc16a4ebea1 100644
--- a/gcc/m2/mc-boot/GArgs.cc
+++ b/gcc/m2/mc-boot/GArgs.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GArgs.h b/gcc/m2/mc-boot/GArgs.h
index 1171cef8d72f..752345f691cf 100644
--- a/gcc/m2/mc-boot/GArgs.h
+++ b/gcc/m2/mc-boot/GArgs.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_Args_H)
 #   define _Args_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GAssertion.cc b/gcc/m2/mc-boot/GAssertion.cc
index b6b47952108b..34989b9737f0 100644
--- a/gcc/m2/mc-boot/GAssertion.cc
+++ b/gcc/m2/mc-boot/GAssertion.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GAssertion.h b/gcc/m2/mc-boot/GAssertion.h
index d909fdee7a37..c5bcdd98d370 100644
--- a/gcc/m2/mc-boot/GAssertion.h
+++ b/gcc/m2/mc-boot/GAssertion.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_Assertion_H)
 #   define _Assertion_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GBreak.cc b/gcc/m2/mc-boot/GBreak.cc
index 4fea839214bd..ffbe2f172a57 100644
--- a/gcc/m2/mc-boot/GBreak.cc
+++ b/gcc/m2/mc-boot/GBreak.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GBreak.h b/gcc/m2/mc-boot/GBreak.h
index bd2f1ccf6f17..df0ee16b5eda 100644
--- a/gcc/m2/mc-boot/GBreak.h
+++ b/gcc/m2/mc-boot/GBreak.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_Break_H)
 #   define _Break_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GCOROUTINES.h b/gcc/m2/mc-boot/GCOROUTINES.h
index a744d9c6ebe0..dff08a0c185a 100644
--- a/gcc/m2/mc-boot/GCOROUTINES.h
+++ b/gcc/m2/mc-boot/GCOROUTINES.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_COROUTINES_H)
 #   define _COROUTINES_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GCmdArgs.cc b/gcc/m2/mc-boot/GCmdArgs.cc
index cb8fa8ace587..0e33d916051d 100644
--- a/gcc/m2/mc-boot/GCmdArgs.cc
+++ b/gcc/m2/mc-boot/GCmdArgs.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GCmdArgs.h b/gcc/m2/mc-boot/GCmdArgs.h
index 7f39815bc093..852e8dc00370 100644
--- a/gcc/m2/mc-boot/GCmdArgs.h
+++ b/gcc/m2/mc-boot/GCmdArgs.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_CmdArgs_H)
 #   define _CmdArgs_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GDebug.cc b/gcc/m2/mc-boot/GDebug.cc
index 3f0ec51507e4..edda6c952c56 100644
--- a/gcc/m2/mc-boot/GDebug.cc
+++ b/gcc/m2/mc-boot/GDebug.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GDebug.h b/gcc/m2/mc-boot/GDebug.h
index 8787752b9a35..08c4da1abed2 100644
--- a/gcc/m2/mc-boot/GDebug.h
+++ b/gcc/m2/mc-boot/GDebug.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_Debug_H)
 #   define _Debug_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GDynamicStrings.cc b/gcc/m2/mc-boot/GDynamicStrings.cc
index 2b182b9b2c0d..bccbeda2f23d 100644
--- a/gcc/m2/mc-boot/GDynamicStrings.cc
+++ b/gcc/m2/mc-boot/GDynamicStrings.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GDynamicStrings.h b/gcc/m2/mc-boot/GDynamicStrings.h
index e0652a7d3bd0..fefce9d6f6bc 100644
--- a/gcc/m2/mc-boot/GDynamicStrings.h
+++ b/gcc/m2/mc-boot/GDynamicStrings.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_DynamicStrings_H)
 #   define _DynamicStrings_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GEnvironment.cc b/gcc/m2/mc-boot/GEnvironment.cc
index aad1bb46c010..95dab816595b 100644
--- a/gcc/m2/mc-boot/GEnvironment.cc
+++ b/gcc/m2/mc-boot/GEnvironment.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GEnvironment.h b/gcc/m2/mc-boot/GEnvironment.h
index 4f94d583334b..2da03aeba753 100644
--- a/gcc/m2/mc-boot/GEnvironment.h
+++ b/gcc/m2/mc-boot/GEnvironment.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_Environment_H)
 #   define _Environment_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GFIO.cc b/gcc/m2/mc-boot/GFIO.cc
index b05c33000bd8..45a39d661161 100644
--- a/gcc/m2/mc-boot/GFIO.cc
+++ b/gcc/m2/mc-boot/GFIO.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GFIO.h b/gcc/m2/mc-boot/GFIO.h
index d82396449ffe..04cbc768505e 100644
--- a/gcc/m2/mc-boot/GFIO.h
+++ b/gcc/m2/mc-boot/GFIO.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_FIO_H)
 #   define _FIO_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GFormatStrings.cc b/gcc/m2/mc-boot/GFormatStrings.cc
index d3acec3bc6c2..36998f693c5f 100644
--- a/gcc/m2/mc-boot/GFormatStrings.cc
+++ b/gcc/m2/mc-boot/GFormatStrings.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GFormatStrings.h b/gcc/m2/mc-boot/GFormatStrings.h
index 1d8ce34ce62c..858403d5690e 100644
--- a/gcc/m2/mc-boot/GFormatStrings.h
+++ b/gcc/m2/mc-boot/GFormatStrings.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_FormatStrings_H)
 #   define _FormatStrings_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GFpuIO.cc b/gcc/m2/mc-boot/GFpuIO.cc
index 09fd4fb95cdf..3c4fb6121dc1 100644
--- a/gcc/m2/mc-boot/GFpuIO.cc
+++ b/gcc/m2/mc-boot/GFpuIO.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GFpuIO.h b/gcc/m2/mc-boot/GFpuIO.h
index 5d8306061301..1e0575b7f826 100644
--- a/gcc/m2/mc-boot/GFpuIO.h
+++ b/gcc/m2/mc-boot/GFpuIO.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_FpuIO_H)
 #   define _FpuIO_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GIO.cc b/gcc/m2/mc-boot/GIO.cc
index 4b76ed6bc80c..76495e745fd4 100644
--- a/gcc/m2/mc-boot/GIO.cc
+++ b/gcc/m2/mc-boot/GIO.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GIO.h b/gcc/m2/mc-boot/GIO.h
index 4f4af9a59a02..3e58ea5cff26 100644
--- a/gcc/m2/mc-boot/GIO.h
+++ b/gcc/m2/mc-boot/GIO.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_IO_H)
 #   define _IO_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GIndexing.cc b/gcc/m2/mc-boot/GIndexing.cc
index dd314001108c..4dfccd2f9915 100644
--- a/gcc/m2/mc-boot/GIndexing.cc
+++ b/gcc/m2/mc-boot/GIndexing.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GIndexing.h b/gcc/m2/mc-boot/GIndexing.h
index b986469c331f..e2e728c25667 100644
--- a/gcc/m2/mc-boot/GIndexing.h
+++ b/gcc/m2/mc-boot/GIndexing.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_Indexing_H)
 #   define _Indexing_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GM2Dependent.cc b/gcc/m2/mc-boot/GM2Dependent.cc
index c965f4bf7f3c..f4fe04cd2b69 100644
--- a/gcc/m2/mc-boot/GM2Dependent.cc
+++ b/gcc/m2/mc-boot/GM2Dependent.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GM2Dependent.h b/gcc/m2/mc-boot/GM2Dependent.h
index 0353236f8c1c..3b32e165a48f 100644
--- a/gcc/m2/mc-boot/GM2Dependent.h
+++ b/gcc/m2/mc-boot/GM2Dependent.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_M2Dependent_H)
 #   define _M2Dependent_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GM2EXCEPTION.cc b/gcc/m2/mc-boot/GM2EXCEPTION.cc
index 97417cf6c82a..af1218f922a6 100644
--- a/gcc/m2/mc-boot/GM2EXCEPTION.cc
+++ b/gcc/m2/mc-boot/GM2EXCEPTION.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GM2EXCEPTION.h b/gcc/m2/mc-boot/GM2EXCEPTION.h
index 4ee5404733c2..fef5e2b1740e 100644
--- a/gcc/m2/mc-boot/GM2EXCEPTION.h
+++ b/gcc/m2/mc-boot/GM2EXCEPTION.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_M2EXCEPTION_H)
 #   define _M2EXCEPTION_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GM2RTS.cc b/gcc/m2/mc-boot/GM2RTS.cc
index ef5f7cf5ce1e..844006ac5297 100644
--- a/gcc/m2/mc-boot/GM2RTS.cc
+++ b/gcc/m2/mc-boot/GM2RTS.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GM2RTS.h b/gcc/m2/mc-boot/GM2RTS.h
index 055cc95675ba..88e21849c059 100644
--- a/gcc/m2/mc-boot/GM2RTS.h
+++ b/gcc/m2/mc-boot/GM2RTS.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_M2RTS_H)
 #   define _M2RTS_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GMemUtils.cc b/gcc/m2/mc-boot/GMemUtils.cc
index 1d9feed27d60..04474ecbf39a 100644
--- a/gcc/m2/mc-boot/GMemUtils.cc
+++ b/gcc/m2/mc-boot/GMemUtils.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GMemUtils.h b/gcc/m2/mc-boot/GMemUtils.h
index 1d23091ce93a..dea7aafda6dd 100644
--- a/gcc/m2/mc-boot/GMemUtils.h
+++ b/gcc/m2/mc-boot/GMemUtils.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_MemUtils_H)
 #   define _MemUtils_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GNumberIO.cc b/gcc/m2/mc-boot/GNumberIO.cc
index 75720dd85e6e..15b3be191f0c 100644
--- a/gcc/m2/mc-boot/GNumberIO.cc
+++ b/gcc/m2/mc-boot/GNumberIO.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GNumberIO.h b/gcc/m2/mc-boot/GNumberIO.h
index 34aee3373836..decd31b4dd84 100644
--- a/gcc/m2/mc-boot/GNumberIO.h
+++ b/gcc/m2/mc-boot/GNumberIO.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_NumberIO_H)
 #   define _NumberIO_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GPushBackInput.cc b/gcc/m2/mc-boot/GPushBackInput.cc
index 9bc2a83abd45..5c50f967c18e 100644
--- a/gcc/m2/mc-boot/GPushBackInput.cc
+++ b/gcc/m2/mc-boot/GPushBackInput.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GPushBackInput.h b/gcc/m2/mc-boot/GPushBackInput.h
index 076b99657a07..27c572b53e0c 100644
--- a/gcc/m2/mc-boot/GPushBackInput.h
+++ b/gcc/m2/mc-boot/GPushBackInput.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_PushBackInput_H)
 #   define _PushBackInput_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GRTExceptions.cc b/gcc/m2/mc-boot/GRTExceptions.cc
index a0eff3ecc8af..d42c1f311079 100644
--- a/gcc/m2/mc-boot/GRTExceptions.cc
+++ b/gcc/m2/mc-boot/GRTExceptions.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GRTExceptions.h b/gcc/m2/mc-boot/GRTExceptions.h
index 9e188bcbad4d..b335d800ca6a 100644
--- a/gcc/m2/mc-boot/GRTExceptions.h
+++ b/gcc/m2/mc-boot/GRTExceptions.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_RTExceptions_H)
 #   define _RTExceptions_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GRTco.h b/gcc/m2/mc-boot/GRTco.h
index 778b75f3d2e2..2e014d333cfe 100644
--- a/gcc/m2/mc-boot/GRTco.h
+++ b/gcc/m2/mc-boot/GRTco.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_RTco_H)
 #   define _RTco_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GRTentity.h b/gcc/m2/mc-boot/GRTentity.h
index 9acb07755755..3eb8822fc9d5 100644
--- a/gcc/m2/mc-boot/GRTentity.h
+++ b/gcc/m2/mc-boot/GRTentity.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_RTentity_H)
 #   define _RTentity_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GRTint.cc b/gcc/m2/mc-boot/GRTint.cc
index 11b4228074a4..f1c268843c82 100644
--- a/gcc/m2/mc-boot/GRTint.cc
+++ b/gcc/m2/mc-boot/GRTint.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GRTint.h b/gcc/m2/mc-boot/GRTint.h
index 4f81546e8d61..a9fb9d182ec8 100644
--- a/gcc/m2/mc-boot/GRTint.h
+++ b/gcc/m2/mc-boot/GRTint.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_RTint_H)
 #   define _RTint_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GSArgs.cc b/gcc/m2/mc-boot/GSArgs.cc
index 93083a056dc3..0c99f2d2594b 100644
--- a/gcc/m2/mc-boot/GSArgs.cc
+++ b/gcc/m2/mc-boot/GSArgs.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GSArgs.h b/gcc/m2/mc-boot/GSArgs.h
index a7b10bf4a1f3..6a12e7ec4f3e 100644
--- a/gcc/m2/mc-boot/GSArgs.h
+++ b/gcc/m2/mc-boot/GSArgs.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_SArgs_H)
 #   define _SArgs_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GSFIO.cc b/gcc/m2/mc-boot/GSFIO.cc
index b568cce23ebf..232d3f5883e3 100644
--- a/gcc/m2/mc-boot/GSFIO.cc
+++ b/gcc/m2/mc-boot/GSFIO.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GSFIO.h b/gcc/m2/mc-boot/GSFIO.h
index 108d8ea79f06..bba25eb84367 100644
--- a/gcc/m2/mc-boot/GSFIO.h
+++ b/gcc/m2/mc-boot/GSFIO.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_SFIO_H)
 #   define _SFIO_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GSYSTEM.h b/gcc/m2/mc-boot/GSYSTEM.h
index a18a1765dc53..ff4b7b24ac3b 100644
--- a/gcc/m2/mc-boot/GSYSTEM.h
+++ b/gcc/m2/mc-boot/GSYSTEM.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_SYSTEM_H)
 #   define _SYSTEM_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GSelective.h b/gcc/m2/mc-boot/GSelective.h
index 67b7f0643f05..17e926d1a448 100644
--- a/gcc/m2/mc-boot/GSelective.h
+++ b/gcc/m2/mc-boot/GSelective.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_Selective_H)
 #   define _Selective_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GStdIO.cc b/gcc/m2/mc-boot/GStdIO.cc
index c9d3774ec061..ddcb8ec040ab 100644
--- a/gcc/m2/mc-boot/GStdIO.cc
+++ b/gcc/m2/mc-boot/GStdIO.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GStdIO.h b/gcc/m2/mc-boot/GStdIO.h
index 0a45ebc7e345..3c84cede87b2 100644
--- a/gcc/m2/mc-boot/GStdIO.h
+++ b/gcc/m2/mc-boot/GStdIO.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_StdIO_H)
 #   define _StdIO_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GStorage.cc b/gcc/m2/mc-boot/GStorage.cc
index 67e7a8b7274b..24ced14ce6aa 100644
--- a/gcc/m2/mc-boot/GStorage.cc
+++ b/gcc/m2/mc-boot/GStorage.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GStorage.h b/gcc/m2/mc-boot/GStorage.h
index 8c26b465b2cb..a119a8f6e58d 100644
--- a/gcc/m2/mc-boot/GStorage.h
+++ b/gcc/m2/mc-boot/GStorage.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_Storage_H)
 #   define _Storage_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GStrCase.cc b/gcc/m2/mc-boot/GStrCase.cc
index 9492774596ba..03993e5fbd68 100644
--- a/gcc/m2/mc-boot/GStrCase.cc
+++ b/gcc/m2/mc-boot/GStrCase.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GStrCase.h b/gcc/m2/mc-boot/GStrCase.h
index c3f064728d8b..9fd23285525c 100644
--- a/gcc/m2/mc-boot/GStrCase.h
+++ b/gcc/m2/mc-boot/GStrCase.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_StrCase_H)
 #   define _StrCase_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GStrIO.cc b/gcc/m2/mc-boot/GStrIO.cc
index d0c6e2085cd1..7e94ef521ea8 100644
--- a/gcc/m2/mc-boot/GStrIO.cc
+++ b/gcc/m2/mc-boot/GStrIO.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GStrIO.h b/gcc/m2/mc-boot/GStrIO.h
index 2ed2ac33f119..653e020d3999 100644
--- a/gcc/m2/mc-boot/GStrIO.h
+++ b/gcc/m2/mc-boot/GStrIO.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_StrIO_H)
 #   define _StrIO_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GStrLib.cc b/gcc/m2/mc-boot/GStrLib.cc
index dc6d0ff2aa07..19ac230e9a46 100644
--- a/gcc/m2/mc-boot/GStrLib.cc
+++ b/gcc/m2/mc-boot/GStrLib.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GStrLib.h b/gcc/m2/mc-boot/GStrLib.h
index b292d8990a14..ddd7457a6ffa 100644
--- a/gcc/m2/mc-boot/GStrLib.h
+++ b/gcc/m2/mc-boot/GStrLib.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_StrLib_H)
 #   define _StrLib_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GStringConvert.cc b/gcc/m2/mc-boot/GStringConvert.cc
index 80efd0c9fc48..822813cd1417 100644
--- a/gcc/m2/mc-boot/GStringConvert.cc
+++ b/gcc/m2/mc-boot/GStringConvert.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GStringConvert.h b/gcc/m2/mc-boot/GStringConvert.h
index 284eef236cc8..3983d6cc3754 100644
--- a/gcc/m2/mc-boot/GStringConvert.h
+++ b/gcc/m2/mc-boot/GStringConvert.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_StringConvert_H)
 #   define _StringConvert_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GSysExceptions.h b/gcc/m2/mc-boot/GSysExceptions.h
index 00dd52117d1b..eee2631c8bea 100644
--- a/gcc/m2/mc-boot/GSysExceptions.h
+++ b/gcc/m2/mc-boot/GSysExceptions.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_SysExceptions_H)
 #   define _SysExceptions_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GSysStorage.cc b/gcc/m2/mc-boot/GSysStorage.cc
index 1ef723074d46..fe06a5d87751 100644
--- a/gcc/m2/mc-boot/GSysStorage.cc
+++ b/gcc/m2/mc-boot/GSysStorage.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GSysStorage.h b/gcc/m2/mc-boot/GSysStorage.h
index 639f6811e197..2aa6f85aaffc 100644
--- a/gcc/m2/mc-boot/GSysStorage.h
+++ b/gcc/m2/mc-boot/GSysStorage.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_SysStorage_H)
 #   define _SysStorage_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GTimeString.cc b/gcc/m2/mc-boot/GTimeString.cc
index af7b7e40814e..37405659be0b 100644
--- a/gcc/m2/mc-boot/GTimeString.cc
+++ b/gcc/m2/mc-boot/GTimeString.cc
@@ -25,6 +25,7 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GTimeString.h b/gcc/m2/mc-boot/GTimeString.h
index 7ba51f8081ea..27d128769f57 100644
--- a/gcc/m2/mc-boot/GTimeString.h
+++ b/gcc/m2/mc-boot/GTimeString.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_TimeString_H)
 #   define _TimeString_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GUnixArgs.h b/gcc/m2/mc-boot/GUnixArgs.h
index cf9756ea177f..6c04a944825d 100644
--- a/gcc/m2/mc-boot/GUnixArgs.h
+++ b/gcc/m2/mc-boot/GUnixArgs.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_UnixArgs_H)
 #   define _UnixArgs_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/Galists.cc b/gcc/m2/mc-boot/Galists.cc
index ca582f3ce43a..a2ad92238b79 100644
--- a/gcc/m2/mc-boot/Galists.cc
+++ b/gcc/m2/mc-boot/Galists.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GNU Modula-2; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/Galists.h b/gcc/m2/mc-boot/Galists.h
index 3ed524152f42..3bb6599422ca 100644
--- a/gcc/m2/mc-boot/Galists.h
+++ b/gcc/m2/mc-boot/Galists.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_alists_H)
 #   define _alists_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/Gdecl.cc b/gcc/m2/mc-boot/Gdecl.cc
index 9af2842ca18d..0878f7de29b4 100644
--- a/gcc/m2/mc-boot/Gdecl.cc
+++ b/gcc/m2/mc-boot/Gdecl.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GNU Modula-2; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/Gdecl.h b/gcc/m2/mc-boot/Gdecl.h
index 99d78087ae2a..8b7aa91b38a3 100644
--- a/gcc/m2/mc-boot/Gdecl.h
+++ b/gcc/m2/mc-boot/Gdecl.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_decl_H)
 #   define _decl_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/Gdtoa.h b/gcc/m2/mc-boot/Gdtoa.h
index c1b3619ce475..d06a03480f91 100644
--- a/gcc/m2/mc-boot/Gdtoa.h
+++ b/gcc/m2/mc-boot/Gdtoa.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_dtoa_H)
 #   define _dtoa_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/Gerrno.h b/gcc/m2/mc-boot/Gerrno.h
index 7f065ccb24d7..9d315c3d2cef 100644
--- a/gcc/m2/mc-boot/Gerrno.h
+++ b/gcc/m2/mc-boot/Gerrno.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_errno_H)
 #   define _errno_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/Gkeyc.cc b/gcc/m2/mc-boot/Gkeyc.cc
index 3a5dd5ccc1de..a56abc56ee34 100644
--- a/gcc/m2/mc-boot/Gkeyc.cc
+++ b/gcc/m2/mc-boot/Gkeyc.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
@@ -575,6 +576,7 @@  static void checkGccConfigSystem (mcPretty_pretty p)
       if (! initializedGCC)
         {
           initializedGCC = true;
+          mcPretty_print (p, (const char *) "#define INCLUDE_MEMORY\\n", 24);
           mcPretty_print (p, (const char *) "#include \"config.h\"\\n", 21);
           mcPretty_print (p, (const char *) "#include \"system.h\"\\n", 21);
           checkGccTypes (p);
diff --git a/gcc/m2/mc-boot/Gkeyc.h b/gcc/m2/mc-boot/Gkeyc.h
index afa945d03c02..f0911ee8488e 100644
--- a/gcc/m2/mc-boot/Gkeyc.h
+++ b/gcc/m2/mc-boot/Gkeyc.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_keyc_H)
 #   define _keyc_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/Gldtoa.h b/gcc/m2/mc-boot/Gldtoa.h
index c4b4d904fb0c..a8f72ea4bd16 100644
--- a/gcc/m2/mc-boot/Gldtoa.h
+++ b/gcc/m2/mc-boot/Gldtoa.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_ldtoa_H)
 #   define _ldtoa_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/Glibc.h b/gcc/m2/mc-boot/Glibc.h
index def419fb3c9a..50384ecf8979 100644
--- a/gcc/m2/mc-boot/Glibc.h
+++ b/gcc/m2/mc-boot/Glibc.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_libc_H)
 #   define _libc_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/Glibm.h b/gcc/m2/mc-boot/Glibm.h
index d3c9415070c1..19ee9e599ce0 100644
--- a/gcc/m2/mc-boot/Glibm.h
+++ b/gcc/m2/mc-boot/Glibm.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_libm_H)
 #   define _libm_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/Glists.cc b/gcc/m2/mc-boot/Glists.cc
index e33c91d85005..d354e867e778 100644
--- a/gcc/m2/mc-boot/Glists.cc
+++ b/gcc/m2/mc-boot/Glists.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/Glists.h b/gcc/m2/mc-boot/Glists.h
index 5cb8058415cc..e8414b080fe7 100644
--- a/gcc/m2/mc-boot/Glists.h
+++ b/gcc/m2/mc-boot/Glists.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_lists_H)
 #   define _lists_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GmcComment.cc b/gcc/m2/mc-boot/GmcComment.cc
index 4c7650283ec2..6b27d93e6fa5 100644
--- a/gcc/m2/mc-boot/GmcComment.cc
+++ b/gcc/m2/mc-boot/GmcComment.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GNU Modula-2; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GmcComment.h b/gcc/m2/mc-boot/GmcComment.h
index 39ba8c21595a..57952a1cec2e 100644
--- a/gcc/m2/mc-boot/GmcComment.h
+++ b/gcc/m2/mc-boot/GmcComment.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_mcComment_H)
 #   define _mcComment_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GmcComp.cc b/gcc/m2/mc-boot/GmcComp.cc
index c941c618030d..ca192aa7456b 100644
--- a/gcc/m2/mc-boot/GmcComp.cc
+++ b/gcc/m2/mc-boot/GmcComp.cc
@@ -16,6 +16,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GmcComp.h b/gcc/m2/mc-boot/GmcComp.h
index 9ab78a54723c..088b6636f96e 100644
--- a/gcc/m2/mc-boot/GmcComp.h
+++ b/gcc/m2/mc-boot/GmcComp.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_mcComp_H)
 #   define _mcComp_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GmcDebug.cc b/gcc/m2/mc-boot/GmcDebug.cc
index 0085384f2c98..7ded4aee139f 100644
--- a/gcc/m2/mc-boot/GmcDebug.cc
+++ b/gcc/m2/mc-boot/GmcDebug.cc
@@ -15,6 +15,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GmcDebug.h b/gcc/m2/mc-boot/GmcDebug.h
index e8ec34b2be47..8de6dc46e7e0 100644
--- a/gcc/m2/mc-boot/GmcDebug.h
+++ b/gcc/m2/mc-boot/GmcDebug.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_mcDebug_H)
 #   define _mcDebug_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GmcError.cc b/gcc/m2/mc-boot/GmcError.cc
index 5893201913fe..cb5e30fa8cc1 100644
--- a/gcc/m2/mc-boot/GmcError.cc
+++ b/gcc/m2/mc-boot/GmcError.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GNU Modula-2; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GmcError.h b/gcc/m2/mc-boot/GmcError.h
index 6a62fcd540fa..0c369b2d0068 100644
--- a/gcc/m2/mc-boot/GmcError.h
+++ b/gcc/m2/mc-boot/GmcError.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_mcError_H)
 #   define _mcError_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GmcFileName.cc b/gcc/m2/mc-boot/GmcFileName.cc
index 3b516594c595..f0f69129e06c 100644
--- a/gcc/m2/mc-boot/GmcFileName.cc
+++ b/gcc/m2/mc-boot/GmcFileName.cc
@@ -15,6 +15,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GmcFileName.h b/gcc/m2/mc-boot/GmcFileName.h
index a5a9afa8376c..42c05b970900 100644
--- a/gcc/m2/mc-boot/GmcFileName.h
+++ b/gcc/m2/mc-boot/GmcFileName.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_mcFileName_H)
 #   define _mcFileName_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GmcLexBuf.cc b/gcc/m2/mc-boot/GmcLexBuf.cc
index 4cbd54429d11..39860c25ff7e 100644
--- a/gcc/m2/mc-boot/GmcLexBuf.cc
+++ b/gcc/m2/mc-boot/GmcLexBuf.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GNU Modula-2; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GmcLexBuf.h b/gcc/m2/mc-boot/GmcLexBuf.h
index ca71dd83adb0..714d0491b00a 100644
--- a/gcc/m2/mc-boot/GmcLexBuf.h
+++ b/gcc/m2/mc-boot/GmcLexBuf.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_mcLexBuf_H)
 #   define _mcLexBuf_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GmcMetaError.cc b/gcc/m2/mc-boot/GmcMetaError.cc
index af64604534e2..9298d0e41927 100644
--- a/gcc/m2/mc-boot/GmcMetaError.cc
+++ b/gcc/m2/mc-boot/GmcMetaError.cc
@@ -15,6 +15,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GmcMetaError.h b/gcc/m2/mc-boot/GmcMetaError.h
index a3c19c4c3a39..78dc1287905a 100644
--- a/gcc/m2/mc-boot/GmcMetaError.h
+++ b/gcc/m2/mc-boot/GmcMetaError.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_mcMetaError_H)
 #   define _mcMetaError_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GmcOptions.cc b/gcc/m2/mc-boot/GmcOptions.cc
index 5a0606047092..f6e4417b6593 100644
--- a/gcc/m2/mc-boot/GmcOptions.cc
+++ b/gcc/m2/mc-boot/GmcOptions.cc
@@ -15,6 +15,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GmcOptions.h b/gcc/m2/mc-boot/GmcOptions.h
index 4bb82ecfbe2b..b2ead1e4b41f 100644
--- a/gcc/m2/mc-boot/GmcOptions.h
+++ b/gcc/m2/mc-boot/GmcOptions.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_mcOptions_H)
 #   define _mcOptions_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GmcPreprocess.cc b/gcc/m2/mc-boot/GmcPreprocess.cc
index 741109ad7fbf..54d89bf33e75 100644
--- a/gcc/m2/mc-boot/GmcPreprocess.cc
+++ b/gcc/m2/mc-boot/GmcPreprocess.cc
@@ -15,6 +15,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GmcPreprocess.h b/gcc/m2/mc-boot/GmcPreprocess.h
index f12c781d1738..fcbd0c3dfd59 100644
--- a/gcc/m2/mc-boot/GmcPreprocess.h
+++ b/gcc/m2/mc-boot/GmcPreprocess.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_mcPreprocess_H)
 #   define _mcPreprocess_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GmcPretty.cc b/gcc/m2/mc-boot/GmcPretty.cc
index 0bffa1ff6feb..c0be8c1e4991 100644
--- a/gcc/m2/mc-boot/GmcPretty.cc
+++ b/gcc/m2/mc-boot/GmcPretty.cc
@@ -15,6 +15,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GmcPretty.h b/gcc/m2/mc-boot/GmcPretty.h
index 1a61c893261c..c1d59ced8cbd 100644
--- a/gcc/m2/mc-boot/GmcPretty.h
+++ b/gcc/m2/mc-boot/GmcPretty.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_mcPretty_H)
 #   define _mcPretty_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GmcPrintf.cc b/gcc/m2/mc-boot/GmcPrintf.cc
index e91e55acc14c..dafa728437fd 100644
--- a/gcc/m2/mc-boot/GmcPrintf.cc
+++ b/gcc/m2/mc-boot/GmcPrintf.cc
@@ -15,6 +15,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GmcPrintf.h b/gcc/m2/mc-boot/GmcPrintf.h
index 46aeaacf888d..1f242a885543 100644
--- a/gcc/m2/mc-boot/GmcPrintf.h
+++ b/gcc/m2/mc-boot/GmcPrintf.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_mcPrintf_H)
 #   define _mcPrintf_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GmcQuiet.cc b/gcc/m2/mc-boot/GmcQuiet.cc
index d0f2f009b2a8..3309f13d736c 100644
--- a/gcc/m2/mc-boot/GmcQuiet.cc
+++ b/gcc/m2/mc-boot/GmcQuiet.cc
@@ -15,6 +15,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GmcQuiet.h b/gcc/m2/mc-boot/GmcQuiet.h
index 9065ff9c578c..be6f4eaa0019 100644
--- a/gcc/m2/mc-boot/GmcQuiet.h
+++ b/gcc/m2/mc-boot/GmcQuiet.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_mcQuiet_H)
 #   define _mcQuiet_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GmcReserved.cc b/gcc/m2/mc-boot/GmcReserved.cc
index a42f1b1b0acb..02132e48b4b8 100644
--- a/gcc/m2/mc-boot/GmcReserved.cc
+++ b/gcc/m2/mc-boot/GmcReserved.cc
@@ -15,6 +15,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GmcReserved.h b/gcc/m2/mc-boot/GmcReserved.h
index ab844ee5c939..b78170272499 100644
--- a/gcc/m2/mc-boot/GmcReserved.h
+++ b/gcc/m2/mc-boot/GmcReserved.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_mcReserved_H)
 #   define _mcReserved_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GmcSearch.cc b/gcc/m2/mc-boot/GmcSearch.cc
index e1a2aa63e29d..14d3e3fe0abd 100644
--- a/gcc/m2/mc-boot/GmcSearch.cc
+++ b/gcc/m2/mc-boot/GmcSearch.cc
@@ -15,6 +15,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GmcSearch.h b/gcc/m2/mc-boot/GmcSearch.h
index f4324a024364..36ed60936373 100644
--- a/gcc/m2/mc-boot/GmcSearch.h
+++ b/gcc/m2/mc-boot/GmcSearch.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_mcSearch_H)
 #   define _mcSearch_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GmcStack.cc b/gcc/m2/mc-boot/GmcStack.cc
index 70f937b42991..8edae475e6de 100644
--- a/gcc/m2/mc-boot/GmcStack.cc
+++ b/gcc/m2/mc-boot/GmcStack.cc
@@ -15,6 +15,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GmcStack.h b/gcc/m2/mc-boot/GmcStack.h
index 70b22be94f1d..476ff65fe69d 100644
--- a/gcc/m2/mc-boot/GmcStack.h
+++ b/gcc/m2/mc-boot/GmcStack.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_mcStack_H)
 #   define _mcStack_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GmcStream.cc b/gcc/m2/mc-boot/GmcStream.cc
index da44d8f66a8e..18430606d0fa 100644
--- a/gcc/m2/mc-boot/GmcStream.cc
+++ b/gcc/m2/mc-boot/GmcStream.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GNU Modula-2; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GmcStream.h b/gcc/m2/mc-boot/GmcStream.h
index a156d880d540..473b05df7ac1 100644
--- a/gcc/m2/mc-boot/GmcStream.h
+++ b/gcc/m2/mc-boot/GmcStream.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_mcStream_H)
 #   define _mcStream_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/Gmcflex.h b/gcc/m2/mc-boot/Gmcflex.h
index 9e6d4c48edfc..ff14f9fdfef9 100644
--- a/gcc/m2/mc-boot/Gmcflex.h
+++ b/gcc/m2/mc-boot/Gmcflex.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_mcflex_H)
 #   define _mcflex_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/Gmcp1.cc b/gcc/m2/mc-boot/Gmcp1.cc
index b4ccf806cb08..8971c323b67d 100644
--- a/gcc/m2/mc-boot/Gmcp1.cc
+++ b/gcc/m2/mc-boot/Gmcp1.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GNU Modula-2; see the file COPYING.  If not,
 see <https://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/Gmcp1.h b/gcc/m2/mc-boot/Gmcp1.h
index 878d1642c625..758d8c0ae3e0 100644
--- a/gcc/m2/mc-boot/Gmcp1.h
+++ b/gcc/m2/mc-boot/Gmcp1.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_mcp1_H)
 #   define _mcp1_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/Gmcp2.cc b/gcc/m2/mc-boot/Gmcp2.cc
index f61e42220d41..2a3a38c63eae 100644
--- a/gcc/m2/mc-boot/Gmcp2.cc
+++ b/gcc/m2/mc-boot/Gmcp2.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GNU Modula-2; see the file COPYING.  If not,
 see <https://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/Gmcp2.h b/gcc/m2/mc-boot/Gmcp2.h
index b483b2dc2485..ec894e1ba265 100644
--- a/gcc/m2/mc-boot/Gmcp2.h
+++ b/gcc/m2/mc-boot/Gmcp2.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_mcp2_H)
 #   define _mcp2_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/Gmcp3.cc b/gcc/m2/mc-boot/Gmcp3.cc
index 5cb83f464e7c..b5ade482801a 100644
--- a/gcc/m2/mc-boot/Gmcp3.cc
+++ b/gcc/m2/mc-boot/Gmcp3.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GNU Modula-2; see the file COPYING.  If not,
 see <https://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/Gmcp3.h b/gcc/m2/mc-boot/Gmcp3.h
index 0e00ddcdd9be..87856ed51e16 100644
--- a/gcc/m2/mc-boot/Gmcp3.h
+++ b/gcc/m2/mc-boot/Gmcp3.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_mcp3_H)
 #   define _mcp3_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/Gmcp4.cc b/gcc/m2/mc-boot/Gmcp4.cc
index ce8cb78f443a..869763713d69 100644
--- a/gcc/m2/mc-boot/Gmcp4.cc
+++ b/gcc/m2/mc-boot/Gmcp4.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GNU Modula-2; see the file COPYING.  If not,
 see <https://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/Gmcp4.h b/gcc/m2/mc-boot/Gmcp4.h
index 643b939a6342..c229beb3c20c 100644
--- a/gcc/m2/mc-boot/Gmcp4.h
+++ b/gcc/m2/mc-boot/Gmcp4.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_mcp4_H)
 #   define _mcp4_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/Gmcp5.cc b/gcc/m2/mc-boot/Gmcp5.cc
index 909c62215c82..ec241691a953 100644
--- a/gcc/m2/mc-boot/Gmcp5.cc
+++ b/gcc/m2/mc-boot/Gmcp5.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GNU Modula-2; see the file COPYING.  If not,
 see <https://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/Gmcp5.h b/gcc/m2/mc-boot/Gmcp5.h
index 7989101e86ac..de3edb17922f 100644
--- a/gcc/m2/mc-boot/Gmcp5.h
+++ b/gcc/m2/mc-boot/Gmcp5.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_mcp5_H)
 #   define _mcp5_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GnameKey.cc b/gcc/m2/mc-boot/GnameKey.cc
index 3e868886e293..8f4a330d0d90 100644
--- a/gcc/m2/mc-boot/GnameKey.cc
+++ b/gcc/m2/mc-boot/GnameKey.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GNU Modula-2; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GnameKey.h b/gcc/m2/mc-boot/GnameKey.h
index a2ea330b0634..d4cce1b6bd36 100644
--- a/gcc/m2/mc-boot/GnameKey.h
+++ b/gcc/m2/mc-boot/GnameKey.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_nameKey_H)
 #   define _nameKey_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/GsymbolKey.cc b/gcc/m2/mc-boot/GsymbolKey.cc
index 17072597304b..50b8c8f56c3e 100644
--- a/gcc/m2/mc-boot/GsymbolKey.cc
+++ b/gcc/m2/mc-boot/GsymbolKey.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GNU Modula-2; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/GsymbolKey.h b/gcc/m2/mc-boot/GsymbolKey.h
index 696709855161..5d05977e50a0 100644
--- a/gcc/m2/mc-boot/GsymbolKey.h
+++ b/gcc/m2/mc-boot/GsymbolKey.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_symbolKey_H)
 #   define _symbolKey_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/Gtermios.h b/gcc/m2/mc-boot/Gtermios.h
index acb7fcf0c767..70c0c49948e7 100644
--- a/gcc/m2/mc-boot/Gtermios.h
+++ b/gcc/m2/mc-boot/Gtermios.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_termios_H)
 #   define _termios_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/Gtop.cc b/gcc/m2/mc-boot/Gtop.cc
index dfefe42c1da5..1a8597a04263 100644
--- a/gcc/m2/mc-boot/Gtop.cc
+++ b/gcc/m2/mc-boot/Gtop.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GNU Modula-2; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/Gvarargs.cc b/gcc/m2/mc-boot/Gvarargs.cc
index 69f5f2c57564..32f984d24fcd 100644
--- a/gcc/m2/mc-boot/Gvarargs.cc
+++ b/gcc/m2/mc-boot/Gvarargs.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GNU Modula-2; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/Gvarargs.h b/gcc/m2/mc-boot/Gvarargs.h
index 82b5b753ba10..8e3e91a1c426 100644
--- a/gcc/m2/mc-boot/Gvarargs.h
+++ b/gcc/m2/mc-boot/Gvarargs.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_varargs_H)
 #   define _varargs_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/Gwlists.cc b/gcc/m2/mc-boot/Gwlists.cc
index 87daa42c3efd..9262329e77a0 100644
--- a/gcc/m2/mc-boot/Gwlists.cc
+++ b/gcc/m2/mc-boot/Gwlists.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GNU Modula-2; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <stdbool.h>
diff --git a/gcc/m2/mc-boot/Gwlists.h b/gcc/m2/mc-boot/Gwlists.h
index 05d65945b589..53bad73339a2 100644
--- a/gcc/m2/mc-boot/Gwlists.h
+++ b/gcc/m2/mc-boot/Gwlists.h
@@ -24,6 +24,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_wlists_H)
 #   define _wlists_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc-boot/Gwrapc.h b/gcc/m2/mc-boot/Gwrapc.h
index e4db1e2a99f3..fdbeabcdadef 100644
--- a/gcc/m2/mc-boot/Gwrapc.h
+++ b/gcc/m2/mc-boot/Gwrapc.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_wrapc_H)
 #   define _wrapc_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/mc/keyc.mod b/gcc/m2/mc/keyc.mod
index f3f09309ad5c..a182e120692a 100644
--- a/gcc/m2/mc/keyc.mod
+++ b/gcc/m2/mc/keyc.mod
@@ -95,6 +95,7 @@  BEGIN
       IF NOT initializedGCC
       THEN
          initializedGCC := TRUE ;
+         print (p, '#define INCLUDE_MEMORY\n');
          print (p, '#include "config.h"\n');
          print (p, '#include "system.h"\n');
          checkGccTypes (p)
diff --git a/gcc/m2/pge-boot/GASCII.cc b/gcc/m2/pge-boot/GASCII.cc
index 19e98ede436a..21b621105a93 100644
--- a/gcc/m2/pge-boot/GASCII.cc
+++ b/gcc/m2/pge-boot/GASCII.cc
@@ -32,9 +32,9 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
        typedef struct { PROC_t proc; } PROC;
 #   endif
 
-#define _ASCII_H
 #define _ASCII_C
 
+#include "GASCII.h"
 
 #   define ASCII_nul (char) 000
 #   define ASCII_soh (char) 001
diff --git a/gcc/m2/pge-boot/GASCII.h b/gcc/m2/pge-boot/GASCII.h
index c157a8b7686e..6346caa11890 100644
--- a/gcc/m2/pge-boot/GASCII.h
+++ b/gcc/m2/pge-boot/GASCII.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_ASCII_H)
 #   define _ASCII_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GArgs.cc b/gcc/m2/pge-boot/GArgs.cc
index 284567d750a6..c295985178d9 100644
--- a/gcc/m2/pge-boot/GArgs.cc
+++ b/gcc/m2/pge-boot/GArgs.cc
@@ -32,9 +32,9 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
        typedef struct { PROC_t proc; } PROC;
 #   endif
 
-#define _Args_H
 #define _Args_C
 
+#include "GArgs.h"
 #   include "GUnixArgs.h"
 #   include "GASCII.h"
 
@@ -84,13 +84,13 @@  extern "C" bool Args_GetArg (char *a, unsigned int _a_high, unsigned int n)
       Source = static_cast<Args__T1> (UnixArgs_GetArgV ());
       while ((j < High) && ((*(*Source).array[i]).array[j] != ASCII_nul))
         {
-          a[j] = (*(*Source).array[i]).array[j];
+          const_cast<char *>(a)[j] = (*(*Source).array[i]).array[j];
           j += 1;
         }
     }
   if (j <= High)
     {
-      a[j] = ASCII_nul;
+      const_cast<char *>(a)[j] = ASCII_nul;
     }
   return i < (UnixArgs_GetArgC ());
   /* static analysis guarentees a RETURN statement will be used before here.  */
diff --git a/gcc/m2/pge-boot/GArgs.h b/gcc/m2/pge-boot/GArgs.h
index 1171cef8d72f..b912da63c7c9 100644
--- a/gcc/m2/pge-boot/GArgs.h
+++ b/gcc/m2/pge-boot/GArgs.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_Args_H)
 #   define _Args_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GAssertion.cc b/gcc/m2/pge-boot/GAssertion.cc
index 3dae36d748a8..8aad1cd55575 100644
--- a/gcc/m2/pge-boot/GAssertion.cc
+++ b/gcc/m2/pge-boot/GAssertion.cc
@@ -32,9 +32,9 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
        typedef struct { PROC_t proc; } PROC;
 #   endif
 
-#define _Assertion_H
 #define _Assertion_C
 
+#include "GAssertion.h"
 #   include "GStrIO.h"
 #   include "GM2RTS.h"
 
diff --git a/gcc/m2/pge-boot/GAssertion.h b/gcc/m2/pge-boot/GAssertion.h
index d909fdee7a37..9e0777fc60b2 100644
--- a/gcc/m2/pge-boot/GAssertion.h
+++ b/gcc/m2/pge-boot/GAssertion.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_Assertion_H)
 #   define _Assertion_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GBreak.h b/gcc/m2/pge-boot/GBreak.h
index bd2f1ccf6f17..635d82cfbe36 100644
--- a/gcc/m2/pge-boot/GBreak.h
+++ b/gcc/m2/pge-boot/GBreak.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_Break_H)
 #   define _Break_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GCmdArgs.h b/gcc/m2/pge-boot/GCmdArgs.h
index 7f39815bc093..c7b3dd22d46c 100644
--- a/gcc/m2/pge-boot/GCmdArgs.h
+++ b/gcc/m2/pge-boot/GCmdArgs.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_CmdArgs_H)
 #   define _CmdArgs_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GDebug.cc b/gcc/m2/pge-boot/GDebug.cc
index deb7f9e7aeb0..91dd96046a49 100644
--- a/gcc/m2/pge-boot/GDebug.cc
+++ b/gcc/m2/pge-boot/GDebug.cc
@@ -34,9 +34,9 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 
 #include <string.h>
 #include <limits.h>
-#define _Debug_H
 #define _Debug_C
 
+#include "GDebug.h"
 #   include "GASCII.h"
 #   include "GNumberIO.h"
 #   include "GStdIO.h"
diff --git a/gcc/m2/pge-boot/GDebug.h b/gcc/m2/pge-boot/GDebug.h
index 8787752b9a35..c853211e16e3 100644
--- a/gcc/m2/pge-boot/GDebug.h
+++ b/gcc/m2/pge-boot/GDebug.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_Debug_H)
 #   define _Debug_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GDynamicStrings.cc b/gcc/m2/pge-boot/GDynamicStrings.cc
index 329696929851..d6f5f83ad5b5 100644
--- a/gcc/m2/pge-boot/GDynamicStrings.cc
+++ b/gcc/m2/pge-boot/GDynamicStrings.cc
@@ -25,8 +25,6 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
-#include "config.h"
-#include "system.h"
 #include <stdbool.h>
 #   if !defined (PROC_D)
 #      define PROC_D
@@ -42,7 +40,12 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #      define FALSE (1==0)
 #   endif
 
+#include <stddef.h>
+#include <string.h>
+#include <limits.h>
+#include <stdlib.h>
 #   include "GStorage.h"
+#include <unistd.h>
 #if defined(__cplusplus)
 #   undef NULL
 #   define NULL 0
@@ -2064,7 +2067,7 @@  extern "C" DynamicStrings_String DynamicStrings_Slice (DynamicStrings_String s,
   DynamicStrings_String__opaque d;
   DynamicStrings_String__opaque t;
   int start;
-  int end;
+  int stop;
   int o;
 
   if (PoisonOn)
@@ -2107,7 +2110,7 @@  extern "C" DynamicStrings_String DynamicStrings_Slice (DynamicStrings_String s,
                 {
                   start = low-o;
                 }
-              end = Max (Min (MaxBuf, static_cast<unsigned int> (high-o)), 0);
+              stop = Max (Min (MaxBuf, static_cast<unsigned int> (high-o)), 0);
               while (t->contents.len == MaxBuf)
                 {
                   if (t->contents.next == NULL)
@@ -2123,7 +2126,7 @@  extern "C" DynamicStrings_String DynamicStrings_Slice (DynamicStrings_String s,
                     }
                   t = t->contents.next;
                 }
-              ConcatContentsAddress (&t->contents, &static_cast<DynamicStrings_String__opaque> (s)->contents.buf.array[start], static_cast<unsigned int> (end-start));
+              ConcatContentsAddress (&t->contents, &static_cast<DynamicStrings_String__opaque> (s)->contents.buf.array[start], static_cast<unsigned int> (stop-start));
               o += static_cast<DynamicStrings_String__opaque> (s)->contents.len;
               s = static_cast<DynamicStrings_String> (static_cast<DynamicStrings_String__opaque> (s)->contents.next);
             }
diff --git a/gcc/m2/pge-boot/GDynamicStrings.h b/gcc/m2/pge-boot/GDynamicStrings.h
index e0652a7d3bd0..4d77cecc5913 100644
--- a/gcc/m2/pge-boot/GDynamicStrings.h
+++ b/gcc/m2/pge-boot/GDynamicStrings.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_DynamicStrings_H)
 #   define _DynamicStrings_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GEnvironment.h b/gcc/m2/pge-boot/GEnvironment.h
index 4f94d583334b..4645a4954151 100644
--- a/gcc/m2/pge-boot/GEnvironment.h
+++ b/gcc/m2/pge-boot/GEnvironment.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_Environment_H)
 #   define _Environment_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GFIO.cc b/gcc/m2/pge-boot/GFIO.cc
index 3e56792f20f6..b30d969e11fc 100644
--- a/gcc/m2/pge-boot/GFIO.cc
+++ b/gcc/m2/pge-boot/GFIO.cc
@@ -52,9 +52,9 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #   undef NULL
 #   define NULL 0
 #endif
-#define _FIO_H
 #define _FIO_C
 
+#include "GFIO.h"
 #   include "GSYSTEM.h"
 #   include "GASCII.h"
 #   include "GStrLib.h"
@@ -67,9 +67,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 
 typedef unsigned int FIO_File;
 
-FIO_File FIO_StdErr;
-FIO_File FIO_StdOut;
-FIO_File FIO_StdIn;
 #   define MaxBufferLength (1024*16)
 #   define MaxErrorString (1024*8)
 #   define CreatePermissions 0666
@@ -643,7 +640,7 @@  static FIO_File InitializeFile (FIO_File f, void * fname, unsigned int flength,
             {
               fd->buffer->left = 0;
             }
-          fd->buffer->contents = reinterpret_cast<FIO__T7 *> (fd->buffer->address);  /* provides easy access for reading characters  */
+          fd->buffer->contents = static_cast<FIO__T7 *> (fd->buffer->address);  /* provides easy access for reading characters  */
           fd->state = fstate;  /* provides easy access for reading characters  */
         }
     }
@@ -917,7 +914,7 @@  static void HandleEscape (char *dest, unsigned int _dest_high, const char *src_,
       if (src[(*i)+1] == 'n')
         {
           /* requires a newline  */
-          dest[(*j)] = ASCII_nl;
+          const_cast<char *>(dest)[(*j)] = ASCII_nl;
           (*j) += 1;
           (*i) += 2;
         }
@@ -925,7 +922,7 @@  static void HandleEscape (char *dest, unsigned int _dest_high, const char *src_,
         {
           /* avoid dangling else.  */
           /* requires a tab (yuck) tempted to fake this but I better not..  */
-          dest[(*j)] = ASCII_tab;
+          const_cast<char *>(dest)[(*j)] = ASCII_tab;
           (*j) += 1;
           (*i) += 2;
         }
@@ -934,7 +931,7 @@  static void HandleEscape (char *dest, unsigned int _dest_high, const char *src_,
           /* avoid dangling else.  */
           /* copy escaped character  */
           (*i) += 1;
-          dest[(*j)] = src[(*i)];
+          const_cast<char *>(dest)[(*j)] = src[(*i)];
           (*j) += 1;
           (*i) += 1;
         }
@@ -958,7 +955,7 @@  static void Cast (unsigned char *a, unsigned int _a_high, const unsigned char *b
     {
       for (i=0; i<=_a_high; i++)
         {
-          a[i] = b[i];
+          const_cast<unsigned char *>(a)[i] = b[i];
         }
     }
   else
@@ -1008,7 +1005,7 @@  static void StringFormat1 (char *dest, unsigned int _dest_high, const char *src_
         }
       else
         {
-          dest[j] = src[i];
+          const_cast<char *>(dest)[j] = src[i];
           i += 1;
           j += 1;
         }
@@ -1021,13 +1018,13 @@  static void StringFormat1 (char *dest, unsigned int _dest_high, const char *src_
           Cast ((unsigned char *) &p, (sizeof (p)-1), (const unsigned char *) w, _w_high);
           while ((j < HighDest) && ((*p) != ASCII_nul))
             {
-              dest[j] = (*p);
+              const_cast<char *>(dest)[j] = (*p);
               j += 1;
               p += 1;
             }
           if (j < HighDest)
             {
-              dest[j] = ASCII_nul;
+              const_cast<char *>(dest)[j] = ASCII_nul;
             }
           j = StrLib_StrLen ((const char *) dest, _dest_high);
           i += 2;
@@ -1035,7 +1032,7 @@  static void StringFormat1 (char *dest, unsigned int _dest_high, const char *src_
       else if (src[i+1] == 'd')
         {
           /* avoid dangling else.  */
-          dest[j] = ASCII_nul;
+          const_cast<char *>(dest)[j] = ASCII_nul;
           Cast ((unsigned char *) &c, (sizeof (c)-1), (const unsigned char *) w, _w_high);
           NumberIO_CardToStr (c, 0, (char *) &str.array[0], MaxErrorString);
           StrLib_StrConCat ((const char *) dest, _dest_high, (const char *) &str.array[0], MaxErrorString, (char *) dest, _dest_high);
@@ -1045,7 +1042,7 @@  static void StringFormat1 (char *dest, unsigned int _dest_high, const char *src_
       else
         {
           /* avoid dangling else.  */
-          dest[j] = src[i];
+          const_cast<char *>(dest)[j] = src[i];
           i += 1;
           j += 1;
         }
@@ -1059,14 +1056,14 @@  static void StringFormat1 (char *dest, unsigned int _dest_high, const char *src_
         }
       else
         {
-          dest[j] = src[i];
+          const_cast<char *>(dest)[j] = src[i];
           i += 1;
           j += 1;
         }
     }
   if (j < HighDest)
     {
-      dest[j] = ASCII_nul;
+      const_cast<char *>(dest)[j] = ASCII_nul;
     }
 }
 
@@ -1316,7 +1313,7 @@  static void PreInitialize (FIO_File f, const char *fname_, unsigned int _fname_h
   /* make a local copy of each unbounded array.  */
   memcpy (fname, fname_, _fname_high+1);
 
-  if ((InitializeFile (f, &fname, StrLib_StrLen ((const char *) fname, _fname_high), state, use, towrite, bufsize)) == f)
+  if ((InitializeFile (f, const_cast<void*> (static_cast<const void*>(fname)), StrLib_StrLen ((const char *) fname, _fname_high), state, use, towrite, bufsize)) == f)
     {
       fd = static_cast<FIO_FileDescriptor> (Indexing_GetIndice (FileInfo, f));
       if (f == Error)
@@ -1418,7 +1415,7 @@  extern "C" bool FIO_Exists (const char *fname_, unsigned int _fname_high)
   /* 
    The following functions are wrappers for the above.
   */
-  return FIO_exists (&fname, StrLib_StrLen ((const char *) fname, _fname_high));
+  return FIO_exists (const_cast<void*> (static_cast<const void*>(fname)), StrLib_StrLen ((const char *) fname, _fname_high));
   /* static analysis guarentees a RETURN statement will be used before here.  */
   __builtin_unreachable ();
 }
@@ -1430,7 +1427,7 @@  extern "C" FIO_File FIO_OpenToRead (const char *fname_, unsigned int _fname_high
   /* make a local copy of each unbounded array.  */
   memcpy (fname, fname_, _fname_high+1);
 
-  return FIO_openToRead (&fname, StrLib_StrLen ((const char *) fname, _fname_high));
+  return FIO_openToRead (const_cast<void*> (static_cast<const void*>(fname)), StrLib_StrLen ((const char *) fname, _fname_high));
   /* static analysis guarentees a RETURN statement will be used before here.  */
   __builtin_unreachable ();
 }
@@ -1442,7 +1439,7 @@  extern "C" FIO_File FIO_OpenToWrite (const char *fname_, unsigned int _fname_hig
   /* make a local copy of each unbounded array.  */
   memcpy (fname, fname_, _fname_high+1);
 
-  return FIO_openToWrite (&fname, StrLib_StrLen ((const char *) fname, _fname_high));
+  return FIO_openToWrite (const_cast<void*> (static_cast<const void*>(fname)), StrLib_StrLen ((const char *) fname, _fname_high));
   /* static analysis guarentees a RETURN statement will be used before here.  */
   __builtin_unreachable ();
 }
@@ -1454,7 +1451,7 @@  extern "C" FIO_File FIO_OpenForRandom (const char *fname_, unsigned int _fname_h
   /* make a local copy of each unbounded array.  */
   memcpy (fname, fname_, _fname_high+1);
 
-  return FIO_openForRandom (&fname, StrLib_StrLen ((const char *) fname, _fname_high), towrite, newfile);
+  return FIO_openForRandom (const_cast<void*> (static_cast<const void*>(fname)), StrLib_StrLen ((const char *) fname, _fname_high), towrite, newfile);
   /* static analysis guarentees a RETURN statement will be used before here.  */
   __builtin_unreachable ();
 }
@@ -1970,7 +1967,7 @@  extern "C" void FIO_WriteString (FIO_File f, const char *a_, unsigned int _a_hig
   memcpy (a, a_, _a_high+1);
 
   l = StrLib_StrLen ((const char *) a, _a_high);
-  if ((FIO_WriteNBytes (f, l, &a)) != l)
+  if ((FIO_WriteNBytes (f, l, const_cast<void*> (static_cast<const void*>(a)))) != l)
     {}  /* empty.  */
 }
 
@@ -1997,12 +1994,12 @@  extern "C" void FIO_ReadString (FIO_File f, char *a, unsigned int _a_high)
         /* avoid gcc warning by using compound statement even if not strictly necessary.  */
         if (((ch == ASCII_nl) || (! (FIO_IsNoError (f)))) || (FIO_EOF (f)))
           {
-            a[i] = ASCII_nul;
+            const_cast<char *>(a)[i] = ASCII_nul;
             i += 1;
           }
         else
           {
-            a[i] = ch;
+            const_cast<char *>(a)[i] = ch;
             i += 1;
           }
       }
@@ -2226,7 +2223,7 @@  extern "C" void FIO_GetFileName (FIO_File f, char *a, unsigned int _a_high)
               i = 0;
               while (((*p) != ASCII_nul) && (i <= _a_high))
                 {
-                  a[i] = (*p);
+                  const_cast<char *>(a)[i] = (*p);
                   p += 1;
                   i += 1;
                 }
diff --git a/gcc/m2/pge-boot/GFIO.h b/gcc/m2/pge-boot/GFIO.h
index d82396449ffe..160fadee5dd2 100644
--- a/gcc/m2/pge-boot/GFIO.h
+++ b/gcc/m2/pge-boot/GFIO.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_FIO_H)
 #   define _FIO_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GFormatStrings.h b/gcc/m2/pge-boot/GFormatStrings.h
index 1d8ce34ce62c..61f738bb323c 100644
--- a/gcc/m2/pge-boot/GFormatStrings.h
+++ b/gcc/m2/pge-boot/GFormatStrings.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_FormatStrings_H)
 #   define _FormatStrings_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GFpuIO.h b/gcc/m2/pge-boot/GFpuIO.h
index 5d8306061301..70cc45dfcb5b 100644
--- a/gcc/m2/pge-boot/GFpuIO.h
+++ b/gcc/m2/pge-boot/GFpuIO.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_FpuIO_H)
 #   define _FpuIO_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GIO.cc b/gcc/m2/pge-boot/GIO.cc
index 7d391bb72ff6..9f781b5a0d6a 100644
--- a/gcc/m2/pge-boot/GIO.cc
+++ b/gcc/m2/pge-boot/GIO.cc
@@ -42,9 +42,9 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 
 #include <stdlib.h>
 #include <unistd.h>
-#define _IO_H
 #define _IO_C
 
+#include "GIO.h"
 #   include "GStrLib.h"
 #   include "GSYSTEM.h"
 #   include "Glibc.h"
diff --git a/gcc/m2/pge-boot/GIO.h b/gcc/m2/pge-boot/GIO.h
index 4f4af9a59a02..ae16019fb703 100644
--- a/gcc/m2/pge-boot/GIO.h
+++ b/gcc/m2/pge-boot/GIO.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_IO_H)
 #   define _IO_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GIndexing.cc b/gcc/m2/pge-boot/GIndexing.cc
index 21e3a43a8c86..fa7837c1dd23 100644
--- a/gcc/m2/pge-boot/GIndexing.cc
+++ b/gcc/m2/pge-boot/GIndexing.cc
@@ -48,9 +48,9 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #   undef NULL
 #   define NULL 0
 #endif
-#define _Indexing_H
 #define _Indexing_C
 
+#include "GIndexing.h"
 #   include "Glibc.h"
 #   include "GStorage.h"
 #   include "GSYSTEM.h"
@@ -66,10 +66,7 @@  typedef void * *Indexing_PtrToAddress;
 
 typedef unsigned char *Indexing_PtrToByte;
 
-typedef Indexing__T2 *Indexing_Index;
-
-typedef void (*Indexing_IndexProcedure_t) (void *);
-struct Indexing_IndexProcedure_p { Indexing_IndexProcedure_t proc; };
+typedef Indexing__T2 *Indexing_Index__opaque;
 
 struct Indexing__T2_r {
                         void *ArrayStart;
@@ -178,6 +175,13 @@  extern "C" void Indexing_ForeachIndiceInIndexDo (Indexing_Index i, Indexing_Inde
 
 extern "C" bool Indexing_IsEmpty (Indexing_Index i);
 
+/*
+   FindIndice - returns the indice containing a.
+                It returns zero if a is not found in array i.
+*/
+
+extern "C" unsigned int Indexing_FindIndice (Indexing_Index i, void * a);
+
 
 /*
    InitIndexTuned - creates a dynamic array with low indice.
@@ -188,7 +192,7 @@  extern "C" bool Indexing_IsEmpty (Indexing_Index i);
 
 extern "C" Indexing_Index Indexing_InitIndexTuned (unsigned int low, unsigned int minsize, unsigned int growfactor)
 {
-  Indexing_Index i;
+  Indexing_Index__opaque i;
 
   Storage_ALLOCATE ((void **) &i, sizeof (Indexing__T2));
   i->Low = low;
@@ -200,7 +204,7 @@  extern "C" Indexing_Index Indexing_InitIndexTuned (unsigned int low, unsigned in
   i->Used = 0;
   i->Map = (unsigned int) 0;
   i->GrowFactor = growfactor;
-  return i;
+  return static_cast<Indexing_Index> (i);
   /* static analysis guarentees a RETURN statement will be used before here.  */
   __builtin_unreachable ();
 }
@@ -224,9 +228,9 @@  extern "C" Indexing_Index Indexing_InitIndex (unsigned int low)
 
 extern "C" Indexing_Index Indexing_KillIndex (Indexing_Index i)
 {
-  Storage_DEALLOCATE (&i->ArrayStart, i->ArraySize);
+  Storage_DEALLOCATE (&static_cast<Indexing_Index__opaque> (i)->ArrayStart, static_cast<Indexing_Index__opaque> (i)->ArraySize);
   Storage_DEALLOCATE ((void **) &i, sizeof (Indexing__T2));
-  return NULL;
+  return static_cast<Indexing_Index> (NULL);
   /* static analysis guarentees a RETURN statement will be used before here.  */
   __builtin_unreachable ();
 }
@@ -238,7 +242,7 @@  extern "C" Indexing_Index Indexing_KillIndex (Indexing_Index i)
 
 extern "C" Indexing_Index Indexing_DebugIndex (Indexing_Index i)
 {
-  i->Debug = true;
+  static_cast<Indexing_Index__opaque> (i)->Debug = true;
   return i;
   /* static analysis guarentees a RETURN statement will be used before here.  */
   __builtin_unreachable ();
@@ -259,7 +263,7 @@  extern "C" bool Indexing_InBounds (Indexing_Index i, unsigned int n)
     }
   else
     {
-      return (n >= i->Low) && (n <= i->High);
+      return (n >= static_cast<Indexing_Index__opaque> (i)->Low) && (n <= static_cast<Indexing_Index__opaque> (i)->High);
     }
   ReturnException ("../../gcc/m2/gm2-libs/Indexing.def", 25, 1);
   __builtin_unreachable ();
@@ -279,7 +283,7 @@  extern "C" unsigned int Indexing_HighIndice (Indexing_Index i)
     }
   else
     {
-      return i->High;
+      return static_cast<Indexing_Index__opaque> (i)->High;
     }
   ReturnException ("../../gcc/m2/gm2-libs/Indexing.def", 25, 1);
   __builtin_unreachable ();
@@ -299,7 +303,7 @@  extern "C" unsigned int Indexing_LowIndice (Indexing_Index i)
     }
   else
     {
-      return i->Low;
+      return static_cast<Indexing_Index__opaque> (i)->Low;
     }
   ReturnException ("../../gcc/m2/gm2-libs/Indexing.def", 25, 1);
   __builtin_unreachable ();
@@ -321,19 +325,19 @@  extern "C" void Indexing_PutIndice (Indexing_Index i, unsigned int n, void * a)
   if (! (Indexing_InBounds (i, n)))
     {
       /* avoid gcc warning by using compound statement even if not strictly necessary.  */
-      if (n < i->Low)
+      if (n < static_cast<Indexing_Index__opaque> (i)->Low)
         {
           M2RTS_HALT (-1);
           __builtin_unreachable ();
         }
       else
         {
-          oldSize = i->ArraySize;
-          while (((n-i->Low)*sizeof (void *)) >= i->ArraySize)
+          oldSize = static_cast<Indexing_Index__opaque> (i)->ArraySize;
+          while (((n-static_cast<Indexing_Index__opaque> (i)->Low)*sizeof (void *)) >= static_cast<Indexing_Index__opaque> (i)->ArraySize)
             {
-              i->ArraySize = i->ArraySize*i->GrowFactor;
+              static_cast<Indexing_Index__opaque> (i)->ArraySize = static_cast<Indexing_Index__opaque> (i)->ArraySize*static_cast<Indexing_Index__opaque> (i)->GrowFactor;
             }
-          if (oldSize != i->ArraySize)
+          if (oldSize != static_cast<Indexing_Index__opaque> (i)->ArraySize)
             {
               /* 
                IF Debug
@@ -343,25 +347,25 @@  extern "C" void Indexing_PutIndice (Indexing_Index i, unsigned int n, void * a)
                           oldSize, ArraySize)
                END ;
   */
-              Storage_REALLOCATE (&i->ArrayStart, i->ArraySize);
+              Storage_REALLOCATE (&static_cast<Indexing_Index__opaque> (i)->ArrayStart, static_cast<Indexing_Index__opaque> (i)->ArraySize);
               /* and initialize the remainder of the array to NIL  */
-              b = i->ArrayStart;
+              b = static_cast<Indexing_Index__opaque> (i)->ArrayStart;
               b = reinterpret_cast<void *> (reinterpret_cast<char *> (b)+oldSize);
-              b = libc_memset (b, 0, static_cast<size_t> (i->ArraySize-oldSize));
+              b = libc_memset (b, 0, static_cast<size_t> (static_cast<Indexing_Index__opaque> (i)->ArraySize-oldSize));
             }
-          i->High = n;
+          static_cast<Indexing_Index__opaque> (i)->High = n;
         }
     }
-  b = i->ArrayStart;
-  b = reinterpret_cast<void *> (reinterpret_cast<char *> (b)+(n-i->Low)*sizeof (void *));
+  b = static_cast<Indexing_Index__opaque> (i)->ArrayStart;
+  b = reinterpret_cast<void *> (reinterpret_cast<char *> (b)+(n-static_cast<Indexing_Index__opaque> (i)->Low)*sizeof (void *));
   p = static_cast<PutIndice__T1> (b);
-  (*p) = reinterpret_cast<unsigned int *> (a);
-  i->Used += 1;
-  if (i->Debug)
+  (*p) = static_cast<unsigned int *> (a);
+  static_cast<Indexing_Index__opaque> (i)->Used += 1;
+  if (static_cast<Indexing_Index__opaque> (i)->Debug)
     {
       if (n < 32)
         {
-          i->Map |= (1 << (n ));
+          static_cast<Indexing_Index__opaque> (i)->Map |= (1 << (n ));
         }
     }
 }
@@ -381,12 +385,12 @@  extern "C" void * Indexing_GetIndice (Indexing_Index i, unsigned int n)
       M2RTS_HALT (-1);
       __builtin_unreachable ();
     }
-  b = static_cast<Indexing_PtrToByte> (i->ArrayStart);
-  b += (n-i->Low)*sizeof (void *);
+  b = static_cast<Indexing_PtrToByte> (static_cast<Indexing_Index__opaque> (i)->ArrayStart);
+  b += (n-static_cast<Indexing_Index__opaque> (i)->Low)*sizeof (void *);
   p = (Indexing_PtrToAddress) (b);
-  if (i->Debug)
+  if (static_cast<Indexing_Index__opaque> (i)->Debug)
     {
-      if (((n < 32) && (! ((((1 << (n)) & (i->Map)) != 0)))) && ((*p) != NULL))
+      if (((n < 32) && (! ((((1 << (n)) & (static_cast<Indexing_Index__opaque> (i)->Map)) != 0)))) && ((*p) != NULL))
         {
           M2RTS_HALT (-1);
           __builtin_unreachable ();
@@ -408,9 +412,9 @@  extern "C" bool Indexing_IsIndiceInIndex (Indexing_Index i, void * a)
   Indexing_PtrToByte b;
   Indexing_PtrToAddress p;
 
-  j = i->Low;
-  b = static_cast<Indexing_PtrToByte> (i->ArrayStart);
-  while (j <= i->High)
+  j = static_cast<Indexing_Index__opaque> (i)->Low;
+  b = static_cast<Indexing_PtrToByte> (static_cast<Indexing_Index__opaque> (i)->ArrayStart);
+  while (j <= static_cast<Indexing_Index__opaque> (i)->High)
     {
       p = (Indexing_PtrToAddress) (b);
       if ((*p) == a)
@@ -437,9 +441,9 @@  extern "C" void Indexing_RemoveIndiceFromIndex (Indexing_Index i, void * a)
   Indexing_PtrToAddress p;
   Indexing_PtrToByte b;
 
-  j = i->Low;
-  b = static_cast<Indexing_PtrToByte> (i->ArrayStart);
-  while (j <= i->High)
+  j = static_cast<Indexing_Index__opaque> (i)->Low;
+  b = static_cast<Indexing_PtrToByte> (static_cast<Indexing_Index__opaque> (i)->ArrayStart);
+  while (j <= static_cast<Indexing_Index__opaque> (i)->High)
     {
       p = (Indexing_PtrToAddress) (b);
       b += sizeof (void *);
@@ -463,13 +467,13 @@  extern "C" void Indexing_DeleteIndice (Indexing_Index i, unsigned int j)
 
   if (Indexing_InBounds (i, j))
     {
-      b = static_cast<Indexing_PtrToByte> (i->ArrayStart);
-      b += sizeof (void *)*(j-i->Low);
+      b = static_cast<Indexing_PtrToByte> (static_cast<Indexing_Index__opaque> (i)->ArrayStart);
+      b += sizeof (void *)*(j-static_cast<Indexing_Index__opaque> (i)->Low);
       p = (Indexing_PtrToAddress) (b);
       b += sizeof (void *);
-      p = static_cast<Indexing_PtrToAddress> (libc_memmove (reinterpret_cast<void *> (p), reinterpret_cast<void *> (b), static_cast<size_t> ((i->High-j)*sizeof (void *))));
-      i->High -= 1;
-      i->Used -= 1;
+      p = static_cast<Indexing_PtrToAddress> (libc_memmove (reinterpret_cast <void *> (p), reinterpret_cast <void *> (b), static_cast<size_t> ((static_cast<Indexing_Index__opaque> (i)->High-j)*sizeof (void *))));
+      static_cast<Indexing_Index__opaque> (i)->High -= 1;
+      static_cast<Indexing_Index__opaque> (i)->Used -= 1;
     }
   else
     {
@@ -489,7 +493,7 @@  extern "C" void Indexing_IncludeIndiceIntoIndex (Indexing_Index i, void * a)
   if (! (Indexing_IsIndiceInIndex (i, a)))
     {
       /* avoid gcc warning by using compound statement even if not strictly necessary.  */
-      if (i->Used == 0)
+      if (static_cast<Indexing_Index__opaque> (i)->Used == 0)
         {
           Indexing_PutIndice (i, Indexing_LowIndice (i), a);
         }
@@ -524,7 +528,36 @@  extern "C" void Indexing_ForeachIndiceInIndexDo (Indexing_Index i, Indexing_Inde
 
 extern "C" bool Indexing_IsEmpty (Indexing_Index i)
 {
-  return i->Used == 0;
+  return static_cast<Indexing_Index__opaque> (i)->Used == 0;
+  /* static analysis guarentees a RETURN statement will be used before here.  */
+  __builtin_unreachable ();
+}
+
+
+/*
+   FindIndice - returns the indice containing a.
+                It returns zero if a is not found in array i.
+*/
+
+extern "C" unsigned int Indexing_FindIndice (Indexing_Index i, void * a)
+{
+  unsigned int j;
+  Indexing_PtrToAddress p;
+  Indexing_PtrToByte b;
+
+  j = static_cast<Indexing_Index__opaque> (i)->Low;
+  b = static_cast<Indexing_PtrToByte> (static_cast<Indexing_Index__opaque> (i)->ArrayStart);
+  while (j <= static_cast<Indexing_Index__opaque> (i)->High)
+    {
+      p = (Indexing_PtrToAddress) (b);
+      b += sizeof (void *);
+      if ((*p) == a)
+        {
+          return j;
+        }
+      j += 1;
+    }
+  return 0;
   /* static analysis guarentees a RETURN statement will be used before here.  */
   __builtin_unreachable ();
 }
diff --git a/gcc/m2/pge-boot/GIndexing.h b/gcc/m2/pge-boot/GIndexing.h
index d65e8bd91dda..264e60ef4cfa 100644
--- a/gcc/m2/pge-boot/GIndexing.h
+++ b/gcc/m2/pge-boot/GIndexing.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_Indexing_H)
 #   define _Indexing_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
@@ -154,6 +155,13 @@  EXTERN void Indexing_ForeachIndiceInIndexDo (Indexing_Index i, Indexing_IndexPro
 */
 
 EXTERN bool Indexing_IsEmpty (Indexing_Index i);
+
+/*
+   FindIndice - returns the indice containing a.
+                It returns zero if a is not found in array i.
+*/
+
+EXTERN unsigned int Indexing_FindIndice (Indexing_Index i, void * a);
 #   ifdef __cplusplus
 }
 #   endif
diff --git a/gcc/m2/pge-boot/GLists.cc b/gcc/m2/pge-boot/GLists.cc
index 4b15e2068f8e..b49dda723820 100644
--- a/gcc/m2/pge-boot/GLists.cc
+++ b/gcc/m2/pge-boot/GLists.cc
@@ -41,9 +41,9 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #   undef NULL
 #   define NULL 0
 #endif
-#define _Lists_H
 #define _Lists_C
 
+#include "GLists.h"
 #   include "GStorage.h"
 
 typedef struct SymbolKey_PerformOperation_p SymbolKey_PerformOperation;
@@ -53,16 +53,13 @@  typedef struct Lists_list_r Lists_list;
 
 typedef struct Lists__T1_a Lists__T1;
 
-typedef Lists_list *Lists_List;
-
-typedef void (*SymbolKey_PerformOperation_t) (unsigned int);
-struct SymbolKey_PerformOperation_p { SymbolKey_PerformOperation_t proc; };
+typedef Lists_list *Lists_List__opaque;
 
 struct Lists__T1_a { unsigned int array[MaxNoOfElements-1+1]; };
 struct Lists_list_r {
                       unsigned int NoOfElements;
                       Lists__T1 Elements;
-                      Lists_List Next;
+                      Lists_List__opaque Next;
                     };
 
 
@@ -136,14 +133,14 @@  extern "C" Lists_List Lists_DuplicateList (Lists_List l);
    RemoveItem - remove an element at index, i, from the list data type.
 */
 
-static void RemoveItem (Lists_List p, Lists_List l, unsigned int i);
+static void RemoveItem (Lists_List__opaque p, Lists_List__opaque l, unsigned int i);
 
 
 /*
    RemoveItem - remove an element at index, i, from the list data type.
 */
 
-static void RemoveItem (Lists_List p, Lists_List l, unsigned int i)
+static void RemoveItem (Lists_List__opaque p, Lists_List__opaque l, unsigned int i)
 {
   l->NoOfElements -= 1;
   while (i <= l->NoOfElements)
@@ -166,8 +163,8 @@  static void RemoveItem (Lists_List p, Lists_List l, unsigned int i)
 extern "C" void Lists_InitList (Lists_List *l)
 {
   Storage_ALLOCATE ((void **) &(*l), sizeof (Lists_list));
-  (*l)->NoOfElements = 0;
-  (*l)->Next = NULL;
+  static_cast<Lists_List__opaque> ((*l))->NoOfElements = 0;
+  static_cast<Lists_List__opaque> ((*l))->Next = static_cast<Lists_List__opaque> (NULL);
 }
 
 
@@ -179,9 +176,9 @@  extern "C" void Lists_KillList (Lists_List *l)
 {
   if ((*l) != NULL)
     {
-      if ((*l)->Next != NULL)
+      if (static_cast<Lists_List__opaque> ((*l))->Next != NULL)
         {
-          Lists_KillList (&(*l)->Next);
+          Lists_KillList (reinterpret_cast<Lists_List *> (&static_cast<Lists_List__opaque> ((*l))->Next));
         }
       Storage_DEALLOCATE ((void **) &(*l), sizeof (Lists_list));
     }
@@ -194,21 +191,21 @@  extern "C" void Lists_KillList (Lists_List *l)
 
 extern "C" void Lists_PutItemIntoList (Lists_List l, unsigned int c)
 {
-  if (l->NoOfElements < MaxNoOfElements)
+  if (static_cast<Lists_List__opaque> (l)->NoOfElements < MaxNoOfElements)
     {
-      l->NoOfElements += 1;
-      l->Elements.array[l->NoOfElements-1] = c;
+      static_cast<Lists_List__opaque> (l)->NoOfElements += 1;
+      static_cast<Lists_List__opaque> (l)->Elements.array[static_cast<Lists_List__opaque> (l)->NoOfElements-1] = c;
     }
-  else if (l->Next != NULL)
+  else if (static_cast<Lists_List__opaque> (l)->Next != NULL)
     {
       /* avoid dangling else.  */
-      Lists_PutItemIntoList (l->Next, c);
+      Lists_PutItemIntoList (static_cast<Lists_List> (static_cast<Lists_List__opaque> (l)->Next), c);
     }
   else
     {
       /* avoid dangling else.  */
-      Lists_InitList (&l->Next);
-      Lists_PutItemIntoList (l->Next, c);
+      Lists_InitList (reinterpret_cast<Lists_List *> (&static_cast<Lists_List__opaque> (l)->Next));
+      Lists_PutItemIntoList (static_cast<Lists_List> (static_cast<Lists_List__opaque> (l)->Next), c);
     }
 }
 
@@ -217,15 +214,15 @@  extern "C" unsigned int Lists_GetItemFromList (Lists_List l, unsigned int n)
   /* iterative solution  */
   while (l != NULL)
     {
-      if (n <= l->NoOfElements)
+      if (n <= static_cast<Lists_List__opaque> (l)->NoOfElements)
         {
-          return l->Elements.array[n-1];
+          return static_cast<Lists_List__opaque> (l)->Elements.array[n-1];
         }
       else
         {
-          n -= l->NoOfElements;
+          n -= static_cast<Lists_List__opaque> (l)->NoOfElements;
         }
-      l = l->Next;
+      l = static_cast<Lists_List> (static_cast<Lists_List__opaque> (l)->Next);
     }
   return static_cast<unsigned int> (0);
   /* static analysis guarentees a RETURN statement will be used before here.  */
@@ -250,9 +247,9 @@  extern "C" unsigned int Lists_GetIndexOfList (Lists_List l, unsigned int c)
   else
     {
       i = 1;
-      while (i <= l->NoOfElements)
+      while (i <= static_cast<Lists_List__opaque> (l)->NoOfElements)
         {
-          if (l->Elements.array[i-1] == c)
+          if (static_cast<Lists_List__opaque> (l)->Elements.array[i-1] == c)
             {
               return i;
             }
@@ -261,7 +258,7 @@  extern "C" unsigned int Lists_GetIndexOfList (Lists_List l, unsigned int c)
               i += 1;
             }
         }
-      return l->NoOfElements+(Lists_GetIndexOfList (l->Next, c));
+      return static_cast<Lists_List__opaque> (l)->NoOfElements+(Lists_GetIndexOfList (static_cast<Lists_List> (static_cast<Lists_List__opaque> (l)->Next), c));
     }
   /* static analysis guarentees a RETURN statement will be used before here.  */
   __builtin_unreachable ();
@@ -285,8 +282,8 @@  extern "C" unsigned int Lists_NoOfItemsInList (Lists_List l)
     {
       t = 0;
       do {
-        t += l->NoOfElements;
-        l = l->Next;
+        t += static_cast<Lists_List__opaque> (l)->NoOfElements;
+        l = static_cast<Lists_List> (static_cast<Lists_List__opaque> (l)->Next);
       } while (! (l == NULL));
       return t;
     }
@@ -316,33 +313,33 @@  extern "C" void Lists_IncludeItemIntoList (Lists_List l, unsigned int c)
 
 extern "C" void Lists_RemoveItemFromList (Lists_List l, unsigned int c)
 {
-  Lists_List p;
+  Lists_List__opaque p;
   unsigned int i;
   bool Found;
 
   if (l != NULL)
     {
       Found = false;
-      p = NULL;
+      p = static_cast<Lists_List__opaque> (NULL);
       do {
         i = 1;
-        while ((i <= l->NoOfElements) && (l->Elements.array[i-1] != c))
+        while ((i <= static_cast<Lists_List__opaque> (l)->NoOfElements) && (static_cast<Lists_List__opaque> (l)->Elements.array[i-1] != c))
           {
             i += 1;
           }
-        if ((i <= l->NoOfElements) && (l->Elements.array[i-1] == c))
+        if ((i <= static_cast<Lists_List__opaque> (l)->NoOfElements) && (static_cast<Lists_List__opaque> (l)->Elements.array[i-1] == c))
           {
             Found = true;
           }
         else
           {
-            p = l;
-            l = l->Next;
+            p = static_cast<Lists_List__opaque> (l);
+            l = static_cast<Lists_List> (static_cast<Lists_List__opaque> (l)->Next);
           }
       } while (! ((l == NULL) || Found));
       if (Found)
         {
-          RemoveItem (p, l, i);
+          RemoveItem (p, static_cast<Lists_List__opaque> (l), i);
         }
     }
 }
@@ -358,9 +355,9 @@  extern "C" bool Lists_IsItemInList (Lists_List l, unsigned int c)
 
   do {
     i = 1;
-    while (i <= l->NoOfElements)
+    while (i <= static_cast<Lists_List__opaque> (l)->NoOfElements)
       {
-        if (l->Elements.array[i-1] == c)
+        if (static_cast<Lists_List__opaque> (l)->Elements.array[i-1] == c)
           {
             return true;
           }
@@ -369,7 +366,7 @@  extern "C" bool Lists_IsItemInList (Lists_List l, unsigned int c)
             i += 1;
           }
       }
-    l = l->Next;
+    l = static_cast<Lists_List> (static_cast<Lists_List__opaque> (l)->Next);
   } while (! (l == NULL));
   return false;
   /* static analysis guarentees a RETURN statement will be used before here.  */
@@ -402,19 +399,19 @@  extern "C" void Lists_ForeachItemInListDo (Lists_List l, SymbolKey_PerformOperat
 
 extern "C" Lists_List Lists_DuplicateList (Lists_List l)
 {
-  Lists_List m;
+  Lists_List__opaque m;
   unsigned int n;
   unsigned int i;
 
-  Lists_InitList (&m);
+  Lists_InitList (reinterpret_cast<Lists_List *> (&m));
   n = Lists_NoOfItemsInList (l);
   i = 1;
   while (i <= n)
     {
-      Lists_PutItemIntoList (m, Lists_GetItemFromList (l, i));
+      Lists_PutItemIntoList (static_cast<Lists_List> (m), Lists_GetItemFromList (l, i));
       i += 1;
     }
-  return m;
+  return static_cast<Lists_List> (m);
   /* static analysis guarentees a RETURN statement will be used before here.  */
   __builtin_unreachable ();
 }
diff --git a/gcc/m2/pge-boot/GLists.h b/gcc/m2/pge-boot/GLists.h
index e96800573286..0d92571444e9 100644
--- a/gcc/m2/pge-boot/GLists.h
+++ b/gcc/m2/pge-boot/GLists.h
@@ -24,8 +24,6 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_Lists_H)
 #   define _Lists_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GM2Dependent.cc b/gcc/m2/pge-boot/GM2Dependent.cc
index 89c80832889f..c221786011c8 100644
--- a/gcc/m2/pge-boot/GM2Dependent.cc
+++ b/gcc/m2/pge-boot/GM2Dependent.cc
@@ -50,9 +50,9 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #   undef NULL
 #   define NULL 0
 #endif
-#define _M2Dependent_H
 #define _M2Dependent_C
 
+#include "GM2Dependent.h"
 #   include "Glibc.h"
 #   include "GASCII.h"
 #   include "GSYSTEM.h"
@@ -79,9 +79,6 @@  typedef struct M2Dependent__T4_a M2Dependent__T4;
 
 typedef enum {M2Dependent_unregistered, M2Dependent_unordered, M2Dependent_started, M2Dependent_ordered, M2Dependent_user} M2Dependent_DependencyState;
 
-typedef void (*M2Dependent_ArgCVEnvP_t) (int, void *, void *);
-struct M2Dependent_ArgCVEnvP_p { M2Dependent_ArgCVEnvP_t proc; };
-
 struct M2Dependent_DependencyList_r {
                                       PROC proc;
                                       bool forced;
@@ -641,11 +638,11 @@  static void toCString (char *str, unsigned int _str_high)
         {
           if (str[i+1] == 'n')
             {
-              str[i] = ASCII_nl;
+              const_cast<char *>(str)[i] = ASCII_nl;
               j = i+1;
               while (j < high)
                 {
-                  str[j] = str[j+1];
+                  const_cast<char *>(str)[j] = str[j+1];
                   j += 1;
                 }
             }
@@ -965,7 +962,7 @@  static void DisplayModuleInfo (M2Dependent_DependencyState state, const char *de
 
   if (Modules.array[state-M2Dependent_unregistered] != NULL)
     {
-      libc_printf ((const char *) "%s modules\\n", 12, &desc);
+      libc_printf ((const char *) "%s modules\\n", 12, const_cast<void*> (static_cast<const void*>(desc)));
       mptr = Modules.array[state-M2Dependent_unregistered];
       count = 0;
       do {
@@ -1214,7 +1211,7 @@  static bool equal (void * cstr, const char *str_, unsigned int _str_high)
   /* make a local copy of each unbounded array.  */
   memcpy (str, str_, _str_high+1);
 
-  return (strncmp (reinterpret_cast<M2Dependent_PtrToChar> (cstr), reinterpret_cast<M2Dependent_PtrToChar> (&str), StrLib_StrLen ((const char *) str, _str_high))) == 0;
+  return (strncmp (reinterpret_cast <M2Dependent_PtrToChar> (cstr), reinterpret_cast <M2Dependent_PtrToChar> (const_cast<void*> (static_cast<const void*>(str))), StrLib_StrLen ((const char *) str, _str_high))) == 0;
   /* static analysis guarentees a RETURN statement will be used before here.  */
   __builtin_unreachable ();
 }
@@ -1252,7 +1249,7 @@  static void SetupDebugFlags (void)
   ForceTrace = false;
   HexTrace = false;
   WarningTrace = false;
-  pc = static_cast<SetupDebugFlags__T1> (libc_getenv (const_cast<void*> (reinterpret_cast<const void*>("GCC_M2LINK_RTFLAG"))));
+  pc = static_cast<SetupDebugFlags__T1> (libc_getenv (const_cast<void*> (static_cast<const void*>("GCC_M2LINK_RTFLAG"))));
   while ((pc != NULL) && ((*pc) != ASCII_nul))
     {
       if (equal (reinterpret_cast<void *> (pc), (const char *) "all", 3))
diff --git a/gcc/m2/pge-boot/GM2Dependent.h b/gcc/m2/pge-boot/GM2Dependent.h
index 0353236f8c1c..29c61f695095 100644
--- a/gcc/m2/pge-boot/GM2Dependent.h
+++ b/gcc/m2/pge-boot/GM2Dependent.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_M2Dependent_H)
 #   define _M2Dependent_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GM2EXCEPTION.cc b/gcc/m2/pge-boot/GM2EXCEPTION.cc
index 274f29a9553b..e9fc91b0ad02 100644
--- a/gcc/m2/pge-boot/GM2EXCEPTION.cc
+++ b/gcc/m2/pge-boot/GM2EXCEPTION.cc
@@ -34,14 +34,12 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 
 #include <limits.h>
 #   include "Gmcrts.h"
-#define _M2EXCEPTION_H
 #define _M2EXCEPTION_C
 
+#include "GM2EXCEPTION.h"
 #   include "GSYSTEM.h"
 #   include "GRTExceptions.h"
 
-typedef enum {M2EXCEPTION_indexException, M2EXCEPTION_rangeException, M2EXCEPTION_caseSelectException, M2EXCEPTION_invalidLocation, M2EXCEPTION_functionException, M2EXCEPTION_wholeValueException, M2EXCEPTION_wholeDivException, M2EXCEPTION_realValueException, M2EXCEPTION_realDivException, M2EXCEPTION_complexValueException, M2EXCEPTION_complexDivException, M2EXCEPTION_protException, M2EXCEPTION_sysException, M2EXCEPTION_coException, M2EXCEPTION_exException} M2EXCEPTION_M2Exceptions;
-
 extern "C" M2EXCEPTION_M2Exceptions M2EXCEPTION_M2Exception (void);
 extern "C" bool M2EXCEPTION_IsM2Exception (void);
 
@@ -57,7 +55,7 @@  extern "C" M2EXCEPTION_M2Exceptions M2EXCEPTION_M2Exception (void)
   n = RTExceptions_GetNumber (e);
   if (n == (UINT_MAX))
     {
-      RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_exException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc/m2/gm2-libs/M2EXCEPTION.mod")), 47, 6, const_cast<void*> (reinterpret_cast<const void*>("M2Exception")), const_cast<void*> (reinterpret_cast<const void*>("current coroutine is not in the exceptional execution state")));
+      RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_exException)), const_cast<void*> (static_cast<const void*>("../../gcc/m2/gm2-libs/M2EXCEPTION.mod")), 47, 6, const_cast<void*> (static_cast<const void*>("M2Exception")), const_cast<void*> (static_cast<const void*>("current coroutine is not in the exceptional execution state")));
     }
   else
     {
diff --git a/gcc/m2/pge-boot/GM2EXCEPTION.h b/gcc/m2/pge-boot/GM2EXCEPTION.h
index 4ee5404733c2..5fd59cfa0a60 100644
--- a/gcc/m2/pge-boot/GM2EXCEPTION.h
+++ b/gcc/m2/pge-boot/GM2EXCEPTION.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_M2EXCEPTION_H)
 #   define _M2EXCEPTION_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GM2RTS.cc b/gcc/m2/pge-boot/GM2RTS.cc
index ef5f7cf5ce1e..761bb824b376 100644
--- a/gcc/m2/pge-boot/GM2RTS.cc
+++ b/gcc/m2/pge-boot/GM2RTS.cc
@@ -25,8 +25,6 @@  a copy of the GCC Runtime Library Exception along with this program;
 see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 <http://www.gnu.org/licenses/>.  */
 
-#include "config.h"
-#include "system.h"
 #include <stdbool.h>
 #   if !defined (PROC_D)
 #      define PROC_D
@@ -42,6 +40,10 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #      define FALSE (1==0)
 #   endif
 
+#include <string.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <unistd.h>
 #define _M2RTS_C
 
 #include "GM2RTS.h"
@@ -133,7 +135,7 @@  extern "C" void M2RTS_ExecuteTerminationProcedures (void);
                not call ExecuteTerminationProcedures.
 */
 
-extern "C" void M2RTS_Terminate (void) __attribute__ ((noreturn));
+extern "C" void M2RTS_Terminate (void);
 
 /*
    HALT - terminate the current program.  The procedure
@@ -146,7 +148,7 @@  extern "C" void M2RTS_Terminate (void) __attribute__ ((noreturn));
           then calling HALT with no parameter.
 */
 
-extern "C" void M2RTS_HALT (int exitcode) __attribute__ ((noreturn));
+extern "C" void M2RTS_HALT (int exitcode);
 
 /*
    Halt - provides a more user friendly version of HALT, which takes
@@ -154,7 +156,7 @@  extern "C" void M2RTS_HALT (int exitcode) __attribute__ ((noreturn));
           to stderr and calls exit (1).
 */
 
-extern "C" void M2RTS_Halt (const char *description_, unsigned int _description_high, const char *filename_, unsigned int _filename_high, const char *function_, unsigned int _function_high, unsigned int line) __attribute__ ((noreturn));
+extern "C" void M2RTS_Halt (const char *description_, unsigned int _description_high, const char *filename_, unsigned int _filename_high, const char *function_, unsigned int _function_high, unsigned int line);
 
 /*
    HaltC - provides a more user friendly version of HALT, which takes
@@ -162,7 +164,7 @@  extern "C" void M2RTS_Halt (const char *description_, unsigned int _description_
            to stderr and calls exit (1).
 */
 
-extern "C" void M2RTS_HaltC (void * description, void * filename, void * function, unsigned int line) __attribute__ ((noreturn));
+extern "C" void M2RTS_HaltC (void * description, void * filename, void * function, unsigned int line);
 
 /*
    ExitOnHalt - if HALT is executed then call exit with the exit code, e.
@@ -174,7 +176,7 @@  extern "C" void M2RTS_ExitOnHalt (int e);
    ErrorMessage - emits an error message to stderr and then calls exit (1).
 */
 
-extern "C" void M2RTS_ErrorMessage (const char *message_, unsigned int _message_high, const char *filename_, unsigned int _filename_high, unsigned int line, const char *function_, unsigned int _function_high) __attribute__ ((noreturn));
+extern "C" void M2RTS_ErrorMessage (const char *message_, unsigned int _message_high, const char *filename_, unsigned int _filename_high, unsigned int line, const char *function_, unsigned int _function_high);
 
 /*
    Length - returns the length of a string, a. This is called whenever
@@ -183,30 +185,30 @@  extern "C" void M2RTS_ErrorMessage (const char *message_, unsigned int _message_
 */
 
 extern "C" unsigned int M2RTS_Length (const char *a_, unsigned int _a_high);
-extern "C" void M2RTS_AssignmentException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_ReturnException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_IncException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_DecException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_InclException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_ExclException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_ShiftException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_RotateException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_StaticArraySubscriptException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_DynamicArraySubscriptException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_ForLoopBeginException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_ForLoopToException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_ForLoopEndException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_PointerNilException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_NoReturnException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_CaseException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_WholeNonPosDivException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_WholeNonPosModException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_WholeZeroDivException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_WholeZeroRemException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_WholeValueException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_RealValueException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_ParameterException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
-extern "C" void M2RTS_NoException (void * filename, unsigned int line, unsigned int column, void * scope, void * message) __attribute__ ((noreturn));
+extern "C" void M2RTS_AssignmentException (void * filename, unsigned int line, unsigned int column, void * scope, void * message);
+extern "C" void M2RTS_ReturnException (void * filename, unsigned int line, unsigned int column, void * scope, void * message);
+extern "C" void M2RTS_IncException (void * filename, unsigned int line, unsigned int column, void * scope, void * message);
+extern "C" void M2RTS_DecException (void * filename, unsigned int line, unsigned int column, void * scope, void * message);
+extern "C" void M2RTS_InclException (void * filename, unsigned int line, unsigned int column, void * scope, void * message);
+extern "C" void M2RTS_ExclException (void * filename, unsigned int line, unsigned int column, void * scope, void * message);
+extern "C" void M2RTS_ShiftException (void * filename, unsigned int line, unsigned int column, void * scope, void * message);
+extern "C" void M2RTS_RotateException (void * filename, unsigned int line, unsigned int column, void * scope, void * message);
+extern "C" void M2RTS_StaticArraySubscriptException (void * filename, unsigned int line, unsigned int column, void * scope, void * message);
+extern "C" void M2RTS_DynamicArraySubscriptException (void * filename, unsigned int line, unsigned int column, void * scope, void * message);
+extern "C" void M2RTS_ForLoopBeginException (void * filename, unsigned int line, unsigned int column, void * scope, void * message);
+extern "C" void M2RTS_ForLoopToException (void * filename, unsigned int line, unsigned int column, void * scope, void * message);
+extern "C" void M2RTS_ForLoopEndException (void * filename, unsigned int line, unsigned int column, void * scope, void * message);
+extern "C" void M2RTS_PointerNilException (void * filename, unsigned int line, unsigned int column, void * scope, void * message);
+extern "C" void M2RTS_NoReturnException (void * filename, unsigned int line, unsigned int column, void * scope, void * message);
+extern "C" void M2RTS_CaseException (void * filename, unsigned int line, unsigned int column, void * scope, void * message);
+extern "C" void M2RTS_WholeNonPosDivException (void * filename, unsigned int line, unsigned int column, void * scope, void * message);
+extern "C" void M2RTS_WholeNonPosModException (void * filename, unsigned int line, unsigned int column, void * scope, void * message);
+extern "C" void M2RTS_WholeZeroDivException (void * filename, unsigned int line, unsigned int column, void * scope, void * message);
+extern "C" void M2RTS_WholeZeroRemException (void * filename, unsigned int line, unsigned int column, void * scope, void * message);
+extern "C" void M2RTS_WholeValueException (void * filename, unsigned int line, unsigned int column, void * scope, void * message);
+extern "C" void M2RTS_RealValueException (void * filename, unsigned int line, unsigned int column, void * scope, void * message);
+extern "C" void M2RTS_ParameterException (void * filename, unsigned int line, unsigned int column, void * scope, void * message);
+extern "C" void M2RTS_NoException (void * filename, unsigned int line, unsigned int column, void * scope, void * message);
 
 /*
    ErrorString - writes a string to stderr.
@@ -224,7 +226,7 @@  static void ErrorStringC (void * str);
    ErrorMessageC - emits an error message to stderr and then calls exit (1).
 */
 
-static void ErrorMessageC (void * message, void * filename, unsigned int line, void * function) __attribute__ ((noreturn));
+static void ErrorMessageC (void * message, void * filename, unsigned int line, void * function);
 
 /*
    Init - initialize the initial, terminate procedure lists and booleans.
diff --git a/gcc/m2/pge-boot/GM2RTS.h b/gcc/m2/pge-boot/GM2RTS.h
index 055cc95675ba..df0367808be2 100644
--- a/gcc/m2/pge-boot/GM2RTS.h
+++ b/gcc/m2/pge-boot/GM2RTS.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_M2RTS_H)
 #   define _M2RTS_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GNameKey.cc b/gcc/m2/pge-boot/GNameKey.cc
index 52b90a03cf67..98bb148cc43f 100644
--- a/gcc/m2/pge-boot/GNameKey.cc
+++ b/gcc/m2/pge-boot/GNameKey.cc
@@ -44,9 +44,9 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #   undef NULL
 #   define NULL 0
 #endif
-#define _NameKey_H
 #define _NameKey_C
 
+#include "GNameKey.h"
 #   include "GSYSTEM.h"
 #   include "GStorage.h"
 #   include "GIndexing.h"
@@ -401,13 +401,13 @@  extern "C" void NameKey_GetKey (NameKey_Name key, char *a, unsigned int _a_high)
   higha = _a_high;
   while (((p != NULL) && (i <= higha)) && ((*p) != ASCII_nul))
     {
-      a[i] = (*p);
+      const_cast<char *>(a)[i] = (*p);
       p += 1;
       i += 1;
     }
   if (i <= higha)
     {
-      a[i] = ASCII_nul;
+      const_cast<char *>(a)[i] = ASCII_nul;
     }
 }
 
diff --git a/gcc/m2/pge-boot/GNameKey.h b/gcc/m2/pge-boot/GNameKey.h
index bb003f79d38b..fc80892eaca1 100644
--- a/gcc/m2/pge-boot/GNameKey.h
+++ b/gcc/m2/pge-boot/GNameKey.h
@@ -24,8 +24,6 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_NameKey_H)
 #   define _NameKey_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GNumberIO.cc b/gcc/m2/pge-boot/GNumberIO.cc
index 04e9d3cb084f..f6a8b6fb3f9e 100644
--- a/gcc/m2/pge-boot/GNumberIO.cc
+++ b/gcc/m2/pge-boot/GNumberIO.cc
@@ -43,9 +43,9 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #include <string.h>
 #include <limits.h>
 #include <stdlib.h>
-#define _NumberIO_H
 #define _NumberIO_C
 
+#include "GNumberIO.h"
 #   include "GASCII.h"
 #   include "GStrIO.h"
 #   include "GStrLib.h"
@@ -173,19 +173,19 @@  extern "C" void NumberIO_CardToStr (unsigned int x, unsigned int n, char *a, uns
   Higha = _a_high;
   while ((n > i) && (j <= Higha))
     {
-      a[j] = ' ';
+      const_cast<char *>(a)[j] = ' ';
       j += 1;
       n -= 1;
     }
   while ((i > 0) && (j <= Higha))
     {
-      a[j] = ((char) (buf.array[i-1]+ ((unsigned int) ('0'))));
+      const_cast<char *>(a)[j] = ((char) (buf.array[i-1]+ ((unsigned int) ('0'))));
       j += 1;
       i -= 1;
     }
   if (j <= Higha)
     {
-      a[j] = ASCII_nul;
+      const_cast<char *>(a)[j] = ASCII_nul;
     }
 }
 
@@ -271,7 +271,7 @@  extern "C" void NumberIO_HexToStr (unsigned int x, unsigned int n, char *a, unsi
   Higha = _a_high;
   while ((n > i) && (j <= Higha))
     {
-      a[j] = '0';
+      const_cast<char *>(a)[j] = '0';
       j += 1;
       n -= 1;
     }
@@ -279,18 +279,18 @@  extern "C" void NumberIO_HexToStr (unsigned int x, unsigned int n, char *a, unsi
     {
       if (buf.array[i-1] < 10)
         {
-          a[j] = ((char) (buf.array[i-1]+ ((unsigned int) ('0'))));
+          const_cast<char *>(a)[j] = ((char) (buf.array[i-1]+ ((unsigned int) ('0'))));
         }
       else
         {
-          a[j] = ((char) ((buf.array[i-1]+ ((unsigned int) ('A')))-10));
+          const_cast<char *>(a)[j] = ((char) ((buf.array[i-1]+ ((unsigned int) ('A')))-10));
         }
       j += 1;
       i -= 1;
     }
   if (j <= Higha)
     {
-      a[j] = ASCII_nul;
+      const_cast<char *>(a)[j] = ASCII_nul;
     }
 }
 
@@ -350,24 +350,24 @@  extern "C" void NumberIO_IntToStr (int x, unsigned int n, char *a, unsigned int
   Higha = _a_high;
   while ((n > i) && (j <= Higha))
     {
-      a[j] = ' ';
+      const_cast<char *>(a)[j] = ' ';
       j += 1;
       n -= 1;
     }
   if (Negative)
     {
-      a[j] = '-';
+      const_cast<char *>(a)[j] = '-';
       j += 1;
     }
   while ((i != 0) && (j <= Higha))
     {
-      a[j] = ((char) (buf.array[i-1]+ ((unsigned int) ('0'))));
+      const_cast<char *>(a)[j] = ((char) (buf.array[i-1]+ ((unsigned int) ('0'))));
       j += 1;
       i -= 1;
     }
   if (j <= Higha)
     {
-      a[j] = ASCII_nul;
+      const_cast<char *>(a)[j] = ASCII_nul;
     }
 }
 
@@ -491,19 +491,19 @@  extern "C" void NumberIO_OctToStr (unsigned int x, unsigned int n, char *a, unsi
   Higha = _a_high;
   while ((n > i) && (j <= Higha))
     {
-      a[j] = ' ';
+      const_cast<char *>(a)[j] = ' ';
       j += 1;
       n -= 1;
     }
   while ((i > 0) && (j <= Higha))
     {
-      a[j] = ((char) (buf.array[i-1]+ ((unsigned int) ('0'))));
+      const_cast<char *>(a)[j] = ((char) (buf.array[i-1]+ ((unsigned int) ('0'))));
       j += 1;
       i -= 1;
     }
   if (j <= Higha)
     {
-      a[j] = ASCII_nul;
+      const_cast<char *>(a)[j] = ASCII_nul;
     }
 }
 
@@ -568,19 +568,19 @@  extern "C" void NumberIO_BinToStr (unsigned int x, unsigned int n, char *a, unsi
   Higha = _a_high;
   while ((n > i) && (j <= Higha))
     {
-      a[j] = ' ';
+      const_cast<char *>(a)[j] = ' ';
       j += 1;
       n -= 1;
     }
   while ((i > 0) && (j <= Higha))
     {
-      a[j] = ((char) (buf.array[i-1]+ ((unsigned int) ('0'))));
+      const_cast<char *>(a)[j] = ((char) (buf.array[i-1]+ ((unsigned int) ('0'))));
       j += 1;
       i -= 1;
     }
   if (j <= Higha)
     {
-      a[j] = ASCII_nul;
+      const_cast<char *>(a)[j] = ASCII_nul;
     }
 }
 
diff --git a/gcc/m2/pge-boot/GNumberIO.h b/gcc/m2/pge-boot/GNumberIO.h
index 34aee3373836..3da6f1aa971a 100644
--- a/gcc/m2/pge-boot/GNumberIO.h
+++ b/gcc/m2/pge-boot/GNumberIO.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_NumberIO_H)
 #   define _NumberIO_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GOutput.cc b/gcc/m2/pge-boot/GOutput.cc
index f6d85004899c..c4f4705efab3 100644
--- a/gcc/m2/pge-boot/GOutput.cc
+++ b/gcc/m2/pge-boot/GOutput.cc
@@ -42,9 +42,9 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #   undef NULL
 #   define NULL 0
 #endif
-#define _Output_H
 #define _Output_C
 
+#include "GOutput.h"
 #   include "GFIO.h"
 #   include "GSFIO.h"
 #   include "GStrLib.h"
diff --git a/gcc/m2/pge-boot/GOutput.h b/gcc/m2/pge-boot/GOutput.h
index 79feda8f7906..c95c77d51645 100644
--- a/gcc/m2/pge-boot/GOutput.h
+++ b/gcc/m2/pge-boot/GOutput.h
@@ -24,8 +24,6 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_Output_H)
 #   define _Output_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GPushBackInput.cc b/gcc/m2/pge-boot/GPushBackInput.cc
index 6fb0fbea9d30..eed28e2d9cc6 100644
--- a/gcc/m2/pge-boot/GPushBackInput.cc
+++ b/gcc/m2/pge-boot/GPushBackInput.cc
@@ -43,9 +43,9 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #   undef NULL
 #   define NULL 0
 #endif
-#define _PushBackInput_H
 #define _PushBackInput_C
 
+#include "GPushBackInput.h"
 #   include "GFIO.h"
 #   include "GDynamicStrings.h"
 #   include "GASCII.h"
diff --git a/gcc/m2/pge-boot/GPushBackInput.h b/gcc/m2/pge-boot/GPushBackInput.h
index 076b99657a07..7b441796c8e6 100644
--- a/gcc/m2/pge-boot/GPushBackInput.h
+++ b/gcc/m2/pge-boot/GPushBackInput.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_PushBackInput_H)
 #   define _PushBackInput_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GRTExceptions.cc b/gcc/m2/pge-boot/GRTExceptions.cc
index 2b6557eb7be9..b4ebe6d2a45c 100644
--- a/gcc/m2/pge-boot/GRTExceptions.cc
+++ b/gcc/m2/pge-boot/GRTExceptions.cc
@@ -50,9 +50,9 @@  extern void throw (unsigned int);
 #   undef NULL
 #   define NULL 0
 #endif
-#define _RTExceptions_H
 #define _RTExceptions_C
 
+#include "GRTExceptions.h"
 #   include "GASCII.h"
 #   include "GStrLib.h"
 #   include "GStorage.h"
@@ -75,17 +75,14 @@  typedef struct RTExceptions__T3_r RTExceptions__T3;
 
 typedef RTExceptions__T3 *RTExceptions_Handler;
 
-typedef RTExceptions__T1 *RTExceptions_EHBlock;
-
-typedef void (*RTExceptions_ProcedureHandler_t) (void);
-struct RTExceptions_ProcedureHandler_p { RTExceptions_ProcedureHandler_t proc; };
+typedef RTExceptions__T1 *RTExceptions_EHBlock__opaque;
 
 struct RTExceptions__T2_a { char array[MaxBuffer+1]; };
 struct RTExceptions__T1_r {
                             RTExceptions__T2 buffer;
                             unsigned int number;
                             RTExceptions_Handler handlers;
-                            RTExceptions_EHBlock right;
+                            RTExceptions_EHBlock__opaque right;
                           };
 
 struct RTExceptions__T3_r {
@@ -98,8 +95,8 @@  struct RTExceptions__T3_r {
 
 static bool inException;
 static RTExceptions_Handler freeHandler;
-static RTExceptions_EHBlock freeEHB;
-static RTExceptions_EHBlock currentEHB;
+static RTExceptions_EHBlock__opaque freeEHB;
+static RTExceptions_EHBlock__opaque currentEHB;
 static void * currentSource;
 
 /*
@@ -236,7 +233,7 @@  static void ErrorString (const char *a_, unsigned int _a_high);
    findHandler -
 */
 
-static RTExceptions_Handler findHandler (RTExceptions_EHBlock e, unsigned int number);
+static RTExceptions_Handler findHandler (RTExceptions_EHBlock__opaque e, unsigned int number);
 
 /*
    InvokeHandler - invokes the associated handler for the current
@@ -289,7 +286,7 @@  static void addNum (unsigned int n, unsigned int *i);
    New - returns a new EHBlock.
 */
 
-static RTExceptions_EHBlock New (void);
+static RTExceptions_EHBlock__opaque New (void);
 
 /*
    NewHandler - returns a new handler.
@@ -325,7 +322,7 @@  static void SubHandler (RTExceptions_Handler h);
    AddHandler - add, e, to the end of the list of handlers.
 */
 
-static void AddHandler (RTExceptions_EHBlock e, RTExceptions_Handler h);
+static void AddHandler (RTExceptions_EHBlock__opaque e, RTExceptions_Handler h);
 
 /*
    indexf - raise an index out of bounds exception.
@@ -442,7 +439,7 @@  static void ErrorString (const char *a_, unsigned int _a_high)
   /* make a local copy of each unbounded array.  */
   memcpy (a, a_, _a_high+1);
 
-  n = static_cast<int> (libc_write (2, &a, static_cast<size_t> (StrLib_StrLen ((const char *) a, _a_high))));
+  n = static_cast<int> (libc_write (2, const_cast<void*> (static_cast<const void*>(a)), static_cast<size_t> (StrLib_StrLen ((const char *) a, _a_high))));
 }
 
 
@@ -450,7 +447,7 @@  static void ErrorString (const char *a_, unsigned int _a_high)
    findHandler -
 */
 
-static RTExceptions_Handler findHandler (RTExceptions_EHBlock e, unsigned int number)
+static RTExceptions_Handler findHandler (RTExceptions_EHBlock__opaque e, unsigned int number)
 {
   RTExceptions_Handler h;
 
@@ -543,7 +540,7 @@  static void * stripPath (void * s)
           p += 1;
         }
     }
-  return reinterpret_cast<void *> (f);
+  return static_cast<void *> (f);
   /* static analysis guarentees a RETURN statement will be used before here.  */
   __builtin_unreachable ();
 }
@@ -608,9 +605,9 @@  static void addNum (unsigned int n, unsigned int *i)
    New - returns a new EHBlock.
 */
 
-static RTExceptions_EHBlock New (void)
+static RTExceptions_EHBlock__opaque New (void)
 {
-  RTExceptions_EHBlock e;
+  RTExceptions_EHBlock__opaque e;
 
   if (freeEHB == NULL)
     {
@@ -710,7 +707,7 @@  static void SubHandler (RTExceptions_Handler h)
    AddHandler - add, e, to the end of the list of handlers.
 */
 
-static void AddHandler (RTExceptions_EHBlock e, RTExceptions_Handler h)
+static void AddHandler (RTExceptions_EHBlock__opaque e, RTExceptions_Handler h)
 {
   h->right = e->handlers;
   h->left = e->handlers->left;
@@ -725,7 +722,7 @@  static void AddHandler (RTExceptions_EHBlock e, RTExceptions_Handler h)
 
 static void indexf (void * a)
 {
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_indexException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 614, 9, const_cast<void*> (reinterpret_cast<const void*>("indexf")), const_cast<void*> (reinterpret_cast<const void*>("array index out of bounds")));
+  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_indexException)), const_cast<void*> (static_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 614, 9, const_cast<void*> (static_cast<const void*>("indexf")), const_cast<void*> (static_cast<const void*>("array index out of bounds")));
 }
 
 
@@ -735,7 +732,7 @@  static void indexf (void * a)
 
 static void range (void * a)
 {
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_rangeException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 626, 9, const_cast<void*> (reinterpret_cast<const void*>("range")), const_cast<void*> (reinterpret_cast<const void*>("assignment out of range")));
+  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_rangeException)), const_cast<void*> (static_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 626, 9, const_cast<void*> (static_cast<const void*>("range")), const_cast<void*> (static_cast<const void*>("assignment out of range")));
 }
 
 
@@ -745,7 +742,7 @@  static void range (void * a)
 
 static void casef (void * a)
 {
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_caseSelectException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 638, 9, const_cast<void*> (reinterpret_cast<const void*>("casef")), const_cast<void*> (reinterpret_cast<const void*>("case selector out of range")));
+  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_caseSelectException)), const_cast<void*> (static_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 638, 9, const_cast<void*> (static_cast<const void*>("casef")), const_cast<void*> (static_cast<const void*>("case selector out of range")));
 }
 
 
@@ -755,7 +752,7 @@  static void casef (void * a)
 
 static void invalidloc (void * a)
 {
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_invalidLocation)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 650, 9, const_cast<void*> (reinterpret_cast<const void*>("invalidloc")), const_cast<void*> (reinterpret_cast<const void*>("invalid address referenced")));
+  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_invalidLocation)), const_cast<void*> (static_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 650, 9, const_cast<void*> (static_cast<const void*>("invalidloc")), const_cast<void*> (static_cast<const void*>("invalid address referenced")));
 }
 
 
@@ -765,7 +762,7 @@  static void invalidloc (void * a)
 
 static void function (void * a)
 {
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_functionException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 662, 9, const_cast<void*> (reinterpret_cast<const void*>("function")), const_cast<void*> (reinterpret_cast<const void*>("... function ... ")));  /* --fixme-- what has happened ?  */
+  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_functionException)), const_cast<void*> (static_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 662, 9, const_cast<void*> (static_cast<const void*>("function")), const_cast<void*> (static_cast<const void*>("... function ... ")));  /* --fixme-- what has happened ?  */
 }
 
 
@@ -775,7 +772,7 @@  static void function (void * a)
 
 static void wholevalue (void * a)
 {
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_wholeValueException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 674, 9, const_cast<void*> (reinterpret_cast<const void*>("wholevalue")), const_cast<void*> (reinterpret_cast<const void*>("illegal whole value exception")));
+  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_wholeValueException)), const_cast<void*> (static_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 674, 9, const_cast<void*> (static_cast<const void*>("wholevalue")), const_cast<void*> (static_cast<const void*>("illegal whole value exception")));
 }
 
 
@@ -785,7 +782,7 @@  static void wholevalue (void * a)
 
 static void wholediv (void * a)
 {
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_wholeDivException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 686, 9, const_cast<void*> (reinterpret_cast<const void*>("wholediv")), const_cast<void*> (reinterpret_cast<const void*>("illegal whole value exception")));
+  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_wholeDivException)), const_cast<void*> (static_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 686, 9, const_cast<void*> (static_cast<const void*>("wholediv")), const_cast<void*> (static_cast<const void*>("illegal whole value exception")));
 }
 
 
@@ -795,7 +792,7 @@  static void wholediv (void * a)
 
 static void realvalue (void * a)
 {
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_realValueException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 698, 9, const_cast<void*> (reinterpret_cast<const void*>("realvalue")), const_cast<void*> (reinterpret_cast<const void*>("illegal real value exception")));
+  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_realValueException)), const_cast<void*> (static_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 698, 9, const_cast<void*> (static_cast<const void*>("realvalue")), const_cast<void*> (static_cast<const void*>("illegal real value exception")));
 }
 
 
@@ -805,7 +802,7 @@  static void realvalue (void * a)
 
 static void realdiv (void * a)
 {
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_realDivException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 710, 9, const_cast<void*> (reinterpret_cast<const void*>("realdiv")), const_cast<void*> (reinterpret_cast<const void*>("real number division by zero exception")));
+  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_realDivException)), const_cast<void*> (static_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 710, 9, const_cast<void*> (static_cast<const void*>("realdiv")), const_cast<void*> (static_cast<const void*>("real number division by zero exception")));
 }
 
 
@@ -815,7 +812,7 @@  static void realdiv (void * a)
 
 static void complexvalue (void * a)
 {
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_complexValueException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 722, 9, const_cast<void*> (reinterpret_cast<const void*>("complexvalue")), const_cast<void*> (reinterpret_cast<const void*>("illegal complex value exception")));
+  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_complexValueException)), const_cast<void*> (static_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 722, 9, const_cast<void*> (static_cast<const void*>("complexvalue")), const_cast<void*> (static_cast<const void*>("illegal complex value exception")));
 }
 
 
@@ -825,7 +822,7 @@  static void complexvalue (void * a)
 
 static void complexdiv (void * a)
 {
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_complexDivException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 734, 9, const_cast<void*> (reinterpret_cast<const void*>("complexdiv")), const_cast<void*> (reinterpret_cast<const void*>("complex number division by zero exception")));
+  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_complexDivException)), const_cast<void*> (static_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 734, 9, const_cast<void*> (static_cast<const void*>("complexdiv")), const_cast<void*> (static_cast<const void*>("complex number division by zero exception")));
 }
 
 
@@ -835,7 +832,7 @@  static void complexdiv (void * a)
 
 static void protection (void * a)
 {
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_protException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 746, 9, const_cast<void*> (reinterpret_cast<const void*>("protection")), const_cast<void*> (reinterpret_cast<const void*>("protection exception")));
+  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_protException)), const_cast<void*> (static_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 746, 9, const_cast<void*> (static_cast<const void*>("protection")), const_cast<void*> (static_cast<const void*>("protection exception")));
 }
 
 
@@ -845,7 +842,7 @@  static void protection (void * a)
 
 static void systemf (void * a)
 {
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_sysException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 758, 9, const_cast<void*> (reinterpret_cast<const void*>("systemf")), const_cast<void*> (reinterpret_cast<const void*>("system exception")));
+  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_sysException)), const_cast<void*> (static_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 758, 9, const_cast<void*> (static_cast<const void*>("systemf")), const_cast<void*> (static_cast<const void*>("system exception")));
 }
 
 
@@ -855,7 +852,7 @@  static void systemf (void * a)
 
 static void coroutine (void * a)
 {
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_coException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 770, 9, const_cast<void*> (reinterpret_cast<const void*>("coroutine")), const_cast<void*> (reinterpret_cast<const void*>("coroutine exception")));
+  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_coException)), const_cast<void*> (static_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 770, 9, const_cast<void*> (static_cast<const void*>("coroutine")), const_cast<void*> (static_cast<const void*>("coroutine exception")));
 }
 
 
@@ -865,7 +862,7 @@  static void coroutine (void * a)
 
 static void exception (void * a)
 {
-  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_exException)), const_cast<void*> (reinterpret_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 782, 9, const_cast<void*> (reinterpret_cast<const void*>("exception")), const_cast<void*> (reinterpret_cast<const void*>("exception exception")));
+  RTExceptions_Raise ( ((unsigned int) (M2EXCEPTION_exException)), const_cast<void*> (static_cast<const void*>("../../gcc/m2/gm2-libs/RTExceptions.mod")), 782, 9, const_cast<void*> (static_cast<const void*>("exception")), const_cast<void*> (static_cast<const void*>("exception exception")));
 }
 
 
@@ -877,8 +874,8 @@  static void Init (void)
 {
   inException = false;
   freeHandler = NULL;
-  freeEHB = NULL;
-  currentEHB = RTExceptions_InitExceptionBlock ();
+  freeEHB = static_cast<RTExceptions_EHBlock__opaque> (NULL);
+  currentEHB = static_cast<RTExceptions_EHBlock__opaque> (RTExceptions_InitExceptionBlock ());
   currentSource = NULL;
   RTExceptions_BaseExceptionsThrow ();
   SysExceptions_InitExceptionHandlers ((SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) indexf}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) range}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) casef}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) invalidloc}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) function}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) wholevalue}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) wholediv}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) realvalue}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) realdiv}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) complexvalue}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) complexdiv}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) protection}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) systemf}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) coroutine}, (SysExceptions_PROCEXCEPTION) {(SysExceptions_PROCEXCEPTION_t) exception});
@@ -892,11 +889,11 @@  static void Init (void)
 static void TidyUp (void)
 {
   RTExceptions_Handler f;
-  RTExceptions_EHBlock e;
+  RTExceptions_EHBlock__opaque e;
 
   if (currentEHB != NULL)
     {
-      currentEHB = RTExceptions_KillExceptionBlock (currentEHB);
+      currentEHB = static_cast<RTExceptions_EHBlock__opaque> (RTExceptions_KillExceptionBlock (static_cast<RTExceptions_EHBlock> (currentEHB)));
     }
   while (freeHandler != NULL)
     {
@@ -956,7 +953,7 @@  extern "C" void RTExceptions_Raise (unsigned int number, void * file, unsigned i
 
 extern "C" void RTExceptions_SetExceptionBlock (RTExceptions_EHBlock source)
 {
-  currentEHB = source;
+  currentEHB = static_cast<RTExceptions_EHBlock__opaque> (source);
 }
 
 
@@ -966,7 +963,7 @@  extern "C" void RTExceptions_SetExceptionBlock (RTExceptions_EHBlock source)
 
 extern "C" RTExceptions_EHBlock RTExceptions_GetExceptionBlock (void)
 {
-  return currentEHB;
+  return static_cast<RTExceptions_EHBlock> (currentEHB);
   /* static analysis guarentees a RETURN statement will be used before here.  */
   __builtin_unreachable ();
 }
@@ -978,7 +975,7 @@  extern "C" RTExceptions_EHBlock RTExceptions_GetExceptionBlock (void)
 
 extern "C" void * RTExceptions_GetTextBuffer (RTExceptions_EHBlock e)
 {
-  return &e->buffer;
+  return &static_cast<RTExceptions_EHBlock__opaque> (e)->buffer;
   /* static analysis guarentees a RETURN statement will be used before here.  */
   __builtin_unreachable ();
 }
@@ -990,7 +987,7 @@  extern "C" void * RTExceptions_GetTextBuffer (RTExceptions_EHBlock e)
 
 extern "C" unsigned int RTExceptions_GetTextBufferSize (RTExceptions_EHBlock e)
 {
-  return sizeof (e->buffer);
+  return sizeof (static_cast<RTExceptions_EHBlock__opaque> (e)->buffer);
   /* static analysis guarentees a RETURN statement will be used before here.  */
   __builtin_unreachable ();
 }
@@ -1003,7 +1000,7 @@  extern "C" unsigned int RTExceptions_GetTextBufferSize (RTExceptions_EHBlock e)
 
 extern "C" unsigned int RTExceptions_GetNumber (RTExceptions_EHBlock source)
 {
-  return source->number;
+  return static_cast<RTExceptions_EHBlock__opaque> (source)->number;
   /* static analysis guarentees a RETURN statement will be used before here.  */
   __builtin_unreachable ();
 }
@@ -1015,7 +1012,7 @@  extern "C" unsigned int RTExceptions_GetNumber (RTExceptions_EHBlock source)
 
 extern "C" RTExceptions_EHBlock RTExceptions_InitExceptionBlock (void)
 {
-  RTExceptions_EHBlock e;
+  RTExceptions_EHBlock__opaque e;
 
   e = New ();
   e->number = UINT_MAX;
@@ -1023,7 +1020,7 @@  extern "C" RTExceptions_EHBlock RTExceptions_InitExceptionBlock (void)
   e->handlers->right = e->handlers;  /* add the dummy onto the head  */
   e->handlers->left = e->handlers;
   e->right = e;
-  return e;
+  return static_cast<RTExceptions_EHBlock> (e);
   /* static analysis guarentees a RETURN statement will be used before here.  */
   __builtin_unreachable ();
 }
@@ -1035,10 +1032,10 @@  extern "C" RTExceptions_EHBlock RTExceptions_InitExceptionBlock (void)
 
 extern "C" RTExceptions_EHBlock RTExceptions_KillExceptionBlock (RTExceptions_EHBlock e)
 {
-  e->handlers = KillHandlers (e->handlers);
-  e->right = freeEHB;
-  freeEHB = e;
-  return NULL;
+  static_cast<RTExceptions_EHBlock__opaque> (e)->handlers = KillHandlers (static_cast<RTExceptions_EHBlock__opaque> (e)->handlers);
+  static_cast<RTExceptions_EHBlock__opaque> (e)->right = freeEHB;
+  freeEHB = static_cast<RTExceptions_EHBlock__opaque> (e);
+  return static_cast<RTExceptions_EHBlock> (NULL);
   /* static analysis guarentees a RETURN statement will be used before here.  */
   __builtin_unreachable ();
 }
@@ -1053,7 +1050,7 @@  extern "C" void RTExceptions_PushHandler (RTExceptions_EHBlock e, unsigned int n
   RTExceptions_Handler h;
   RTExceptions_Handler i;
 
-  h = findHandler (e, number);
+  h = findHandler (static_cast<RTExceptions_EHBlock__opaque> (e), number);
   if (h == NULL)
     {
       i = InitHandler (NewHandler (), NULL, NULL, NULL, number, p);
@@ -1066,7 +1063,7 @@  extern "C" void RTExceptions_PushHandler (RTExceptions_EHBlock e, unsigned int n
       i = InitHandler (NewHandler (), NULL, NULL, h, number, p);
     }
   /* add new handler  */
-  AddHandler (e, i);
+  AddHandler (static_cast<RTExceptions_EHBlock__opaque> (e), i);
 }
 
 
@@ -1079,14 +1076,14 @@  extern "C" void RTExceptions_PopHandler (RTExceptions_EHBlock e, unsigned int nu
 {
   RTExceptions_Handler h;
 
-  h = findHandler (e, number);
+  h = findHandler (static_cast<RTExceptions_EHBlock__opaque> (e), number);
   if (h != NULL)
     {
       /* remove, h,  */
       SubHandler (h);
       if (h->stack != NULL)
         {
-          AddHandler (e, h->stack);
+          AddHandler (static_cast<RTExceptions_EHBlock__opaque> (e), h->stack);
         }
       h = KillHandler (h);
     }
@@ -1101,11 +1098,11 @@  extern "C" void RTExceptions_PopHandler (RTExceptions_EHBlock e, unsigned int nu
 
 extern "C" void RTExceptions_DefaultErrorCatch (void)
 {
-  RTExceptions_EHBlock e;
+  RTExceptions_EHBlock__opaque e;
   int n;
 
-  e = RTExceptions_GetExceptionBlock ();
-  n = static_cast<int> (libc_write (2, RTExceptions_GetTextBuffer (e), libc_strlen (RTExceptions_GetTextBuffer (e))));
+  e = static_cast<RTExceptions_EHBlock__opaque> (RTExceptions_GetExceptionBlock ());
+  n = static_cast<int> (libc_write (2, RTExceptions_GetTextBuffer (static_cast<RTExceptions_EHBlock> (e)), libc_strlen (RTExceptions_GetTextBuffer (static_cast<RTExceptions_EHBlock> (e)))));
   M2RTS_HALT (-1);
   __builtin_unreachable ();
 }
@@ -1187,7 +1184,7 @@  extern "C" RTExceptions_EHBlock RTExceptions_GetBaseExceptionBlock (void)
     }
   else
     {
-      return currentEHB;
+      return static_cast<RTExceptions_EHBlock> (currentEHB);
     }
   ReturnException ("../../gcc/m2/gm2-libs/RTExceptions.def", 25, 1);
   __builtin_unreachable ();
diff --git a/gcc/m2/pge-boot/GRTExceptions.h b/gcc/m2/pge-boot/GRTExceptions.h
index 9e188bcbad4d..631a4acd4c7a 100644
--- a/gcc/m2/pge-boot/GRTExceptions.h
+++ b/gcc/m2/pge-boot/GRTExceptions.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_RTExceptions_H)
 #   define _RTExceptions_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GSArgs.h b/gcc/m2/pge-boot/GSArgs.h
index a7b10bf4a1f3..4fe04d725e92 100644
--- a/gcc/m2/pge-boot/GSArgs.h
+++ b/gcc/m2/pge-boot/GSArgs.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_SArgs_H)
 #   define _SArgs_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GSEnvironment.h b/gcc/m2/pge-boot/GSEnvironment.h
index ba607238f32c..ccd96b7994d6 100644
--- a/gcc/m2/pge-boot/GSEnvironment.h
+++ b/gcc/m2/pge-boot/GSEnvironment.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_SEnvironment_H)
 #   define _SEnvironment_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/pge-boot/GSFIO.cc b/gcc/m2/pge-boot/GSFIO.cc
index 3c0dad0bc006..9d7c603baf01 100644
--- a/gcc/m2/pge-boot/GSFIO.cc
+++ b/gcc/m2/pge-boot/GSFIO.cc
@@ -37,9 +37,9 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #   undef NULL
 #   define NULL 0
 #endif
-#define _SFIO_H
 #define _SFIO_C
 
+#include "GSFIO.h"
 #   include "GASCII.h"
 #   include "GDynamicStrings.h"
 #   include "GFIO.h"
diff --git a/gcc/m2/pge-boot/GSFIO.h b/gcc/m2/pge-boot/GSFIO.h
index 108d8ea79f06..2926596c7d72 100644
--- a/gcc/m2/pge-boot/GSFIO.h
+++ b/gcc/m2/pge-boot/GSFIO.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_SFIO_H)
 #   define _SFIO_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GSYSTEM.h b/gcc/m2/pge-boot/GSYSTEM.h
index a18a1765dc53..79f08c1868df 100644
--- a/gcc/m2/pge-boot/GSYSTEM.h
+++ b/gcc/m2/pge-boot/GSYSTEM.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_SYSTEM_H)
 #   define _SYSTEM_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GScan.h b/gcc/m2/pge-boot/GScan.h
index e059cdc6473e..ed3e780612b1 100644
--- a/gcc/m2/pge-boot/GScan.h
+++ b/gcc/m2/pge-boot/GScan.h
@@ -29,6 +29,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_Scan_H)
 #   define _Scan_H
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #   ifdef __cplusplus
diff --git a/gcc/m2/pge-boot/GStdIO.cc b/gcc/m2/pge-boot/GStdIO.cc
index cf02566757dc..689ed3b7f574 100644
--- a/gcc/m2/pge-boot/GStdIO.cc
+++ b/gcc/m2/pge-boot/GStdIO.cc
@@ -33,9 +33,9 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #   endif
 
 #   include "Gmcrts.h"
-#define _StdIO_H
 #define _StdIO_C
 
+#include "GStdIO.h"
 #   include "GIO.h"
 #   include "GM2RTS.h"
 
@@ -48,12 +48,6 @@  typedef struct StdIO__T1_a StdIO__T1;
 
 typedef struct StdIO__T2_a StdIO__T2;
 
-typedef void (*StdIO_ProcWrite_t) (char);
-struct StdIO_ProcWrite_p { StdIO_ProcWrite_t proc; };
-
-typedef void (*StdIO_ProcRead_t) (char *);
-struct StdIO_ProcRead_p { StdIO_ProcRead_t proc; };
-
 struct StdIO__T1_a { StdIO_ProcWrite array[MaxStack+1]; };
 struct StdIO__T2_a { StdIO_ProcRead array[MaxStack+1]; };
 static StdIO__T1 StackW;
diff --git a/gcc/m2/pge-boot/GStdIO.h b/gcc/m2/pge-boot/GStdIO.h
index 0a45ebc7e345..c54d009b3aa1 100644
--- a/gcc/m2/pge-boot/GStdIO.h
+++ b/gcc/m2/pge-boot/GStdIO.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_StdIO_H)
 #   define _StdIO_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GStorage.cc b/gcc/m2/pge-boot/GStorage.cc
index 08e878cab513..f22e7f233c6e 100644
--- a/gcc/m2/pge-boot/GStorage.cc
+++ b/gcc/m2/pge-boot/GStorage.cc
@@ -32,9 +32,9 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
        typedef struct { PROC_t proc; } PROC;
 #   endif
 
-#define _Storage_H
 #define _Storage_C
 
+#include "GStorage.h"
 #   include "GSysStorage.h"
 
 extern "C" void Storage_ALLOCATE (void * *a, unsigned int Size);
diff --git a/gcc/m2/pge-boot/GStorage.h b/gcc/m2/pge-boot/GStorage.h
index 8c26b465b2cb..e07fee0a44f7 100644
--- a/gcc/m2/pge-boot/GStorage.h
+++ b/gcc/m2/pge-boot/GStorage.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_Storage_H)
 #   define _Storage_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GStrCase.cc b/gcc/m2/pge-boot/GStrCase.cc
index 8ea7d3c0ce3d..d94ebc767702 100644
--- a/gcc/m2/pge-boot/GStrCase.cc
+++ b/gcc/m2/pge-boot/GStrCase.cc
@@ -34,9 +34,9 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 
 #include <string.h>
 #include <limits.h>
-#define _StrCase_H
 #define _StrCase_C
 
+#include "GStrCase.h"
 #   include "GASCII.h"
 #   include "GStrLib.h"
 
@@ -92,12 +92,12 @@  extern "C" void StrCase_StrToUpperCase (const char *a_, unsigned int _a_high, ch
   i = 0;
   while (((i < higha) && (a[i] != ASCII_nul)) && (i < highb))
     {
-      b[i] = StrCase_Cap (a[i]);
+      const_cast<char *>(b)[i] = StrCase_Cap (a[i]);
       i += 1;
     }
   if (i < highb)
     {
-      b[i] = ASCII_nul;
+      const_cast<char *>(b)[i] = ASCII_nul;
     }
 }
 
@@ -122,12 +122,12 @@  extern "C" void StrCase_StrToLowerCase (const char *a_, unsigned int _a_high, ch
   i = 0;
   while (((i < higha) && (a[i] != ASCII_nul)) && (i < highb))
     {
-      b[i] = StrCase_Lower (a[i]);
+      const_cast<char *>(b)[i] = StrCase_Lower (a[i]);
       i += 1;
     }
   if (i < highb)
     {
-      b[i] = ASCII_nul;
+      const_cast<char *>(b)[i] = ASCII_nul;
     }
 }
 
diff --git a/gcc/m2/pge-boot/GStrCase.h b/gcc/m2/pge-boot/GStrCase.h
index c3f064728d8b..a2b1a716a3aa 100644
--- a/gcc/m2/pge-boot/GStrCase.h
+++ b/gcc/m2/pge-boot/GStrCase.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_StrCase_H)
 #   define _StrCase_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GStrIO.cc b/gcc/m2/pge-boot/GStrIO.cc
index 1dd3922bb8af..f5c710c83db5 100644
--- a/gcc/m2/pge-boot/GStrIO.cc
+++ b/gcc/m2/pge-boot/GStrIO.cc
@@ -38,9 +38,9 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 
 #include <string.h>
 #include <limits.h>
-#define _StrIO_H
 #define _StrIO_C
 
+#include "GStrIO.h"
 #   include "GASCII.h"
 #   include "GStdIO.h"
 #   include "Glibc.h"
@@ -204,16 +204,16 @@  extern "C" void StrIO_ReadString (char *a, unsigned int _a_high)
         /* avoid dangling else.  */
         if ((ch == ASCII_cr) || (ch == ASCII_lf))
           {
-            a[n] = ASCII_nul;
+            const_cast<char *>(a)[n] = ASCII_nul;
             n += 1;
           }
         else if (ch == ASCII_ff)
           {
             /* avoid dangling else.  */
-            a[0] = ch;
+            const_cast<char *>(a)[0] = ch;
             if (high > 0)
               {
-                a[1] = ASCII_nul;
+                const_cast<char *>(a)[1] = ASCII_nul;
               }
             ch = ASCII_cr;
           }
@@ -221,18 +221,18 @@  extern "C" void StrIO_ReadString (char *a, unsigned int _a_high)
           {
             /* avoid dangling else.  */
             Echo (ch);
-            a[n] = ch;
+            const_cast<char *>(a)[n] = ch;
             n += 1;
           }
         else if (ch == ASCII_eof)
           {
             /* avoid dangling else.  */
-            a[n] = ch;
+            const_cast<char *>(a)[n] = ch;
             n += 1;
             ch = ASCII_cr;
             if (n <= high)
               {
-                a[n] = ASCII_nul;
+                const_cast<char *>(a)[n] = ASCII_nul;
               }
           }
       }
diff --git a/gcc/m2/pge-boot/GStrIO.h b/gcc/m2/pge-boot/GStrIO.h
index 2ed2ac33f119..2d003c5aeeb7 100644
--- a/gcc/m2/pge-boot/GStrIO.h
+++ b/gcc/m2/pge-boot/GStrIO.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_StrIO_H)
 #   define _StrIO_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GStrLib.cc b/gcc/m2/pge-boot/GStrLib.cc
index 4a92d1c34f80..f8e3c4621a00 100644
--- a/gcc/m2/pge-boot/GStrLib.cc
+++ b/gcc/m2/pge-boot/GStrLib.cc
@@ -42,9 +42,9 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 
 #include <string.h>
 #include <limits.h>
-#define _StrLib_H
 #define _StrLib_C
 
+#include "GStrLib.h"
 #   include "GASCII.h"
 
 
@@ -127,13 +127,13 @@  extern "C" void StrLib_StrConCat (const char *a_, unsigned int _a_high, const ch
   j = 0;
   while ((j < Highb) && (i <= Highc))
     {
-      c[i] = b[j];
+      const_cast<char *>(c)[i] = b[j];
       i += 1;
       j += 1;
     }
   if (i <= Highc)
     {
-      c[i] = ASCII_nul;
+      const_cast<char *>(c)[i] = ASCII_nul;
     }
 }
 
@@ -247,12 +247,12 @@  extern "C" void StrLib_StrCopy (const char *src_, unsigned int _src_high, char *
   HighDest = _dest_high;
   while ((n < HighSrc) && (n <= HighDest))
     {
-      dest[n] = src[n];
+      const_cast<char *>(dest)[n] = src[n];
       n += 1;
     }
   if (n <= HighDest)
     {
-      dest[n] = ASCII_nul;
+      const_cast<char *>(dest)[n] = ASCII_nul;
     }
 }
 
@@ -328,13 +328,13 @@  extern "C" void StrLib_StrRemoveWhitePrefix (const char *a_, unsigned int _a_hig
     }
   while ((i < higha) && (j <= highb))
     {
-      b[j] = a[i];
+      const_cast<char *>(b)[j] = a[i];
       i += 1;
       j += 1;
     }
   if (j <= highb)
     {
-      b[j] = ASCII_nul;
+      const_cast<char *>(b)[j] = ASCII_nul;
     }
 }
 
diff --git a/gcc/m2/pge-boot/GStrLib.h b/gcc/m2/pge-boot/GStrLib.h
index b292d8990a14..9e81f002146d 100644
--- a/gcc/m2/pge-boot/GStrLib.h
+++ b/gcc/m2/pge-boot/GStrLib.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_StrLib_H)
 #   define _StrLib_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GStringConvert.h b/gcc/m2/pge-boot/GStringConvert.h
index 284eef236cc8..209ec45a2be5 100644
--- a/gcc/m2/pge-boot/GStringConvert.h
+++ b/gcc/m2/pge-boot/GStringConvert.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_StringConvert_H)
 #   define _StringConvert_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GSymbolKey.cc b/gcc/m2/pge-boot/GSymbolKey.cc
index ec27e2c67b68..e58153240bdd 100644
--- a/gcc/m2/pge-boot/GSymbolKey.cc
+++ b/gcc/m2/pge-boot/GSymbolKey.cc
@@ -20,8 +20,6 @@  You should have received a copy of the GNU General Public License
 along with GNU Modula-2; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
-#include "config.h"
-#include "system.h"
 #include <stdbool.h>
 #   if !defined (PROC_D)
 #      define PROC_D
@@ -33,6 +31,7 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #      define FALSE (1==0)
 #   endif
 
+#include <stddef.h>
 #   include "GStorage.h"
 #if defined(__cplusplus)
 #   undef NULL
diff --git a/gcc/m2/pge-boot/GSymbolKey.h b/gcc/m2/pge-boot/GSymbolKey.h
index 48be595fb02f..2fb363f00815 100644
--- a/gcc/m2/pge-boot/GSymbolKey.h
+++ b/gcc/m2/pge-boot/GSymbolKey.h
@@ -24,8 +24,6 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_SymbolKey_H)
 #   define _SymbolKey_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GSysExceptions.h b/gcc/m2/pge-boot/GSysExceptions.h
index 00dd52117d1b..2cfc026b7d86 100644
--- a/gcc/m2/pge-boot/GSysExceptions.h
+++ b/gcc/m2/pge-boot/GSysExceptions.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_SysExceptions_H)
 #   define _SysExceptions_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GSysStorage.cc b/gcc/m2/pge-boot/GSysStorage.cc
index 9449a3e2b968..19e11ac24392 100644
--- a/gcc/m2/pge-boot/GSysStorage.cc
+++ b/gcc/m2/pge-boot/GSysStorage.cc
@@ -46,9 +46,9 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #   undef NULL
 #   define NULL 0
 #endif
-#define _SysStorage_H
 #define _SysStorage_C
 
+#include "GSysStorage.h"
 #   include "Glibc.h"
 #   include "GDebug.h"
 #   include "GSYSTEM.h"
@@ -229,7 +229,7 @@  extern "C" void _M2_SysStorage_init (__attribute__((unused)) int argc,__attribut
   callno = 0;
   if (enableTrace)
     {
-      trace = (libc_getenv (const_cast<void*> (reinterpret_cast<const void*>("M2DEBUG_SYSSTORAGE_trace")))) != NULL;
+      trace = (libc_getenv (const_cast<void*> (static_cast<const void*>("M2DEBUG_SYSSTORAGE_trace")))) != NULL;
     }
   else
     {
@@ -237,7 +237,7 @@  extern "C" void _M2_SysStorage_init (__attribute__((unused)) int argc,__attribut
     }
   if (enableZero)
     {
-      zero = (libc_getenv (const_cast<void*> (reinterpret_cast<const void*>("M2DEBUG_SYSSTORAGE_zero")))) != NULL;
+      zero = (libc_getenv (const_cast<void*> (static_cast<const void*>("M2DEBUG_SYSSTORAGE_zero")))) != NULL;
     }
   else
     {
diff --git a/gcc/m2/pge-boot/GSysStorage.h b/gcc/m2/pge-boot/GSysStorage.h
index 639f6811e197..89d349280b38 100644
--- a/gcc/m2/pge-boot/GSysStorage.h
+++ b/gcc/m2/pge-boot/GSysStorage.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_SysStorage_H)
 #   define _SysStorage_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GTimeString.h b/gcc/m2/pge-boot/GTimeString.h
index 7ba51f8081ea..e544d627ff6d 100644
--- a/gcc/m2/pge-boot/GTimeString.h
+++ b/gcc/m2/pge-boot/GTimeString.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_TimeString_H)
 #   define _TimeString_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/GUnixArgs.h b/gcc/m2/pge-boot/GUnixArgs.h
index cf9756ea177f..0907b94ce353 100644
--- a/gcc/m2/pge-boot/GUnixArgs.h
+++ b/gcc/m2/pge-boot/GUnixArgs.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_UnixArgs_H)
 #   define _UnixArgs_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/Gbnflex.cc b/gcc/m2/pge-boot/Gbnflex.cc
index 36615080d3f3..636e4e36c65b 100644
--- a/gcc/m2/pge-boot/Gbnflex.cc
+++ b/gcc/m2/pge-boot/Gbnflex.cc
@@ -37,9 +37,9 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 
 #include <string.h>
 #include <limits.h>
-#define _bnflex_H
 #define _bnflex_C
 
+#include "Gbnflex.h"
 #   include "GPushBackInput.h"
 #   include "GSymbolKey.h"
 #   include "GASCII.h"
@@ -51,8 +51,6 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #   include "GStdIO.h"
 
 #   define MaxNameLength 8192
-typedef enum {bnflex_identtok, bnflex_literaltok, bnflex_codetok, bnflex_lbecomestok, bnflex_rbecomestok, bnflex_bartok, bnflex_lsparatok, bnflex_rsparatok, bnflex_lcparatok, bnflex_rcparatok, bnflex_lparatok, bnflex_rparatok, bnflex_errortok, bnflex_tfunctok, bnflex_symfunctok, bnflex_squotetok, bnflex_dquotetok, bnflex_moduletok, bnflex_begintok, bnflex_rulestok, bnflex_endtok, bnflex_lesstok, bnflex_gretok, bnflex_tokentok, bnflex_specialtok, bnflex_firsttok, bnflex_followtok, bnflex_BNFtok, bnflex_FNBtok, bnflex_declarationtok, bnflex_epsilontok, bnflex_eoftok} bnflex_TokenType;
-
 static FIO_File f;
 static SymbolKey_SymbolTree ReservedWords;
 static NameKey_Name CurrentToken;
diff --git a/gcc/m2/pge-boot/Gbnflex.h b/gcc/m2/pge-boot/Gbnflex.h
index a3da44e56d8b..451a73dcb2e6 100644
--- a/gcc/m2/pge-boot/Gbnflex.h
+++ b/gcc/m2/pge-boot/Gbnflex.h
@@ -24,8 +24,6 @@  along with GNU Modula-2; see the file COPYING3.  If not see
 #if !defined (_bnflex_H)
 #   define _bnflex_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/Gdtoa.h b/gcc/m2/pge-boot/Gdtoa.h
index 946e339d69ad..64ab087afdf8 100644
--- a/gcc/m2/pge-boot/Gdtoa.h
+++ b/gcc/m2/pge-boot/Gdtoa.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_dtoa_H)
 #   define _dtoa_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
@@ -68,7 +66,7 @@  EXTERN double dtoa_strtod (void * s, bool *error);
           sign       does the string have a sign?
 */
 
-EXTERN void * dtoa_dtoa (double d, dtoa_Mode mode, int ndigits, int *decpt, bool *sign);
+EXTERN void * dtoa_dtoa (double d, int mode, int ndigits, int *decpt, bool *sign);
 #   ifdef __cplusplus
 }
 #   endif
diff --git a/gcc/m2/pge-boot/Gerrno.h b/gcc/m2/pge-boot/Gerrno.h
index 7f065ccb24d7..5ab2ab143f74 100644
--- a/gcc/m2/pge-boot/Gerrno.h
+++ b/gcc/m2/pge-boot/Gerrno.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_errno_H)
 #   define _errno_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/Gldtoa.h b/gcc/m2/pge-boot/Gldtoa.h
index 0678e9e2d818..26152b7e12b0 100644
--- a/gcc/m2/pge-boot/Gldtoa.h
+++ b/gcc/m2/pge-boot/Gldtoa.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_ldtoa_H)
 #   define _ldtoa_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
@@ -68,7 +66,7 @@  EXTERN long double ldtoa_strtold (void *s, bool *error);
            sign       does the string have a sign?
 */
 
-EXTERN void * ldtoa_ldtoa (long double d, ldtoa_Mode mode, int ndigits, int *decpt, bool *sign);
+EXTERN void * ldtoa_ldtoa (long double d, int mode, int ndigits, int *decpt, bool *sign);
 #   ifdef __cplusplus
 }
 #   endif
diff --git a/gcc/m2/pge-boot/Glibc.h b/gcc/m2/pge-boot/Glibc.h
index 0a5481ef5239..95027e6c7ecf 100644
--- a/gcc/m2/pge-boot/Glibc.h
+++ b/gcc/m2/pge-boot/Glibc.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_libc_H)
 #   define _libc_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
@@ -41,6 +39,8 @@  extern "C" {
        typedef struct { PROC_t proc; } PROC;
 #   endif
 
+#include <stdlib.h>
+#   include <sys/types.h>
 #   include "GSYSTEM.h"
 
 #   if defined (_libc_C)
@@ -85,6 +85,17 @@  typedef libc_exitP_t libc_exitP_C;
 
 struct libc_exitP_p { libc_exitP_t proc; };
 
+EXTERN double libc_atof (void * nptr);
+EXTERN int libc_atoi (void * nptr);
+EXTERN ssize_t libc_atol (void * nptr);
+EXTERN long int libc_atoll (void * nptr);
+EXTERN double libc_strtod (void * nptr, void * endptr);
+EXTERN float libc_strtof (void * nptr, void * endptr);
+EXTERN long double libc_strtold (void * nptr, void * endptr);
+EXTERN ssize_t libc_strtol (void * nptr, void * endptr, int base);
+EXTERN long int libc_strtoll (void * nptr, void * endptr, int base);
+EXTERN size_t libc_strtoul (void * nptr, void * endptr, int base);
+EXTERN long unsigned int libc_strtoull (void * nptr, void * endptr, int base);
 EXTERN ssize_t libc_write (int d, void * buf, size_t nbytes);
 EXTERN ssize_t libc_read (int d, void * buf, size_t nbytes);
 EXTERN int libc_system (void * a);
@@ -198,7 +209,7 @@  EXTERN ssize_t libc_lseek (int fd, ssize_t offset, int whence);
    perror - writes errno and string. (ARRAY OF CHAR is translated onto ADDRESS).
 */
 
-EXTERN void libc_perror (const char *str);
+EXTERN void libc_perror (const char *string_, unsigned int _string_high);
 
 /*
    readv - reads an io vector of bytes.
diff --git a/gcc/m2/pge-boot/Glibm.h b/gcc/m2/pge-boot/Glibm.h
index d3c9415070c1..899d7dd68795 100644
--- a/gcc/m2/pge-boot/Glibm.h
+++ b/gcc/m2/pge-boot/Glibm.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_libm_H)
 #   define _libm_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/Gpge.cc b/gcc/m2/pge-boot/Gpge.cc
index e231abeea473..383a8f86daed 100644
--- a/gcc/m2/pge-boot/Gpge.cc
+++ b/gcc/m2/pge-boot/Gpge.cc
@@ -3621,7 +3621,7 @@  static void Format1 (const char *src_, unsigned int _src_high, unsigned int n, c
   j = 0;
   while ((((i < HighSrc) && (src[i] != ASCII_nul)) && (j < HighDest)) && (src[i] != '%'))
     {
-      dest[j] = src[i];
+      const_cast<char *>(dest)[j] = src[i];
       i += 1;
       j += 1;
     }
@@ -3630,7 +3630,7 @@  static void Format1 (const char *src_, unsigned int _src_high, unsigned int n, c
       /* avoid gcc warning by using compound statement even if not strictly necessary.  */
       if (src[i+1] == 's')
         {
-          dest[j] = ASCII_nul;
+          const_cast<char *>(dest)[j] = ASCII_nul;
           NameKey_GetKey (n, (char *) &str.array[0], MaxString);
           StrLib_StrConCat ((const char *) dest, _dest_high, (const char *) &str.array[0], MaxString, (char *) dest, _dest_high);
           j = StrLib_StrLen ((const char *) dest, _dest_high);
@@ -3639,7 +3639,7 @@  static void Format1 (const char *src_, unsigned int _src_high, unsigned int n, c
       else if (src[i+1] == 'd')
         {
           /* avoid dangling else.  */
-          dest[j] = ASCII_nul;
+          const_cast<char *>(dest)[j] = ASCII_nul;
           NumberIO_CardToStr (n, 0, (char *) &str.array[0], MaxString);
           StrLib_StrConCat ((const char *) dest, _dest_high, (const char *) &str.array[0], MaxString, (char *) dest, _dest_high);
           j = StrLib_StrLen ((const char *) dest, _dest_high);
@@ -3648,7 +3648,7 @@  static void Format1 (const char *src_, unsigned int _src_high, unsigned int n, c
       else
         {
           /* avoid dangling else.  */
-          dest[j] = src[i];
+          const_cast<char *>(dest)[j] = src[i];
           i += 1;
           j += 1;
         }
@@ -3656,13 +3656,13 @@  static void Format1 (const char *src_, unsigned int _src_high, unsigned int n, c
   /* and finish off copying src into dest  */
   while (((i < HighSrc) && (src[i] != ASCII_nul)) && (j < HighDest))
     {
-      dest[j] = src[i];
+      const_cast<char *>(dest)[j] = src[i];
       i += 1;
       j += 1;
     }
   if (j < HighDest)
     {
-      dest[j] = ASCII_nul;
+      const_cast<char *>(dest)[j] = ASCII_nul;
     }
 }
 
@@ -7490,9 +7490,9 @@  static bool FindStr (pge_CodeHunk *code, unsigned int *i, const char *str_, unsi
   /* make a local copy of each unbounded array.  */
   memcpy (str, str_, _str_high+1);
 
-  j = StrLib_StrLen ((const char *) str, _str_high);
   t = (*code);
   k = (StrLib_StrLen ((const char *) &(*code)->codetext.array[0], MaxCodeHunkLength))+1;
+  j = StrLib_StrLen ((const char *) str, _str_high);
   while (t != NULL)
     {
       do {
@@ -7804,7 +7804,7 @@  static void OrSet (pge_SetDesc *to, pge_SetDesc from)
 
 
           default:
-            Debug_Halt ((const char *) "unknown element in enumeration type", 35, (const char *) "m2/gm2-auto/pge.mod", 19, (const char *) "OrSet", 5, 4133);
+            Debug_Halt ((const char *) "unknown element in enumeration type", 35, (const char *) "m2/gm2-auto/pge.mod", 19, (const char *) "OrSet", 5, 4134);
             break;
         }
       from = from->next;
diff --git a/gcc/m2/pge-boot/Gtermios.h b/gcc/m2/pge-boot/Gtermios.h
index acb7fcf0c767..fe510d518b9d 100644
--- a/gcc/m2/pge-boot/Gtermios.h
+++ b/gcc/m2/pge-boot/Gtermios.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_termios_H)
 #   define _termios_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/m2/pge-boot/Gwrapc.h b/gcc/m2/pge-boot/Gwrapc.h
index e4db1e2a99f3..b28f3caf9cd0 100644
--- a/gcc/m2/pge-boot/Gwrapc.h
+++ b/gcc/m2/pge-boot/Gwrapc.h
@@ -29,8 +29,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #if !defined (_wrapc_H)
 #   define _wrapc_H
 
-#include "config.h"
-#include "system.h"
 #   ifdef __cplusplus
 extern "C" {
 #   endif
diff --git a/gcc/multiple_target.cc b/gcc/multiple_target.cc
index 1fdd279da04a..d2c9671fc1bd 100644
--- a/gcc/multiple_target.cc
+++ b/gcc/multiple_target.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/objc/objc-act.cc b/gcc/objc/objc-act.cc
index cec64c4bfbd4..58d465f6c339 100644
--- a/gcc/objc/objc-act.cc
+++ b/gcc/objc/objc-act.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/objc/objc-encoding.cc b/gcc/objc/objc-encoding.cc
index 7cb0e5add7ba..d0078eb23be3 100644
--- a/gcc/objc/objc-encoding.cc
+++ b/gcc/objc/objc-encoding.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/objc/objc-gnu-runtime-abi-01.cc b/gcc/objc/objc-gnu-runtime-abi-01.cc
index 2eca5f4446bb..1f504f437f52 100644
--- a/gcc/objc/objc-gnu-runtime-abi-01.cc
+++ b/gcc/objc/objc-gnu-runtime-abi-01.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/objc/objc-lang.cc b/gcc/objc/objc-lang.cc
index b0b3e138ba31..430b6b2cb035 100644
--- a/gcc/objc/objc-lang.cc
+++ b/gcc/objc/objc-lang.cc
@@ -18,7 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
-
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/objc/objc-next-runtime-abi-01.cc b/gcc/objc/objc-next-runtime-abi-01.cc
index 32a8d694b0ec..60cd7637bf6a 100644
--- a/gcc/objc/objc-next-runtime-abi-01.cc
+++ b/gcc/objc/objc-next-runtime-abi-01.cc
@@ -23,6 +23,7 @@  along with GCC; see the file COPYING3.  If not see
    of additions made for properties and optional protocol methods as
    ABI=1 (module version 7).  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/objc/objc-next-runtime-abi-02.cc b/gcc/objc/objc-next-runtime-abi-02.cc
index 248ef641281f..a9614e65dd3b 100644
--- a/gcc/objc/objc-next-runtime-abi-02.cc
+++ b/gcc/objc/objc-next-runtime-abi-02.cc
@@ -25,6 +25,7 @@  along with GCC; see the file COPYING3.  If not see
    This version is intended to match (logically) the output of Apple's
    4.2.1 compiler.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/objc/objc-runtime-shared-support.cc b/gcc/objc/objc-runtime-shared-support.cc
index 21a88224a0a8..bd40195a413c 100644
--- a/gcc/objc/objc-runtime-shared-support.cc
+++ b/gcc/objc/objc-runtime-shared-support.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/objcp/objcp-decl.cc b/gcc/objcp/objcp-decl.cc
index 1c8912f6aa0c..9d100c926c37 100644
--- a/gcc/objcp/objcp-decl.cc
+++ b/gcc/objcp/objcp-decl.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/objcp/objcp-lang.cc b/gcc/objcp/objcp-lang.cc
index 83447f8cb589..3b54050f029c 100644
--- a/gcc/objcp/objcp-lang.cc
+++ b/gcc/objcp/objcp-lang.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/omp-expand.cc b/gcc/omp-expand.cc
index 9ff9553c3ead..0c3f98627509 100644
--- a/gcc/omp-expand.cc
+++ b/gcc/omp-expand.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/omp-general.cc b/gcc/omp-general.cc
index f4c5f5770474..f74b9bf5e96c 100644
--- a/gcc/omp-general.cc
+++ b/gcc/omp-general.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/omp-low.cc b/gcc/omp-low.cc
index da2051b02797..6f7b740788df 100644
--- a/gcc/omp-low.cc
+++ b/gcc/omp-low.cc
@@ -22,6 +22,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/omp-oacc-neuter-broadcast.cc b/gcc/omp-oacc-neuter-broadcast.cc
index 64a596cf0eca..651284ba35f3 100644
--- a/gcc/omp-oacc-neuter-broadcast.cc
+++ b/gcc/omp-oacc-neuter-broadcast.cc
@@ -18,6 +18,7 @@ 
    along with GCC; see the file COPYING3.  If not see
    <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/omp-offload.cc b/gcc/omp-offload.cc
index 934fbd80bdd1..5c9853682411 100644
--- a/gcc/omp-offload.cc
+++ b/gcc/omp-offload.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/omp-simd-clone.cc b/gcc/omp-simd-clone.cc
index 864586207ee8..14a37f709482 100644
--- a/gcc/omp-simd-clone.cc
+++ b/gcc/omp-simd-clone.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/optc-gen.awk b/gcc/optc-gen.awk
index 0eccb1951ef7..551cc5cf138e 100644
--- a/gcc/optc-gen.awk
+++ b/gcc/optc-gen.awk
@@ -158,6 +158,7 @@  for (i = 0; i < n_opts; i++) {
 
 print "/* This file is auto-generated by optc-gen.awk.  */"
 print ""
+print "#define INCLUDE_MEMORY"
 n_headers = split(header_name, headers, " ")
 for (i = 1; i <= n_headers; i++)
 	print "#include " quote headers[i] quote
diff --git a/gcc/optc-save-gen.awk b/gcc/optc-save-gen.awk
index b1289c281e7b..6fa10c5171ff 100644
--- a/gcc/optc-save-gen.awk
+++ b/gcc/optc-save-gen.awk
@@ -31,6 +31,7 @@ 
 END {
 print "/* This file is auto-generated by optc-save-gen.awk.  */"
 print ""
+print "#define INCLUDE_MEMORY"
 n_headers = split(header_name, headers, " ")
 for (i = 1; i <= n_headers; i++)
 	print "#include " quote headers[i] quote
diff --git a/gcc/options-urls-cc-gen.awk b/gcc/options-urls-cc-gen.awk
index a2933233abef..33715a6c1d2c 100644
--- a/gcc/options-urls-cc-gen.awk
+++ b/gcc/options-urls-cc-gen.awk
@@ -29,6 +29,7 @@  END {
 
 print "/* This file is auto-generated by options-urls-cc-gen.awk.  */"
 print ""
+print "#define INCLUDE_MEMORY"
 n_headers = split(header_name, headers, " ")
 for (i = 1; i <= n_headers; i++)
 	print "#include " quote headers[i] quote
diff --git a/gcc/opts-common.cc b/gcc/opts-common.cc
index 70ac225e3968..ac0e2bdc61de 100644
--- a/gcc/opts-common.cc
+++ b/gcc/opts-common.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #define INCLUDE_STRING
 #include "config.h"
 #include "system.h"
diff --git a/gcc/opts-global.cc b/gcc/opts-global.cc
index a9bc0d53b586..893d29936b51 100644
--- a/gcc/opts-global.cc
+++ b/gcc/opts-global.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/opts.cc b/gcc/opts.cc
index acd53befdbfc..1c5092e22feb 100644
--- a/gcc/opts.cc
+++ b/gcc/opts.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "intl.h"
diff --git a/gcc/pair-fusion.cc b/gcc/pair-fusion.cc
index ccbb5511e9d1..ff84c169b91c 100644
--- a/gcc/pair-fusion.cc
+++ b/gcc/pair-fusion.cc
@@ -20,6 +20,7 @@ 
 #define INCLUDE_ALGORITHM
 #define INCLUDE_FUNCTIONAL
 #define INCLUDE_LIST
+#define INCLUDE_MEMORY
 #define INCLUDE_TYPE_TRAITS
 #define INCLUDE_ARRAY
 #include "config.h"
diff --git a/gcc/passes.cc b/gcc/passes.cc
index ae80f40b96a5..d1e6fe3b91a3 100644
--- a/gcc/passes.cc
+++ b/gcc/passes.cc
@@ -22,6 +22,7 @@  along with GCC; see the file COPYING3.  If not see
    in the proper order, and counts the time used by each.
    Error messages and low-level interface to malloc also handled here.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/pointer-query.cc b/gcc/pointer-query.cc
index a85c04128ffb..fea69c8e5915 100644
--- a/gcc/pointer-query.cc
+++ b/gcc/pointer-query.cc
@@ -18,6 +18,7 @@ 
    along with GCC; see the file COPYING3.  If not see
    <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/predict.cc b/gcc/predict.cc
index 87b34597662c..f30e67dce7ff 100644
--- a/gcc/predict.cc
+++ b/gcc/predict.cc
@@ -26,7 +26,7 @@  along with GCC; see the file COPYING3.  If not see
    [3] "Corpus-based Static Branch Prediction"
        Calder, Grunwald, Lindsay, Martin, Mozer, and Zorn; PLDI '95.  */
 
-
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/pretty-print.cc b/gcc/pretty-print.cc
index 8082dbcdddda..f18214d33bce 100644
--- a/gcc/pretty-print.cc
+++ b/gcc/pretty-print.cc
@@ -2519,10 +2519,10 @@  pretty_printer::~pretty_printer ()
 
 /* Base class implementation of pretty_printer::clone vfunc.  */
 
-pretty_printer *
+std::unique_ptr<pretty_printer>
 pretty_printer::clone () const
 {
-  return new pretty_printer (*this);
+  return ::make_unique<pretty_printer> (*this);
 }
 
 /* Append a string delimited by START and END to the output area of
diff --git a/gcc/pretty-print.h b/gcc/pretty-print.h
index 05dbb1986da8..561ebfb27a7b 100644
--- a/gcc/pretty-print.h
+++ b/gcc/pretty-print.h
@@ -21,6 +21,14 @@  along with GCC; see the file COPYING3.  If not see
 #ifndef GCC_PRETTY_PRINT_H
 #define GCC_PRETTY_PRINT_H
 
+/* This header uses std::unique_ptr, but <memory> can't be directly
+   included due to issues with macros.  Hence it must be included from
+   system.h by defining INCLUDE_MEMORY in any source file using it.  */
+
+#ifndef INCLUDE_MEMORY
+# error "You must define INCLUDE_MEMORY before including system.h to use pretty-print.h"
+#endif
+
 #include "obstack.h"
 #include "rich-location.h"
 #include "diagnostic-url.h"
@@ -269,7 +277,7 @@  public:
 
   virtual ~pretty_printer ();
 
-  virtual pretty_printer *clone () const;
+  virtual std::unique_ptr<pretty_printer> clone () const;
 
   void set_output_stream (FILE *outfile)
   {
diff --git a/gcc/print-rtl.cc b/gcc/print-rtl.cc
index 69c2e196e041..1688d4ec5c8f 100644
--- a/gcc/print-rtl.cc
+++ b/gcc/print-rtl.cc
@@ -25,6 +25,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "config.h"
 #endif
 
+#define INCLUDE_MEMORY
 #include "system.h"
 #include "coretypes.h"
 #include "tm.h"
diff --git a/gcc/print-tree.cc b/gcc/print-tree.cc
index 0dda09a99e3f..d313a2adfaf7 100644
--- a/gcc/print-tree.cc
+++ b/gcc/print-tree.cc
@@ -18,6 +18,7 @@  along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/profile-count.cc b/gcc/profile-count.cc
index b26f38e33e47..0f30fa261538 100644
--- a/gcc/profile-count.cc
+++ b/gcc/profile-count.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/range-op-float.cc b/gcc/range-op-float.cc
index 2754dd875682..a42bca0280f7 100644
--- a/gcc/range-op-float.cc
+++ b/gcc/range-op-float.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/range-op-ptr.cc b/gcc/range-op-ptr.cc
index 24e206c00cdd..8f87f18e2c48 100644
--- a/gcc/range-op-ptr.cc
+++ b/gcc/range-op-ptr.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/range-op.cc b/gcc/range-op.cc
index 3f5cf0834402..937bee29b1e9 100644
--- a/gcc/range-op.cc
+++ b/gcc/range-op.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/range.cc b/gcc/range.cc
index 5ee0edc54f6b..3b56556c87e3 100644
--- a/gcc/range.cc
+++ b/gcc/range.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/read-rtl-function.cc b/gcc/read-rtl-function.cc
index fa1aeb53759c..51dc11928d05 100644
--- a/gcc/read-rtl-function.cc
+++ b/gcc/read-rtl-function.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/rtl-error.cc b/gcc/rtl-error.cc
index 6d05f0b96268..0a92a1ad2c0f 100644
--- a/gcc/rtl-error.cc
+++ b/gcc/rtl-error.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/rtl-ssa/accesses.cc b/gcc/rtl-ssa/accesses.cc
index ef99759871aa..9fa7fee621c6 100644
--- a/gcc/rtl-ssa/accesses.cc
+++ b/gcc/rtl-ssa/accesses.cc
@@ -19,6 +19,7 @@ 
 
 #define INCLUDE_ALGORITHM
 #define INCLUDE_FUNCTIONAL
+#define INCLUDE_MEMORY
 #define INCLUDE_ARRAY
 #include "config.h"
 #include "system.h"
diff --git a/gcc/rtl-ssa/blocks.cc b/gcc/rtl-ssa/blocks.cc
index dfc4e7d0610d..780a241cab67 100644
--- a/gcc/rtl-ssa/blocks.cc
+++ b/gcc/rtl-ssa/blocks.cc
@@ -19,6 +19,7 @@ 
 
 #define INCLUDE_ALGORITHM
 #define INCLUDE_FUNCTIONAL
+#define INCLUDE_MEMORY
 #define INCLUDE_ARRAY
 #include "config.h"
 #include "system.h"
diff --git a/gcc/rtl-ssa/changes.cc b/gcc/rtl-ssa/changes.cc
index 0476296607bc..f2be1195bc09 100644
--- a/gcc/rtl-ssa/changes.cc
+++ b/gcc/rtl-ssa/changes.cc
@@ -19,6 +19,7 @@ 
 
 #define INCLUDE_ALGORITHM
 #define INCLUDE_FUNCTIONAL
+#define INCLUDE_MEMORY
 #define INCLUDE_ARRAY
 #include "config.h"
 #include "system.h"
diff --git a/gcc/rtl-ssa/functions.cc b/gcc/rtl-ssa/functions.cc
index bffccc57aabc..b14fb076da0c 100644
--- a/gcc/rtl-ssa/functions.cc
+++ b/gcc/rtl-ssa/functions.cc
@@ -19,6 +19,7 @@ 
 
 #define INCLUDE_ALGORITHM
 #define INCLUDE_FUNCTIONAL
+#define INCLUDE_MEMORY
 #define INCLUDE_ARRAY
 #include "config.h"
 #include "system.h"
diff --git a/gcc/rtl-ssa/insns.cc b/gcc/rtl-ssa/insns.cc
index d0c3e56b8bef..bfc6683cc458 100644
--- a/gcc/rtl-ssa/insns.cc
+++ b/gcc/rtl-ssa/insns.cc
@@ -19,6 +19,7 @@ 
 
 #define INCLUDE_ALGORITHM
 #define INCLUDE_FUNCTIONAL
+#define INCLUDE_MEMORY
 #define INCLUDE_ARRAY
 #include "config.h"
 #include "system.h"
diff --git a/gcc/rtl-ssa/movement.cc b/gcc/rtl-ssa/movement.cc
index 38432119f334..c34c70da1944 100644
--- a/gcc/rtl-ssa/movement.cc
+++ b/gcc/rtl-ssa/movement.cc
@@ -19,6 +19,7 @@ 
 
 #define INCLUDE_ALGORITHM
 #define INCLUDE_FUNCTIONAL
+#define INCLUDE_MEMORY
 #define INCLUDE_ARRAY
 #include "config.h"
 #include "system.h"
diff --git a/gcc/rtl-tests.cc b/gcc/rtl-tests.cc
index 4569770a238b..ef717cc22f32 100644
--- a/gcc/rtl-tests.cc
+++ b/gcc/rtl-tests.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/rust/resolve/rust-ast-resolve-expr.cc b/gcc/rust/resolve/rust-ast-resolve-expr.cc
index 5520dc235017..74f11dd215c9 100644
--- a/gcc/rust/resolve/rust-ast-resolve-expr.cc
+++ b/gcc/rust/resolve/rust-ast-resolve-expr.cc
@@ -16,6 +16,7 @@ 
 // along with GCC; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
+#define INCLUDE_MEMORY
 #include "rust-ast-resolve-expr.h"
 #include "rust-ast-resolve-stmt.h"
 #include "rust-ast-resolve-struct-expr-field.h"
diff --git a/gcc/rust/rust-attribs.cc b/gcc/rust/rust-attribs.cc
index 86d5b3dfeb9f..ddcef72f07eb 100644
--- a/gcc/rust/rust-attribs.cc
+++ b/gcc/rust/rust-attribs.cc
@@ -15,6 +15,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/rust/rust-system.h b/gcc/rust/rust-system.h
index 2382e5b1fb4e..1833b93542d1 100644
--- a/gcc/rust/rust-system.h
+++ b/gcc/rust/rust-system.h
@@ -21,6 +21,7 @@ 
 #define RUST_SYSTEM_H
 
 #define INCLUDE_ALGORITHM
+#define INCLUDE_MEMORY
 #include "config.h"
 
 /* Define this so that inttypes.h defines the PRI?64 macros even
diff --git a/gcc/sanopt.cc b/gcc/sanopt.cc
index 604db6b3912a..0d79a0271f73 100644
--- a/gcc/sanopt.cc
+++ b/gcc/sanopt.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/sched-rgn.cc b/gcc/sched-rgn.cc
index 3d8cff76aaf9..4f511b3ca504 100644
--- a/gcc/sched-rgn.cc
+++ b/gcc/sched-rgn.cc
@@ -43,6 +43,7 @@  along with GCC; see the file COPYING3.  If not see
    priorities are computed, and (3) block level: insns in the block
    are actually scheduled.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/selftest-diagnostic-path.cc b/gcc/selftest-diagnostic-path.cc
index 6d21f2e55999..1b0ba2c1a3fb 100644
--- a/gcc/selftest-diagnostic-path.cc
+++ b/gcc/selftest-diagnostic-path.cc
@@ -20,6 +20,7 @@  along with GCC; see the file COPYING3.  If not see
 
 
 #include "config.h"
+#define INCLUDE_MEMORY
 #define INCLUDE_VECTOR
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/selftest-diagnostic.cc b/gcc/selftest-diagnostic.cc
index 4e9ee921b044..a066fe20066b 100644
--- a/gcc/selftest-diagnostic.cc
+++ b/gcc/selftest-diagnostic.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/splay-tree-utils.cc b/gcc/splay-tree-utils.cc
index 6437a5a98fa6..eb99b6b0e4b4 100644
--- a/gcc/splay-tree-utils.cc
+++ b/gcc/splay-tree-utils.cc
@@ -19,6 +19,7 @@ 
 
 #define INCLUDE_ALGORITHM
 #define INCLUDE_ARRAY
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/sreal.cc b/gcc/sreal.cc
index be557e7de803..b9f049748ef3 100644
--- a/gcc/sreal.cc
+++ b/gcc/sreal.cc
@@ -47,6 +47,7 @@  along with GCC; see the file COPYING3.  If not see
 	sig == 0 && exp == -SREAL_MAX_EXP
 */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include <math.h>
diff --git a/gcc/stmt.cc b/gcc/stmt.cc
index ae1527f0a19a..d272a45c82b0 100644
--- a/gcc/stmt.cc
+++ b/gcc/stmt.cc
@@ -22,6 +22,7 @@  along with GCC; see the file COPYING3.  If not see
    The functions whose names start with `expand_' are called by the
    expander to generate RTL instructions for various kinds of constructs.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/substring-locations.cc b/gcc/substring-locations.cc
index 156c12134baf..96224d3c8d00 100644
--- a/gcc/substring-locations.cc
+++ b/gcc/substring-locations.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/symtab-clones.cc b/gcc/symtab-clones.cc
index d50a95ebec60..79c93125af50 100644
--- a/gcc/symtab-clones.cc
+++ b/gcc/symtab-clones.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/symtab-thunks.cc b/gcc/symtab-thunks.cc
index c7ca06ff4798..f754a8a96e20 100644
--- a/gcc/symtab-thunks.cc
+++ b/gcc/symtab-thunks.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/symtab.cc b/gcc/symtab.cc
index 3b018ab3ea21..5e19062987e2 100644
--- a/gcc/symtab.cc
+++ b/gcc/symtab.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic_group_plugin.c b/gcc/testsuite/gcc.dg/plugin/diagnostic_group_plugin.c
index 2f780338b6e7..7e6d7e1de25e 100644
--- a/gcc/testsuite/gcc.dg/plugin/diagnostic_group_plugin.c
+++ b/gcc/testsuite/gcc.dg/plugin/diagnostic_group_plugin.c
@@ -29,6 +29,7 @@ 
 #include "diagnostic.h"
 #include "diagnostic-format-text.h"
 #include "context.h"
+#include "make-unique.h"
 
 int plugin_is_GPL_compatible;
 
@@ -229,7 +230,7 @@  plugin_init (struct plugin_name_args *plugin_info,
 
   diagnostic_text_starter (global_dc) = test_diagnostic_text_starter;
   diagnostic_start_span (global_dc) = test_diagnostic_start_span_fn;
-  global_dc->set_output_format (new test_output_format (*global_dc));
+  global_dc->set_output_format (::make_unique<test_output_format> (*global_dc));
 
   pass_info.pass = new pass_test_groups (g);
   pass_info.reference_pass_name = "*warn_function_noreturn";
diff --git a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_xhtml_format.c b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_xhtml_format.c
index eb2947619161..2f95e4a0ceb8 100644
--- a/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_xhtml_format.c
+++ b/gcc/testsuite/gcc.dg/plugin/diagnostic_plugin_xhtml_format.c
@@ -689,9 +689,10 @@  public:
     diagnostic_output_format::dump (out, indent);
   }
 
-  diagnostic_per_format_buffer *make_per_format_buffer () final override
+  std::unique_ptr<diagnostic_per_format_buffer>
+  make_per_format_buffer () final override
   {
-    return new diagnostic_xhtml_format_buffer (m_builder);
+    return ::make_unique<diagnostic_xhtml_format_buffer> (m_builder);
   }
   void set_buffer (diagnostic_per_format_buffer *base_buffer) final override
   {
@@ -810,7 +811,7 @@  diagnostic_output_format_init_xhtml (diagnostic_context &context,
   pp_show_color (fmt->get_printer ()) = false;
   context.set_show_highlight_colors (false);
 
-  context.set_output_format (fmt.release ());
+  context.set_output_format (std::move (fmt));
 }
 
 /* Populate CONTEXT in preparation for XHTML output to stderr.  */
@@ -949,9 +950,10 @@  plugin_init (struct plugin_name_args *plugin_info,
   if (!plugin_default_version_check (version, &gcc_version))
     return 1;
 
-  global_dc->set_output_format (new xhtml_stream_output_format (*global_dc,
-								line_table,
-								stderr));
+  global_dc->set_output_format
+    (::make_unique<xhtml_stream_output_format> (*global_dc,
+						line_table,
+						stderr));
 
 #if CHECKING_P
   selftest::xhtml_format_selftests ();
diff --git a/gcc/testsuite/gcc.dg/plugin/ggcplug.c b/gcc/testsuite/gcc.dg/plugin/ggcplug.c
index a75eed0e3985..d8199038b69b 100644
--- a/gcc/testsuite/gcc.dg/plugin/ggcplug.c
+++ b/gcc/testsuite/gcc.dg/plugin/ggcplug.c
@@ -1,6 +1,7 @@ 
 /* This plugin tests the GGC related plugin events.  */
 /* { dg-options "-O" } */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/text-art/box-drawing.cc b/gcc/text-art/box-drawing.cc
index 7057a4eac60d..e6092735bbe5 100644
--- a/gcc/text-art/box-drawing.cc
+++ b/gcc/text-art/box-drawing.cc
@@ -19,6 +19,7 @@  along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 #include "config.h"
+#define INCLUDE_MEMORY
 #define INCLUDE_VECTOR
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/text-art/canvas.cc b/gcc/text-art/canvas.cc
index 8e5d96808d8c..b2315d96d0df 100644
--- a/gcc/text-art/canvas.cc
+++ b/gcc/text-art/canvas.cc
@@ -19,6 +19,7 @@  along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 #include "config.h"
+#define INCLUDE_MEMORY
 #define INCLUDE_VECTOR
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/text-art/ruler.cc b/gcc/text-art/ruler.cc
index f80d9bb8758c..2abc36fc7c9c 100644
--- a/gcc/text-art/ruler.cc
+++ b/gcc/text-art/ruler.cc
@@ -20,6 +20,7 @@  along with GCC; see the file COPYING3.  If not see
 
 #include "config.h"
 #define INCLUDE_ALGORITHM
+#define INCLUDE_MEMORY
 #define INCLUDE_VECTOR
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/text-art/selftests.cc b/gcc/text-art/selftests.cc
index 2b113b6b0177..3c72c9439296 100644
--- a/gcc/text-art/selftests.cc
+++ b/gcc/text-art/selftests.cc
@@ -19,6 +19,7 @@  along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 #include "config.h"
+#define INCLUDE_MEMORY
 #define INCLUDE_VECTOR
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/text-art/theme.cc b/gcc/text-art/theme.cc
index e51b8ef7a84c..580c931aef2c 100644
--- a/gcc/text-art/theme.cc
+++ b/gcc/text-art/theme.cc
@@ -19,6 +19,7 @@  along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 #include "config.h"
+#define INCLUDE_MEMORY
 #define INCLUDE_VECTOR
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/toplev.cc b/gcc/toplev.cc
index 62034c32b4af..a12a2e1afba1 100644
--- a/gcc/toplev.cc
+++ b/gcc/toplev.cc
@@ -42,6 +42,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "cgraph.h"
 #include "coverage.h"
 #include "diagnostic.h"
+#include "pretty-print-urlifier.h"
 #include "varasm.h"
 #include "tree-inline.h"
 #include "realmpfr.h"	/* For GMP/MPFR/MPC versions, in print_version.  */
@@ -94,6 +95,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "dbgcnt.h"
 #include "gcc-urlifier.h"
 #include "unique-argv.h"
+#include "make-unique.h"
 
 #include "selftest.h"
 
@@ -1094,9 +1096,9 @@  general_init (const char *argv0, bool init_signals, unique_argv original_argv)
   global_dc->m_internal_error = internal_error_function;
   const unsigned lang_mask = lang_hooks.option_lang_mask ();
   global_dc->set_option_manager
-    (new compiler_diagnostic_option_manager (*global_dc,
-					     lang_mask,
-					     &global_options),
+    (::make_unique<compiler_diagnostic_option_manager> (*global_dc,
+							lang_mask,
+							&global_options),
      lang_mask);
   global_dc->set_urlifier (make_gcc_urlifier (lang_mask));
 
diff --git a/gcc/trans-mem.cc b/gcc/trans-mem.cc
index fb0c95a8793a..3cf0bf34a121 100644
--- a/gcc/trans-mem.cc
+++ b/gcc/trans-mem.cc
@@ -19,6 +19,7 @@ 
    along with GCC; see the file COPYING3.  If not see
    <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-affine.cc b/gcc/tree-affine.cc
index 76117aa4fd6d..1373664dff1c 100644
--- a/gcc/tree-affine.cc
+++ b/gcc/tree-affine.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-call-cdce.cc b/gcc/tree-call-cdce.cc
index befe6acf178a..077d6fda6e8b 100644
--- a/gcc/tree-call-cdce.cc
+++ b/gcc/tree-call-cdce.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-cfg.cc b/gcc/tree-cfg.cc
index fcb488d87113..a850146987fd 100644
--- a/gcc/tree-cfg.cc
+++ b/gcc/tree-cfg.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-chrec.cc b/gcc/tree-chrec.cc
index 9b272074a2ed..0c9776f29997 100644
--- a/gcc/tree-chrec.cc
+++ b/gcc/tree-chrec.cc
@@ -23,6 +23,7 @@  along with GCC; see the file COPYING3.  If not see
    variables.
 */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-dfa.cc b/gcc/tree-dfa.cc
index 77e119a6b1b2..96719463e690 100644
--- a/gcc/tree-dfa.cc
+++ b/gcc/tree-dfa.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-diagnostic-client-data-hooks.cc b/gcc/tree-diagnostic-client-data-hooks.cc
index a2e4a5c97bd5..d966cf50f0d3 100644
--- a/gcc/tree-diagnostic-client-data-hooks.cc
+++ b/gcc/tree-diagnostic-client-data-hooks.cc
@@ -32,6 +32,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "langhooks.h"
 #include "plugin.h"
 #include "timevar.h"
+#include "make-unique.h"
 
 /* Concrete class for supplying a diagnostic_context with information
    about a specific plugin within the client, when the client is the
@@ -166,8 +167,8 @@  private:
 /* Create a compiler_data_hooks (so that the class can be local
    to this file).  */
 
-diagnostic_client_data_hooks *
+std::unique_ptr<diagnostic_client_data_hooks>
 make_compiler_data_hooks ()
 {
-  return new compiler_data_hooks ();
+  return ::make_unique<compiler_data_hooks> ();
 }
diff --git a/gcc/tree-diagnostic.cc b/gcc/tree-diagnostic.cc
index 39471021d0f4..b7d2c51c984c 100644
--- a/gcc/tree-diagnostic.cc
+++ b/gcc/tree-diagnostic.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-dump.cc b/gcc/tree-dump.cc
index ba3cf1a2fe3b..46908780ad62 100644
--- a/gcc/tree-dump.cc
+++ b/gcc/tree-dump.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-inline.cc b/gcc/tree-inline.cc
index 037fd1e946ae..e869b0722a0a 100644
--- a/gcc/tree-inline.cc
+++ b/gcc/tree-inline.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-into-ssa.cc b/gcc/tree-into-ssa.cc
index fc61d47ca777..78d5b922fa61 100644
--- a/gcc/tree-into-ssa.cc
+++ b/gcc/tree-into-ssa.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-logical-location.cc b/gcc/tree-logical-location.cc
index ca8b34a42d36..5967e13e1ff9 100644
--- a/gcc/tree-logical-location.cc
+++ b/gcc/tree-logical-location.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-nested.cc b/gcc/tree-nested.cc
index fc0495d64431..a54e72c32370 100644
--- a/gcc/tree-nested.cc
+++ b/gcc/tree-nested.cc
@@ -17,6 +17,7 @@ 
    along with GCC; see the file COPYING3.  If not see
    <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-nrv.cc b/gcc/tree-nrv.cc
index 0a8f359790a8..aa01b96c953c 100644
--- a/gcc/tree-nrv.cc
+++ b/gcc/tree-nrv.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-object-size.cc b/gcc/tree-object-size.cc
index 0e4bf84fd11c..09aad88498ea 100644
--- a/gcc/tree-object-size.cc
+++ b/gcc/tree-object-size.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-outof-ssa.cc b/gcc/tree-outof-ssa.cc
index 6d9c125f4e0d..1d9a4a370fae 100644
--- a/gcc/tree-outof-ssa.cc
+++ b/gcc/tree-outof-ssa.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-pretty-print.cc b/gcc/tree-pretty-print.cc
index cf36b3716910..e8dc82c4bb57 100644
--- a/gcc/tree-pretty-print.cc
+++ b/gcc/tree-pretty-print.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-profile.cc b/gcc/tree-profile.cc
index 153c9323040a..91a14927cdc4 100644
--- a/gcc/tree-profile.cc
+++ b/gcc/tree-profile.cc
@@ -24,6 +24,7 @@  along with GCC; see the file COPYING3.  If not see
 /* Generate basic block profile instrumentation and auxiliary files.
    Tree-based version.  See profile.cc for overview.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-scalar-evolution.cc b/gcc/tree-scalar-evolution.cc
index abb2bad77737..357e21013e11 100644
--- a/gcc/tree-scalar-evolution.cc
+++ b/gcc/tree-scalar-evolution.cc
@@ -253,6 +253,7 @@  along with GCC; see the file COPYING3.  If not see
    at: http://cri.ensmp.fr/~pop/gcc/20040604/gccsummit-lno-spop.pdf
 */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-sra.cc b/gcc/tree-sra.cc
index 64e2f007d680..a8e86f04fb41 100644
--- a/gcc/tree-sra.cc
+++ b/gcc/tree-sra.cc
@@ -71,6 +71,7 @@  along with GCC; see the file COPYING3.  If not see
       Finally, if a parameter got scalarized, the scalar replacements are
       initialized with values from respective parameter aggregates.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssa-address.cc b/gcc/tree-ssa-address.cc
index c4dfa371bb8c..61f54ec07768 100644
--- a/gcc/tree-ssa-address.cc
+++ b/gcc/tree-ssa-address.cc
@@ -20,6 +20,7 @@  along with GCC; see the file COPYING3.  If not see
 /* Utility functions for manipulation with TARGET_MEM_REFs -- tree expressions
    that directly map to addressing modes of the target.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssa-alias.cc b/gcc/tree-ssa-alias.cc
index fab048b0b594..2cdb5c92b7a2 100644
--- a/gcc/tree-ssa-alias.cc
+++ b/gcc/tree-ssa-alias.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssa-ccp.cc b/gcc/tree-ssa-ccp.cc
index db1287228239..5852fdc362b7 100644
--- a/gcc/tree-ssa-ccp.cc
+++ b/gcc/tree-ssa-ccp.cc
@@ -118,6 +118,7 @@  along with GCC; see the file COPYING3.  If not see
      Advanced Compiler Design and Implementation,
      Steven Muchnick, Morgan Kaufmann, 1997, Section 12.6  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssa-coalesce.cc b/gcc/tree-ssa-coalesce.cc
index 8d8727de32f1..8c9aafb98d7e 100644
--- a/gcc/tree-ssa-coalesce.cc
+++ b/gcc/tree-ssa-coalesce.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssa-copy.cc b/gcc/tree-ssa-copy.cc
index 9c9ec47adcaa..6cbf59412e77 100644
--- a/gcc/tree-ssa-copy.cc
+++ b/gcc/tree-ssa-copy.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssa-dce.cc b/gcc/tree-ssa-dce.cc
index 015c17984e16..c44eff35b840 100644
--- a/gcc/tree-ssa-dce.cc
+++ b/gcc/tree-ssa-dce.cc
@@ -42,6 +42,7 @@  along with GCC; see the file COPYING3.  If not see
       giving values to operands in necessary statements; and
    3. Removing dead statements.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssa-dom.cc b/gcc/tree-ssa-dom.cc
index 221fe6db3218..ef4e6c1c64ae 100644
--- a/gcc/tree-ssa-dom.cc
+++ b/gcc/tree-ssa-dom.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssa-forwprop.cc b/gcc/tree-ssa-forwprop.cc
index 766eaf0e4e79..7af4dc1f8dff 100644
--- a/gcc/tree-ssa-forwprop.cc
+++ b/gcc/tree-ssa-forwprop.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssa-ifcombine.cc b/gcc/tree-ssa-ifcombine.cc
index 6a3bc99190d9..f8064094c426 100644
--- a/gcc/tree-ssa-ifcombine.cc
+++ b/gcc/tree-ssa-ifcombine.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssa-loop-ch.cc b/gcc/tree-ssa-loop-ch.cc
index 6552ddd1ee2f..ec936d862929 100644
--- a/gcc/tree-ssa-loop-ch.cc
+++ b/gcc/tree-ssa-loop-ch.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssa-loop-im.cc b/gcc/tree-ssa-loop-im.cc
index ccc56dc42f61..26b4147d07b4 100644
--- a/gcc/tree-ssa-loop-im.cc
+++ b/gcc/tree-ssa-loop-im.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssa-loop-manip.cc b/gcc/tree-ssa-loop-manip.cc
index 213f069c440c..326119383fd5 100644
--- a/gcc/tree-ssa-loop-manip.cc
+++ b/gcc/tree-ssa-loop-manip.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssa-loop-niter.cc b/gcc/tree-ssa-loop-niter.cc
index f87731ef8929..99f4b78b5ef4 100644
--- a/gcc/tree-ssa-loop-niter.cc
+++ b/gcc/tree-ssa-loop-niter.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssa-loop-split.cc b/gcc/tree-ssa-loop-split.cc
index 68435485b791..8427b010b3c9 100644
--- a/gcc/tree-ssa-loop-split.cc
+++ b/gcc/tree-ssa-loop-split.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssa-math-opts.cc b/gcc/tree-ssa-math-opts.cc
index f9ccdf41d67f..e78ef76bd3bf 100644
--- a/gcc/tree-ssa-math-opts.cc
+++ b/gcc/tree-ssa-math-opts.cc
@@ -84,6 +84,7 @@  along with GCC; see the file COPYING3.  If not see
    The data structures would be more complex in order to work on all the
    variables in a single pass.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssa-operands.cc b/gcc/tree-ssa-operands.cc
index 1dbf6b9c7c49..a01aa51f1cc6 100644
--- a/gcc/tree-ssa-operands.cc
+++ b/gcc/tree-ssa-operands.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssa-phiprop.cc b/gcc/tree-ssa-phiprop.cc
index 2a1cdae46d27..ded0a4e6fb39 100644
--- a/gcc/tree-ssa-phiprop.cc
+++ b/gcc/tree-ssa-phiprop.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssa-pre.cc b/gcc/tree-ssa-pre.cc
index 13f2c8a5420d..7cbad301cebb 100644
--- a/gcc/tree-ssa-pre.cc
+++ b/gcc/tree-ssa-pre.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssa-propagate.cc b/gcc/tree-ssa-propagate.cc
index d96d0a9fe19b..43b17606a161 100644
--- a/gcc/tree-ssa-propagate.cc
+++ b/gcc/tree-ssa-propagate.cc
@@ -18,6 +18,7 @@ 
    along with GCC; see the file COPYING3.  If not see
    <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssa-reassoc.cc b/gcc/tree-ssa-reassoc.cc
index 347350fc98df..a898658da34d 100644
--- a/gcc/tree-ssa-reassoc.cc
+++ b/gcc/tree-ssa-reassoc.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssa-sccvn.cc b/gcc/tree-ssa-sccvn.cc
index abf7d38d15cb..4fa37cd71721 100644
--- a/gcc/tree-ssa-sccvn.cc
+++ b/gcc/tree-ssa-sccvn.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssa-scopedtables.cc b/gcc/tree-ssa-scopedtables.cc
index c367d37fa9b5..3f43b64e8980 100644
--- a/gcc/tree-ssa-scopedtables.cc
+++ b/gcc/tree-ssa-scopedtables.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssa-sink.cc b/gcc/tree-ssa-sink.cc
index 8c551e42a4d2..eace914e72bd 100644
--- a/gcc/tree-ssa-sink.cc
+++ b/gcc/tree-ssa-sink.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssa-strlen.cc b/gcc/tree-ssa-strlen.cc
index ee60909aa21a..25c0adabbcd0 100644
--- a/gcc/tree-ssa-strlen.cc
+++ b/gcc/tree-ssa-strlen.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssa-structalias.cc b/gcc/tree-ssa-structalias.cc
index 73ba5aa6195c..a6adec3b0b64 100644
--- a/gcc/tree-ssa-structalias.cc
+++ b/gcc/tree-ssa-structalias.cc
@@ -18,6 +18,7 @@ 
    along with GCC; see the file COPYING3.  If not see
    <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssa-ter.cc b/gcc/tree-ssa-ter.cc
index 9b338bd26956..890ad0110841 100644
--- a/gcc/tree-ssa-ter.cc
+++ b/gcc/tree-ssa-ter.cc
@@ -19,6 +19,7 @@  along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssa-uninit.cc b/gcc/tree-ssa-uninit.cc
index 726684e472aa..9c3c6878ac96 100644
--- a/gcc/tree-ssa-uninit.cc
+++ b/gcc/tree-ssa-uninit.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #define INCLUDE_STRING
 #include "config.h"
 #include "system.h"
diff --git a/gcc/tree-ssa.cc b/gcc/tree-ssa.cc
index f4fa4e98c5d0..7c6807cdb98c 100644
--- a/gcc/tree-ssa.cc
+++ b/gcc/tree-ssa.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-ssanames.cc b/gcc/tree-ssanames.cc
index 4f83fcbb5171..caf667f417c5 100644
--- a/gcc/tree-ssanames.cc
+++ b/gcc/tree-ssanames.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-stdarg.cc b/gcc/tree-stdarg.cc
index 33763cd3d112..79b549ad6fa7 100644
--- a/gcc/tree-stdarg.cc
+++ b/gcc/tree-stdarg.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-streamer-in.cc b/gcc/tree-streamer-in.cc
index 2fa998d37f85..bf9df99efad5 100644
--- a/gcc/tree-streamer-in.cc
+++ b/gcc/tree-streamer-in.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-streamer-out.cc b/gcc/tree-streamer-out.cc
index 2fdd914b1663..93ef90542cec 100644
--- a/gcc/tree-streamer-out.cc
+++ b/gcc/tree-streamer-out.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-streamer.cc b/gcc/tree-streamer.cc
index 72e967a9861b..0a80af774d6a 100644
--- a/gcc/tree-streamer.cc
+++ b/gcc/tree-streamer.cc
@@ -20,6 +20,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-switch-conversion.cc b/gcc/tree-switch-conversion.cc
index 00426d400006..33023875ef97 100644
--- a/gcc/tree-switch-conversion.cc
+++ b/gcc/tree-switch-conversion.cc
@@ -22,6 +22,7 @@  Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
 /* This file handles the lowering of GIMPLE_SWITCH to an indexed
    load, or a series of bit-test-and-branch expressions.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-tailcall.cc b/gcc/tree-tailcall.cc
index 1901b1a13f99..d188da79aaf2 100644
--- a/gcc/tree-tailcall.cc
+++ b/gcc/tree-tailcall.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree-vrp.cc b/gcc/tree-vrp.cc
index a19f8ec24266..c265672bf99a 100644
--- a/gcc/tree-vrp.cc
+++ b/gcc/tree-vrp.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/tree.cc b/gcc/tree.cc
index b40f4d31b2f1..0e0dbee63251 100644
--- a/gcc/tree.cc
+++ b/gcc/tree.cc
@@ -27,6 +27,7 @@  along with GCC; see the file COPYING3.  If not see
    It is intended to be language-independent but can occasionally
    calls language-dependent routines.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/ubsan.cc b/gcc/ubsan.cc
index 76ca7a04265b..ae48dc93475a 100644
--- a/gcc/ubsan.cc
+++ b/gcc/ubsan.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/value-pointer-equiv.cc b/gcc/value-pointer-equiv.cc
index cfb53ab4eeef..3e415c5efea4 100644
--- a/gcc/value-pointer-equiv.cc
+++ b/gcc/value-pointer-equiv.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/value-prof.cc b/gcc/value-prof.cc
index ddb4b4e1ee59..61578bedf0a7 100644
--- a/gcc/value-prof.cc
+++ b/gcc/value-prof.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/value-query.cc b/gcc/value-query.cc
index cac2cb5b2bc0..0ead7806f127 100644
--- a/gcc/value-query.cc
+++ b/gcc/value-query.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/value-range-pretty-print.cc b/gcc/value-range-pretty-print.cc
index b11d64947741..cbd7bc5d5e16 100644
--- a/gcc/value-range-pretty-print.cc
+++ b/gcc/value-range-pretty-print.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/value-range-storage.cc b/gcc/value-range-storage.cc
index d3d98f98d7b1..b74ae7f0ad7b 100644
--- a/gcc/value-range-storage.cc
+++ b/gcc/value-range-storage.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/value-range.cc b/gcc/value-range.cc
index 3046232bbca2..775e97da11ce 100644
--- a/gcc/value-range.cc
+++ b/gcc/value-range.cc
@@ -19,6 +19,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/value-relation.cc b/gcc/value-relation.cc
index d8a2ed920a82..5c7986e23fb0 100644
--- a/gcc/value-relation.cc
+++ b/gcc/value-relation.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/var-tracking.cc b/gcc/var-tracking.cc
index 08174669c269..5f1358c1ac25 100644
--- a/gcc/var-tracking.cc
+++ b/gcc/var-tracking.cc
@@ -85,6 +85,7 @@ 
 
 */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/varpool.cc b/gcc/varpool.cc
index e40504d1bd80..0b5d448f7c33 100644
--- a/gcc/varpool.cc
+++ b/gcc/varpool.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/vr-values.cc b/gcc/vr-values.cc
index cf273a3fc623..6db17042a34a 100644
--- a/gcc/vr-values.cc
+++ b/gcc/vr-values.cc
@@ -17,6 +17,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/gcc/wide-int-print.cc b/gcc/wide-int-print.cc
index 3e02ee123089..c4ee7791bc36 100644
--- a/gcc/wide-int-print.cc
+++ b/gcc/wide-int-print.cc
@@ -18,6 +18,7 @@  You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
 
+#define INCLUDE_MEMORY
 #include "config.h"
 #include "system.h"
 #include "coretypes.h"
diff --git a/libgcc/libgcov-util.c b/libgcc/libgcov-util.c
index f443408c4ab7..e93f5859dc0f 100644
--- a/libgcc/libgcov-util.c
+++ b/libgcc/libgcov-util.c
@@ -27,6 +27,7 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 
 #define IN_GCOV_TOOL 1
 
+#define INCLUDE_MEMORY
 #include "libgcov.h"
 #include "intl.h"
 #include "diagnostic.h"