On Sat, 2009-06-27 at 13:25 +0200, Eric Botcazou wrote:
> > This was the only va_arg usage, may be we should apply it on trunk too
> > as the patched version is supposed to work for both C and C++.
> 
> Yes, but I'm testing a patch for trunk with more changes.

For reference here is my current draft patch to gcc-in-cxx branch,
it completes make bootstrap including gnattools, check
running.

Laurent

Index: gcc/ada/adadecode.h
===================================================================
--- gcc/ada/adadecode.h (revision 148953)
+++ gcc/ada/adadecode.h (working copy)
@@ -29,6 +29,11 @@
  *                                                                          *
  ****************************************************************************/
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* This function will return the Ada name from the encoded form.
    The Ada coding is done in exp_dbug.ads and this is the inverse function.
    see exp_dbug.ads for full encoding rules, a short description is added
@@ -51,3 +56,8 @@
    function used in the binutils and GDB. Always consider using __gnat_decode
    instead of ada_demangle. Caller must free the pointer returned.  */
 extern char *ada_demangle (const char *);
+
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/sysdep.c
===================================================================
--- gcc/ada/sysdep.c    (revision 148953)
+++ gcc/ada/sysdep.c    (working copy)
@@ -32,6 +32,10 @@
 /* This file contains system dependent symbols that are referenced in the
    GNAT Run Time Library */
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #ifdef __vxworks
 #include "ioLib.h"
 #include "dosFsLib.h"
@@ -938,3 +942,7 @@
          return 0;
    }
 }
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/targext.c
===================================================================
--- gcc/ada/targext.c   (revision 148953)
+++ gcc/ada/targext.c   (working copy)
@@ -33,6 +33,10 @@
 /*  extension for object and executable files. It is used by the compiler,  */
 /*  binder and tools.                                                       */
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include "system.h"
 #include "coretypes.h"
 #include "tm.h"
@@ -48,3 +52,8 @@
 const char *__gnat_target_object_extension = TARGET_OBJECT_SUFFIX;
 const char *__gnat_target_executable_extension = TARGET_EXECUTABLE_SUFFIX;
 const char *__gnat_target_debuggable_extension = TARGET_EXECUTABLE_SUFFIX;
+
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/s-oscons-tmplt.c
===================================================================
--- gcc/ada/s-oscons-tmplt.c    (revision 148953)
+++ gcc/ada/s-oscons-tmplt.c    (working copy)
@@ -79,6 +79,11 @@
  **
  **/
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include <stdlib.h>
 #include <string.h>
 #include <limits.h>
@@ -1307,8 +1312,14 @@
 
 #endif
 
+
 /*
 
 end System.OS_Constants;
 */
 }
+
+
+#ifdef __cplusplus
+  }
+#endif
Index: gcc/ada/env.c
===================================================================
--- gcc/ada/env.c       (revision 148953)
+++ gcc/ada/env.c       (working copy)
@@ -29,6 +29,11 @@
  *                                                                          *
  ****************************************************************************/
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #ifdef IN_RTS
 #include "tconfig.h"
 #include "tsystem.h"
@@ -313,3 +318,7 @@
   clearenv ();
 #endif
 }
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/final.c
===================================================================
--- gcc/ada/final.c     (revision 148953)
+++ gcc/ada/final.c     (working copy)
@@ -29,6 +29,11 @@
  *                                                                          *
  ****************************************************************************/
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 extern void __gnat_finalize (void);
 
 /* This routine is called at the extreme end of execution of an Ada program
@@ -40,3 +45,8 @@
 __gnat_finalize (void)
 {
 }
+
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/init.c
===================================================================
--- gcc/ada/init.c      (revision 148953)
+++ gcc/ada/init.c      (working copy)
@@ -38,6 +38,11 @@
     installed by this file are used to catch the resulting signals that come
     from these probes failing (i.e. touching protected pages).  */
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* This file should be kept synchronized with 2sinit.ads, 2sinit.adb,
    s-init-ae653-cert.adb and s-init-xi-sparc.adb.  All these files implement
    the required functionality for different targets.  */
@@ -2319,3 +2324,7 @@
 }
 
 #endif
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/xsnamest.adb
===================================================================
--- gcc/ada/xsnamest.adb        (revision 148953)
+++ gcc/ada/xsnamest.adb        (working copy)
@@ -194,6 +194,10 @@
    Create (OutB, Out_File, "snames.nb");
    Create (OutH, Out_File, "snames.nh");
 
+   Put_Line (OutH, "#ifdef __cplusplus");
+   Put_Line (OutH, "extern ""C"" {");
+   Put_Line (OutH, "#endif");
+
    Anchored_Mode := True;
    Val := 0;
 
@@ -274,4 +278,8 @@
       Line := Get_Line (InH);
       Put_Line (OutH, Line);
    end loop;
+
+   Put_Line (OutH, "#ifdef __cplusplus");
+   Put_Line (OutH, "}");
+   Put_Line (OutH, "#endif");
 end XSnamesT;
Index: gcc/ada/errno.c
===================================================================
--- gcc/ada/errno.c     (revision 148953)
+++ gcc/ada/errno.c     (working copy)
@@ -36,6 +36,10 @@
 */
 
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #define _REENTRANT
 #define _THREAD_SAFE
 #define _SGI_MP_SOURCE
@@ -64,3 +68,8 @@
 {
   errno = err;
 }
+
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/xsinfo.adb
===================================================================
--- gcc/ada/xsinfo.adb  (revision 148953)
+++ gcc/ada/xsinfo.adb  (working copy)
@@ -159,6 +159,11 @@
    end loop;
 
    Put_Line (Ofile, "");
+
+   Put_Line (Ofile, "#ifdef __cplusplus");
+   Put_Line (Ofile, "extern ""C"" {");
+   Put_Line (Ofile, "#endif");
+
    NKV := 0;
 
    --  Loop through node kind codes
@@ -242,6 +247,10 @@
 exception
    when Done =>
       Put_Line (Ofile, "");
+      Put_Line (Ofile, "#ifdef __cplusplus");
+      Put_Line (Ofile, "}");
+      Put_Line (Ofile, "#endif");
+
       Set_Exit_Status (0);
 
 end XSinfo;
Index: gcc/ada/nlists.h
===================================================================
--- gcc/ada/nlists.h    (revision 148953)
+++ gcc/ada/nlists.h    (working copy)
@@ -31,6 +31,11 @@
    Note that only routines for reading the tree are included, since the
    tree transformer is not supposed to modify the tree in any way. */
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /*  The following is the structure used for the list headers table */
 
 struct List_Header
@@ -128,3 +133,8 @@
 {
   return Nodes_Ptr[Node - First_Node_Id].V.NX.link;
 }
+
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/aux-io.c
===================================================================
--- gcc/ada/aux-io.c    (revision 148953)
+++ gcc/ada/aux-io.c    (working copy)
@@ -29,6 +29,11 @@
  *                                                                          *
  ****************************************************************************/
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include <stdio.h>
 
 #ifdef IN_RTS
@@ -96,3 +101,7 @@
 {
   return fileno (s);
 }
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/initialize.c
===================================================================
--- gcc/ada/initialize.c        (revision 148953)
+++ gcc/ada/initialize.c        (working copy)
@@ -34,6 +34,11 @@
     in a separate file/object so that users can replace it easily.
     The default implementation should be null on most targets. */
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* The following include is here to meet the published VxWorks requirement
    that the __vxworks header appear before any other include. */
 #ifdef __vxworks
@@ -369,3 +374,8 @@
 }
 
 #endif
+
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/tb-alvms.c
===================================================================
--- gcc/ada/tb-alvms.c  (revision 148953)
+++ gcc/ada/tb-alvms.c  (working copy)
@@ -39,6 +39,10 @@
    Most of the contents is directed by the OpenVMS/Alpha Conventions (ABI)
    document, sections of which we will refer to as ABI-<section_number>.  */
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include <vms/pdscdef.h>
 #include <vms/libicb.h>
 #include <vms/chfctxdef.h>
@@ -394,3 +398,7 @@
 
   return cnt;
 }
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/repinfo.h
===================================================================
--- gcc/ada/repinfo.h   (revision 148953)
+++ gcc/ada/repinfo.h   (working copy)
@@ -31,6 +31,11 @@
 
 /* This file corresponds to the Ada file repinfo.ads.  */
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 typedef Uint Node_Ref;
 typedef Uint Node_Ref_Or_Val;
 typedef char TCode;
@@ -75,3 +80,8 @@
 #define Create_Node repinfo__create_node
 extern Node_Ref Create_Node    (TCode, Node_Ref_Or_Val,
                                 Node_Ref_Or_Val, Node_Ref_Or_Val);
+
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/vx_stack_info.c
===================================================================
--- gcc/ada/vx_stack_info.c     (revision 148953)
+++ gcc/ada/vx_stack_info.c     (working copy)
@@ -32,6 +32,10 @@
 /* VxWorks-specific file to have access to task-specific data and be able
    to extract the stack boundaries for stack checking. */
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include <taskLib.h>
 
 typedef struct
@@ -59,3 +63,7 @@
   vxworks_stack_info->base = descriptor.td_pStackBase;
   vxworks_stack_info->end  = descriptor.td_pStackEnd;
 }
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/fe.h
===================================================================
--- gcc/ada/fe.h        (revision 148953)
+++ gcc/ada/fe.h        (working copy)
@@ -32,6 +32,11 @@
 /* This file contains definitions to access front-end functions and
    variables used by gigi.  */
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* comperr:  */
 
 #define Compiler_Abort comperr__compiler_abort
@@ -243,3 +248,8 @@
 extern Boolean Backend_Overflow_Checks_On_Target;
 extern Boolean Stack_Check_Probes_On_Target;
 extern Boolean Stack_Check_Limits_On_Target;
+
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/tb-ivms.c
===================================================================
--- gcc/ada/tb-ivms.c   (revision 148953)
+++ gcc/ada/tb-ivms.c   (working copy)
@@ -30,6 +30,10 @@
  *                                                                          *
  ****************************************************************************/
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* Itanium Open/VMS implementation of backtrace.  Use ICB (Invocation
    Context Block) routines.  */
 #include <stdlib.h>
@@ -87,3 +91,8 @@
   LIB$I64_FREE_INVO_CONTEXT (ctxt);
   return res;
 }
+
+#ifdef __cplusplus
+}
+#endif
+
Index: gcc/ada/mkdir.c
===================================================================
--- gcc/ada/mkdir.c     (revision 148953)
+++ gcc/ada/mkdir.c     (working copy)
@@ -29,6 +29,11 @@
  *                                                                          *
  ****************************************************************************/
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #ifdef __vxworks
 #include "vxWorks.h"
 #include <version.h>
@@ -71,3 +76,8 @@
   return mkdir (dir_name, S_IRWXU | S_IRWXG | S_IRWXO);
 #endif
 }
+
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/xsnames.adb
===================================================================
--- gcc/ada/xsnames.adb (revision 148953)
+++ gcc/ada/xsnames.adb (working copy)
@@ -163,6 +163,10 @@
    Create (OutB, Out_File, "snames.nb");
    Create (OutH, Out_File, "snames.nh");
 
+   Put_Line (OutH, "#ifdef __cplusplus");
+   Put_Line (OutH, "extern ""C"" {");
+   Put_Line (OutH, "#endif");
+
    Anchored_Mode := True;
    Val := 0;
 
@@ -241,4 +245,9 @@
       Line := Get_Line (InH);
       Put_Line (OutH, Line);
    end loop;
+
+   Put_Line (OutH, "#ifdef __cplusplus");
+   Put_Line (OutH, "}");
+   Put_Line (OutH, "#endif");
+
 end XSnames;
Index: gcc/ada/socket.c
===================================================================
--- gcc/ada/socket.c    (revision 148953)
+++ gcc/ada/socket.c    (working copy)
@@ -31,6 +31,12 @@
 
 /*  This file provides a portable binding to the sockets API                */
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
 #include "gsocket.h"
 #ifdef VMS
 /*
@@ -491,3 +497,8 @@
 #else
 # warning Sockets are not supported on this platform
 #endif /* defined(HAVE_SOCKETS) */
+
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/raise.c
===================================================================
--- gcc/ada/raise.c     (revision 148953)
+++ gcc/ada/raise.c     (working copy)
@@ -35,6 +35,10 @@
    __gnat_unhandled_terminate is code shared between all exception handling
    mechanisms */
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #ifdef IN_RTS
 #include "tconfig.h"
 #include "tsystem.h"
@@ -76,3 +80,8 @@
   /* Default termination handling */
   __gnat_os_exit (1);
 }
+
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/tb-alvxw.c
===================================================================
--- gcc/ada/tb-alvxw.c  (revision 148953)
+++ gcc/ada/tb-alvxw.c  (working copy)
@@ -34,6 +34,10 @@
    from GDB. This file is #included within tracebak.c in the appropriate
    case.  */
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include <stddef.h>
 #include <stdlib.h>
 #include <limits.h>
@@ -939,3 +943,7 @@
 
   return cnt;
 }
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/raise.h
===================================================================
--- gcc/ada/raise.h     (revision 148953)
+++ gcc/ada/raise.h     (working copy)
@@ -29,6 +29,9 @@
  *                                                                          *
  ****************************************************************************/
 
+#ifdef __cplusplus
+extern "C" {
+#endif
 
 /* C counterparts of what System.Standard_Library defines.  */
 
@@ -71,3 +74,8 @@
 extern void __gnat_adjust_context_for_raise (int, void *);
 
 extern int gnat_exit_status;
+
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/xeinfo.adb
===================================================================
--- gcc/ada/xeinfo.adb  (revision 148953)
+++ gcc/ada/xeinfo.adb  (working copy)
@@ -269,6 +269,10 @@
 
    Put_Line (Ofile, "");
 
+   Put_Line (Ofile, "#ifdef __cplusplus");
+   Put_Line (Ofile, "extern ""C"" {");
+   Put_Line (Ofile, "#endif");
+
    --  Find and record pragma Inlines
 
    loop
@@ -483,6 +487,11 @@
    end loop;
 
    Put_Line (Ofile, "");
+
+   Put_Line (Ofile, "#ifdef __cplusplus");
+   Put_Line (Ofile, "}");
+   Put_Line (Ofile, "#endif");
+
    Put_Line
      (Ofile,
       "/* End of einfo.h (C version of Einfo package specification) */");
Index: gcc/ada/exit.c
===================================================================
--- gcc/ada/exit.c      (revision 148953)
+++ gcc/ada/exit.c      (working copy)
@@ -29,6 +29,11 @@
  *                                                                          *
  ****************************************************************************/
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #ifdef __alpha_vxworks
 #include "vxWorks.h"
 #endif
@@ -53,3 +58,8 @@
 {
   gnat_exit_status = i;
 }
+
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/arit64.c
===================================================================
--- gcc/ada/arit64.c    (revision 148953)
+++ gcc/ada/arit64.c    (working copy)
@@ -29,6 +29,11 @@
  *                                                                          *
  ****************************************************************************/
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 extern void __gnat_rcheck_10(char *file, int line)
   __attribute__ ((__noreturn__));
 
@@ -55,3 +60,7 @@
 
   return (long long int) (neg ? -low : low);
 }
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/adaint.c
===================================================================
--- gcc/ada/adaint.c    (revision 148953)
+++ gcc/ada/adaint.c    (working copy)
@@ -34,6 +34,11 @@
    package Osint.  Many of the subprograms in OS_Lib import standard
    library calls directly. This file contains all other routines.  */
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #ifdef __vxworks
 
 /* No need to redefine exit here.  */
@@ -288,9 +293,9 @@
 /* This variable is used in hostparm.ads to say whether the host is a VMS
    system.  */
 #ifdef VMS
-const int __gnat_vmsp = 1;
+int __gnat_vmsp = 1;
 #else
-const int __gnat_vmsp = 0;
+int __gnat_vmsp = 0;
 #endif
 
 #ifdef __EMX__
@@ -3597,3 +3602,7 @@
    return (void *) syscall (__NR_gettid);
 }
 #endif
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/adaint.h
===================================================================
--- gcc/ada/adaint.h    (revision 148953)
+++ gcc/ada/adaint.h    (working copy)
@@ -29,6 +29,12 @@
  *                                                                          *
  ****************************************************************************/
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
 #include <sys/stat.h>
 #include <stdio.h>
 
@@ -194,3 +200,8 @@
 
 extern int    __gnat_binder_supports_auto_init     (void);
 extern int    __gnat_sals_init_using_constructors  (void);
+
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/ctrl_c.c
===================================================================
--- gcc/ada/ctrl_c.c    (revision 148953)
+++ gcc/ada/ctrl_c.c    (working copy)
@@ -29,6 +29,11 @@
  *                                                                          *
  ****************************************************************************/
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #ifdef IN_RTS
 #include "tconfig.h"
 #include "tsystem.h"
@@ -164,3 +169,8 @@
 {
 }
 #endif
+
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/cio.c
===================================================================
--- gcc/ada/cio.c       (revision 148953)
+++ gcc/ada/cio.c       (working copy)
@@ -29,6 +29,11 @@
  *                                                                          *
  ****************************************************************************/
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #ifdef IN_RTS
 #include "tconfig.h"
 #include "tsystem.h"
@@ -129,3 +134,8 @@
   return tmpnam (NULL);
 }
 #endif
+
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/raise-gcc.c
===================================================================
--- gcc/ada/raise-gcc.c (revision 148953)
+++ gcc/ada/raise-gcc.c (working copy)
@@ -32,6 +32,10 @@
 /* Code related to the integration of the GCC mechanism for exception
    handling.  */
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #ifdef IN_RTS
 #include "tconfig.h"
 #include "tsystem.h"
@@ -1221,3 +1225,8 @@
 }
 
 #endif /* IN_RTS */
+
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/cstreams.c
===================================================================
--- gcc/ada/cstreams.c  (revision 148953)
+++ gcc/ada/cstreams.c  (working copy)
@@ -31,6 +31,11 @@
 
 /* Routines required for implementing routines in Interfaces.C.Streams */
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #ifdef __vxworks
 #include "vxWorks.h"
 #endif
@@ -254,3 +259,8 @@
 
   return buffer;
 }
+
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/cal.c
===================================================================
--- gcc/ada/cal.c       (revision 148953)
+++ gcc/ada/cal.c       (working copy)
@@ -35,6 +35,11 @@
 /*  struct timeval fields type are not normalized (they are generally       */
 /*  defined as int or long values).                                         */
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #if defined(VMS) || defined(__nucleus__)
 
 /* this is temporary code to avoid build failure under VMS */
@@ -107,3 +112,8 @@
 {
   return time (0);
 }
+
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/uintp.h
===================================================================
--- gcc/ada/uintp.h     (revision 148953)
+++ gcc/ada/uintp.h     (working copy)
@@ -26,6 +26,11 @@
 /* This file corresponds to the Ada package specification Uintp. It was
    created manually from the files uintp.ads and uintp.adb  */
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* Support for universal integer arithmetic */
 
 struct Uint_Entry
@@ -78,3 +83,7 @@
 
 #define Uint_0 (Uint_Direct_Bias + 0)
 #define Uint_1 (Uint_Direct_Bias + 1)
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/tracebak.c
===================================================================
--- gcc/ada/tracebak.c  (revision 148953)
+++ gcc/ada/tracebak.c  (working copy)
@@ -46,6 +46,10 @@
    Alpha/VMS
 */
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #ifdef __alpha_vxworks
 #include "vxWorks.h"
 #endif
@@ -507,3 +511,7 @@
 #endif
 
 #endif
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/urealp.h
===================================================================
--- gcc/ada/urealp.h    (revision 148953)
+++ gcc/ada/urealp.h    (working copy)
@@ -26,6 +26,11 @@
 /* This file corresponds to the Ada package specification Urealp. It was
    created manually from the files urealp.ads and urealp.adb  */
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* Support for universal real arithmetic.  */
 
 #define Numerator urealp__numerator
@@ -48,3 +53,8 @@
 #define Machine eval_fat__machine
 extern Ureal Machine           (Entity_Id, Ureal, enum Rounding_Mode,
                                 Node_Id);
+
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/namet.h
===================================================================
--- gcc/ada/namet.h     (revision 148953)
+++ gcc/ada/namet.h     (working copy)
@@ -26,6 +26,11 @@
 /* This is the C file that corresponds to the Ada package specification
    Namet. It was created manually from files namet.ads and namet.adb.  */
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* Structure defining a names table entry.  */
 
 struct Name_Entry
@@ -127,3 +132,8 @@
 extern Logical_Line_Number Get_Logical_Line_Number (Source_Ptr);
 extern Column_Number Get_Column_Number (Source_Ptr);
 extern Source_Ptr Instantiation (Source_File_Index);
+
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/tb-gcc.c
===================================================================
--- gcc/ada/tb-gcc.c    (revision 148953)
+++ gcc/ada/tb-gcc.c    (working copy)
@@ -35,6 +35,10 @@
    underlying GCC unwinding support associated with the exception handling
    infrastructure.  This will only work for ZCX based applications.  */
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include <unwind.h>
 
 /* The implementation boils down to a call to _Unwind_Backtrace with a
@@ -64,13 +68,13 @@
 static _Unwind_Reason_Code
 trace_callback (struct _Unwind_Context * uw_context, uw_data_t * uw_data)
 {
-  void * pc;
+  char * pc;
 
 #if defined (__ia64__) && defined (__hpux__)
   /* Work around problem with _Unwind_GetIP on ia64 HP-UX. */
   uwx_get_reg ((struct uwx_env *) uw_context, UWX_REG_IP, (uint64_t *) &pc);
 #else
-  pc = (void *) _Unwind_GetIP (uw_context);
+  pc = (char *) _Unwind_GetIP (uw_context);
 #endif
 
   if (uw_data->n_frames_skipped < uw_data->n_frames_to_skip)
@@ -123,3 +127,7 @@
   return uw_data.n_entries_filled;
 #endif
 }
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/gcc-interface/utils.c
===================================================================
--- gcc/ada/gcc-interface/utils.c       (revision 148953)
+++ gcc/ada/gcc-interface/utils.c       (working copy)
@@ -1014,33 +1014,33 @@
             bool has_rep)
 {
   tree type = TREE_TYPE (last_size);
-  tree new;
+  tree new_tree;
 
   if (!special || TREE_CODE (size) != COND_EXPR)
     {
-      new = size_binop (PLUS_EXPR, first_bit, size);
+      new_tree = size_binop (PLUS_EXPR, first_bit, size);
       if (has_rep)
-       new = size_binop (MAX_EXPR, last_size, new);
+       new_tree = size_binop (MAX_EXPR, last_size, new_tree);
     }
 
   else
-    new = fold_build3 (COND_EXPR, type, TREE_OPERAND (size, 0),
-                      integer_zerop (TREE_OPERAND (size, 1))
-                      ? last_size : merge_sizes (last_size, first_bit,
-                                                 TREE_OPERAND (size, 1),
-                                                 1, has_rep),
-                      integer_zerop (TREE_OPERAND (size, 2))
-                      ? last_size : merge_sizes (last_size, first_bit,
-                                                 TREE_OPERAND (size, 2),
-                                                 1, has_rep));
+    new_tree = fold_build3 (COND_EXPR, type, TREE_OPERAND (size, 0),
+                           integer_zerop (TREE_OPERAND (size, 1))
+                           ? last_size : merge_sizes (last_size, first_bit,
+                                                 TREE_OPERAND (size, 1),
+                                                 1, has_rep),
+                           integer_zerop (TREE_OPERAND (size, 2))
+                           ? last_size : merge_sizes (last_size, first_bit,
+                                                 TREE_OPERAND (size, 2),
+                                                 1, has_rep));
 
   /* We don't need any NON_VALUE_EXPRs and they can confuse us (especially
      when fed through substitute_in_expr) into thinking that a constant
      size is not constant.  */
-  while (TREE_CODE (new) == NON_LVALUE_EXPR)
-    new = TREE_OPERAND (new, 0);
+  while (TREE_CODE (new_tree) == NON_LVALUE_EXPR)
+    new_tree = TREE_OPERAND (new_tree, 0);
 
-  return new;
+  return new_tree;
 }
 
 /* Utility function of above to see if OP0 and OP1, both of SIZETYPE, are
@@ -1160,18 +1160,18 @@
 tree
 copy_type (tree type)
 {
-  tree new = copy_node (type);
+  tree new_tree = copy_node (type);
 
   /* copy_node clears this field instead of copying it, because it is
      aliased with TREE_CHAIN.  */
-  TYPE_STUB_DECL (new) = TYPE_STUB_DECL (type);
+  TYPE_STUB_DECL (new_tree) = TYPE_STUB_DECL (type);
 
-  TYPE_POINTER_TO (new) = 0;
-  TYPE_REFERENCE_TO (new) = 0;
-  TYPE_MAIN_VARIANT (new) = new;
-  TYPE_NEXT_VARIANT (new) = 0;
+  TYPE_POINTER_TO (new_tree) = 0;
+  TYPE_REFERENCE_TO (new_tree) = 0;
+  TYPE_MAIN_VARIANT (new_tree) = new_tree;
+  TYPE_NEXT_VARIANT (new_tree) = 0;
 
-  return new;
+  return new_tree;
 }
 
 /* Return a subtype of sizetype with range MIN to MAX and whose
@@ -2512,7 +2512,7 @@
   tree record_type = make_node (RECORD_TYPE);
   tree pointer32_type;
   tree field_list = 0;
-  int class;
+  int class_i;
   int dtype = 0;
   tree inner_type;
   int ndim;
@@ -2624,22 +2624,22 @@
     {
     case By_Descriptor_A:
     case By_Short_Descriptor_A:
-      class = 4;
+      class_i = 4;
       break;
     case By_Descriptor_NCA:
     case By_Short_Descriptor_NCA:
-      class = 10;
+      class_i = 10;
       break;
     case By_Descriptor_SB:
     case By_Short_Descriptor_SB:
-      class = 15;
+      class_i = 15;
       break;
     case By_Descriptor:
     case By_Short_Descriptor:
     case By_Descriptor_S:
     case By_Short_Descriptor_S:
     default:
-      class = 1;
+      class_i = 1;
       break;
     }
 
@@ -2661,7 +2661,7 @@
   field_list = chainon (field_list,
                        make_descriptor_field ("CLASS",
                                               gnat_type_for_size (8, 1),
-                                              record_type, size_int (class)));
+                                              record_type, size_int 
(class_i)));
 
   /* Of course this will crash at run-time if the address space is not
      within the low 32 bits, but there is nothing else we can do.  */
@@ -2827,7 +2827,7 @@
   tree record64_type = make_node (RECORD_TYPE);
   tree pointer64_type;
   tree field_list64 = 0;
-  int class;
+  int class_i;
   int dtype = 0;
   tree inner_type;
   int ndim;
@@ -2938,18 +2938,18 @@
   switch (mech)
     {
     case By_Descriptor_A:
-      class = 4;
+      class_i = 4;
       break;
     case By_Descriptor_NCA:
-      class = 10;
+      class_i = 10;
       break;
     case By_Descriptor_SB:
-      class = 15;
+      class_i = 15;
       break;
     case By_Descriptor:
     case By_Descriptor_S:
     default:
-      class = 1;
+      class_i = 1;
       break;
     }
 
@@ -2968,7 +2968,7 @@
   field_list64 = chainon (field_list64,
                        make_descriptor_field ("CLASS",
                                               gnat_type_for_size (8, 1),
-                                              record64_type, size_int 
(class)));
+                                              record64_type, size_int 
(class_i)));
 
   field_list64 = chainon (field_list64,
                        make_descriptor_field ("MBMO",
@@ -3151,9 +3151,9 @@
   tree desc_type = TREE_TYPE (TREE_TYPE (gnu_expr));
   tree desc = build1 (INDIRECT_REF, desc_type, gnu_expr);
   /* The CLASS field is the 3rd field in the descriptor.  */
-  tree class = TREE_CHAIN (TREE_CHAIN (TYPE_FIELDS (desc_type)));
+  tree class_tree = TREE_CHAIN (TREE_CHAIN (TYPE_FIELDS (desc_type)));
   /* The POINTER field is the 6th field in the descriptor.  */
-  tree pointer64 = TREE_CHAIN (TREE_CHAIN (TREE_CHAIN (class)));
+  tree pointer64 = TREE_CHAIN (TREE_CHAIN (TREE_CHAIN (class_tree)));
 
   /* Retrieve the value of the POINTER field.  */
   tree gnu_expr64
@@ -3169,9 +3169,9 @@
       tree template_type = TREE_TYPE (p_bounds_type);
       tree min_field = TYPE_FIELDS (template_type);
       tree max_field = TREE_CHAIN (TYPE_FIELDS (template_type));
-      tree template, template_addr, aflags, dimct, t, u;
+      tree template_tree, template_addr, aflags, dimct, t, u;
       /* See the head comment of build_vms_descriptor.  */
-      int iclass = TREE_INT_CST_LOW (DECL_INITIAL (class));
+      int iclass = TREE_INT_CST_LOW (DECL_INITIAL (class_tree));
       tree lfield, ufield;
 
       /* Convert POINTER to the type of the P_ARRAY field.  */
@@ -3182,23 +3182,23 @@
        case 1:  /* Class S  */
        case 15: /* Class SB */
          /* Build {1, LENGTH} template; LENGTH64 is the 5th field.  */
-         t = TREE_CHAIN (TREE_CHAIN (class));
+         t = TREE_CHAIN (TREE_CHAIN (class_tree));
          t = build3 (COMPONENT_REF, TREE_TYPE (t), desc, t, NULL_TREE);
          t = tree_cons (min_field,
                         convert (TREE_TYPE (min_field), integer_one_node),
                         tree_cons (max_field,
                                    convert (TREE_TYPE (max_field), t),
                                    NULL_TREE));
-         template = gnat_build_constructor (template_type, t);
-         template_addr = build_unary_op (ADDR_EXPR, NULL_TREE, template);
+         template_tree = gnat_build_constructor (template_type, t);
+         template_addr = build_unary_op (ADDR_EXPR, NULL_TREE, template_tree);
 
          /* For class S, we are done.  */
          if (iclass == 1)
            break;
 
          /* Test that we really have a SB descriptor, like DEC Ada.  */
-         t = build3 (COMPONENT_REF, TREE_TYPE (class), desc, class, NULL);
-         u = convert (TREE_TYPE (class), DECL_INITIAL (class));
+         t = build3 (COMPONENT_REF, TREE_TYPE (class_tree), desc, class_tree, 
NULL);
+         u = convert (TREE_TYPE (class_tree), DECL_INITIAL (class_tree));
          u = build_binary_op (EQ_EXPR, integer_type_node, t, u);
          /* If so, there is already a template in the descriptor and
             it is located right after the POINTER field.  The fields are
@@ -3216,12 +3216,12 @@
          t = tree_cons (TYPE_FIELDS (template_type), lfield,
                         tree_cons (TREE_CHAIN (TYPE_FIELDS (template_type)),
                                     ufield, NULL_TREE));
-         template = gnat_build_constructor (template_type, t);
+         template_tree = gnat_build_constructor (template_type, t);
 
          /* Otherwise use the {1, LENGTH} template we build above.  */
          template_addr = build3 (COND_EXPR, p_bounds_type, u,
                                  build_unary_op (ADDR_EXPR, p_bounds_type,
-                                                template),
+                                                template_tree),
                                  template_addr);
          break;
 
@@ -3263,12 +3263,12 @@
          t = tree_cons (TYPE_FIELDS (template_type), lfield,
                         tree_cons (TREE_CHAIN (TYPE_FIELDS (template_type)),
                                     ufield, NULL_TREE));
-         template = gnat_build_constructor (template_type, t);
-         template = build3 (COND_EXPR, p_bounds_type, u,
+         template_tree = gnat_build_constructor (template_type, t);
+         template_tree = build3 (COND_EXPR, p_bounds_type, u,
                            build_call_raise (CE_Length_Check_Failed, Empty,
                                              N_Raise_Constraint_Error),
-                           template);
-         template_addr = build_unary_op (ADDR_EXPR, p_bounds_type, template);
+                           template_tree);
+         template_addr = build_unary_op (ADDR_EXPR, p_bounds_type, 
template_tree);
          break;
 
        case 10: /* Class NCA */
@@ -3299,9 +3299,9 @@
   tree desc_type = TREE_TYPE (TREE_TYPE (gnu_expr));
   tree desc = build1 (INDIRECT_REF, desc_type, gnu_expr);
   /* The CLASS field is the 3rd field in the descriptor.  */
-  tree class = TREE_CHAIN (TREE_CHAIN (TYPE_FIELDS (desc_type)));
+  tree class_tree = TREE_CHAIN (TREE_CHAIN (TYPE_FIELDS (desc_type)));
   /* The POINTER field is the 4th field in the descriptor.  */
-  tree pointer = TREE_CHAIN (class);
+  tree pointer = TREE_CHAIN (class_tree);
 
   /* Retrieve the value of the POINTER field.  */
   tree gnu_expr32
@@ -3317,9 +3317,9 @@
       tree template_type = TREE_TYPE (p_bounds_type);
       tree min_field = TYPE_FIELDS (template_type);
       tree max_field = TREE_CHAIN (TYPE_FIELDS (template_type));
-      tree template, template_addr, aflags, dimct, t, u;
+      tree template_tree, template_addr, aflags, dimct, t, u;
       /* See the head comment of build_vms_descriptor.  */
-      int iclass = TREE_INT_CST_LOW (DECL_INITIAL (class));
+      int iclass = TREE_INT_CST_LOW (DECL_INITIAL (class_tree));
 
       /* Convert POINTER to the type of the P_ARRAY field.  */
       gnu_expr32 = convert (p_array_type, gnu_expr32);
@@ -3336,25 +3336,25 @@
                         tree_cons (max_field,
                                    convert (TREE_TYPE (max_field), t),
                                    NULL_TREE));
-         template = gnat_build_constructor (template_type, t);
-         template_addr = build_unary_op (ADDR_EXPR, NULL_TREE, template);
+         template_tree = gnat_build_constructor (template_type, t);
+         template_addr = build_unary_op (ADDR_EXPR, NULL_TREE, template_tree);
 
          /* For class S, we are done.  */
          if (iclass == 1)
            break;
 
          /* Test that we really have a SB descriptor, like DEC Ada.  */
-         t = build3 (COMPONENT_REF, TREE_TYPE (class), desc, class, NULL);
-         u = convert (TREE_TYPE (class), DECL_INITIAL (class));
+         t = build3 (COMPONENT_REF, TREE_TYPE (class_tree), desc, class_tree, 
NULL);
+         u = convert (TREE_TYPE (class_tree), DECL_INITIAL (class_tree));
          u = build_binary_op (EQ_EXPR, integer_type_node, t, u);
          /* If so, there is already a template in the descriptor and
             it is located right after the POINTER field.  */
          t = TREE_CHAIN (pointer);
-         template = build3 (COMPONENT_REF, TREE_TYPE (t), desc, t, NULL_TREE);
+         template_tree = build3 (COMPONENT_REF, TREE_TYPE (t), desc, t, 
NULL_TREE);
          /* Otherwise use the {1, LENGTH} template we build above.  */
          template_addr = build3 (COND_EXPR, p_bounds_type, u,
                                  build_unary_op (ADDR_EXPR, p_bounds_type,
-                                                template),
+                                                template_tree),
                                  template_addr);
          break;
 
@@ -3381,12 +3381,12 @@
          /* There is already a template in the descriptor and it is
             located at the start of block 3 (12th field).  */
          t = TREE_CHAIN (TREE_CHAIN (TREE_CHAIN (TREE_CHAIN (t))));
-         template = build3 (COMPONENT_REF, TREE_TYPE (t), desc, t, NULL_TREE);
-         template = build3 (COND_EXPR, p_bounds_type, u,
+         template_tree = build3 (COMPONENT_REF, TREE_TYPE (t), desc, t, 
NULL_TREE);
+         template_tree = build3 (COND_EXPR, p_bounds_type, u,
                            build_call_raise (CE_Length_Check_Failed, Empty,
                                              N_Raise_Constraint_Error),
-                           template);
-         template_addr = build_unary_op (ADDR_EXPR, p_bounds_type, template);
+                           template_tree);
+         template_addr = build_unary_op (ADDR_EXPR, p_bounds_type, 
template_tree);
          break;
 
        case 10: /* Class NCA */
@@ -3717,7 +3717,7 @@
   tree template_type = TREE_TYPE (TREE_TYPE (TREE_CHAIN (TYPE_FIELDS (type))));
   tree p_array_type = TREE_TYPE (TYPE_FIELDS (type));
   tree etype = TREE_TYPE (expr);
-  tree template;
+  tree template_tree;
 
   /* If EXPR is null, make a fat pointer that contains null pointers to the
      template and array.  */
@@ -3743,7 +3743,7 @@
       else
        expr = build1 (INDIRECT_REF, TREE_TYPE (etype), expr);
 
-      template = build_component_ref (expr, NULL_TREE, fields, false);
+      template_tree = build_component_ref (expr, NULL_TREE, fields, false);
       expr = build_unary_op (ADDR_EXPR, NULL_TREE,
                             build_component_ref (expr, NULL_TREE,
                                                  TREE_CHAIN (fields), false));
@@ -3751,7 +3751,7 @@
 
   /* Otherwise, build the constructor for the template.  */
   else
-    template = build_template (template_type, TREE_TYPE (etype), expr);
+    template_tree = build_template (template_type, TREE_TYPE (etype), expr);
 
   /* The final result is a constructor for the fat pointer.
 
@@ -3771,7 +3771,7 @@
        tree_cons (TYPE_FIELDS (type),
                  convert (p_array_type, expr),
                  tree_cons (TREE_CHAIN (TYPE_FIELDS (type)),
-                            build_unary_op (ADDR_EXPR, NULL_TREE, template),
+                            build_unary_op (ADDR_EXPR, NULL_TREE, 
template_tree),
                             NULL_TREE)));
 }
 
@@ -4301,20 +4301,20 @@
 maybe_unconstrained_array (tree exp)
 {
   enum tree_code code = TREE_CODE (exp);
-  tree new;
+  tree new_tree;
 
   switch (TREE_CODE (TREE_TYPE (exp)))
     {
     case UNCONSTRAINED_ARRAY_TYPE:
       if (code == UNCONSTRAINED_ARRAY_REF)
        {
-         new
+         new_tree
            = build_unary_op (INDIRECT_REF, NULL_TREE,
                              build_component_ref (TREE_OPERAND (exp, 0),
                                                   get_identifier ("P_ARRAY"),
                                                   NULL_TREE, false));
-         TREE_READONLY (new) = TREE_STATIC (new) = TREE_READONLY (exp);
-         return new;
+         TREE_READONLY (new_tree) = TREE_STATIC (new_tree) = TREE_READONLY 
(exp);
+         return new_tree;
        }
 
       else if (code == NULL_EXPR)
@@ -4328,12 +4328,12 @@
         it contains a template.  */
       if (TYPE_IS_PADDING_P (TREE_TYPE (exp)))
        {
-         new = convert (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (exp))), exp);
-         if (TREE_CODE (TREE_TYPE (new)) == RECORD_TYPE
-             && TYPE_CONTAINS_TEMPLATE_P (TREE_TYPE (new)))
+         new_tree = convert (TREE_TYPE (TYPE_FIELDS (TREE_TYPE (exp))), exp);
+         if (TREE_CODE (TREE_TYPE (new_tree)) == RECORD_TYPE
+             && TYPE_CONTAINS_TEMPLATE_P (TREE_TYPE (new_tree)))
            return
-             build_component_ref (new, NULL_TREE,
-                                  TREE_CHAIN (TYPE_FIELDS (TREE_TYPE (new))),
+             build_component_ref (new_tree, NULL_TREE,
+                                  TREE_CHAIN (TYPE_FIELDS (TREE_TYPE 
(new_tree))),
                                   0);
        }
       else if (TYPE_CONTAINS_TEMPLATE_P (TREE_TYPE (exp)))
@@ -4861,7 +4861,7 @@
   va_start (list, n);
   for (i = 0; i < n; ++i)
     {
-      builtin_type a = va_arg (list, builtin_type);
+      builtin_type a = (builtin_type)va_arg (list, int);
       t = builtin_types[a];
       if (t == error_mark_node)
        goto egress;
Index: gcc/ada/gcc-interface/Makefile.in
===================================================================
--- gcc/ada/gcc-interface/Makefile.in   (revision 148953)
+++ gcc/ada/gcc-interface/Makefile.in   (working copy)
@@ -2043,7 +2043,7 @@
 
 LIBGNAT=../$(RTSDIR)/libgnat.a
 
-GCC_LINK=$(CC) -static-libgcc $(ADA_INCLUDES)
+GCC_LINK=$(LINKER) -static-libgcc $(ADA_INCLUDES)
 
 # when compiling the tools, the runtime has to be first on the path so that
 # it hides the runtime files lying with the rest of the sources
@@ -2463,13 +2463,15 @@
 # because all that file does, when not compiling with GCC,
 # is include the system varargs.h.
 
-b_gnatl.c : $(GNATLINK_OBJS)
-       $(GNATBIND) -C $(ADA_INCLUDES) -o b_gnatl.c gnatlink.ali
-b_gnatl.o : b_gnatl.c
+b_gnatl.adb : $(GNATLINK_OBJS)
+       $(GNATBIND) -A $(ADA_INCLUDES) -o b_gnatl.adb gnatlink.ali
+b_gnatl.o : b_gnatl.adb
+       $(CC) -c $(CFLAGS) $(ADA_CFLAGS) $(ADA_INCLUDES) $< $(OUTPUT_OPTION)
 
-b_gnatm.c : $(GNATMAKE_OBJS)
-       $(GNATBIND) -C $(ADA_INCLUDES) -o b_gnatm.c gnatmake.ali
-b_gnatm.o : b_gnatm.c
+b_gnatm.adb : $(GNATMAKE_OBJS)
+       $(GNATBIND) -A $(ADA_INCLUDES) -o b_gnatm.adb gnatmake.ali
+b_gnatm.o : b_gnatm.adb
+       $(CC) -c $(CFLAGS) $(ADA_CFLAGS) $(ADA_INCLUDES) $< $(OUTPUT_OPTION)
 
 ADA_INCLUDE_DIR = $(libsubdir)/adainclude
 ADA_RTL_OBJ_DIR = $(libsubdir)/adalib
Index: gcc/ada/gcc-interface/decl.c
===================================================================
--- gcc/ada/gcc-interface/decl.c        (revision 148953)
+++ gcc/ada/gcc-interface/decl.c        (working copy)
@@ -7788,7 +7788,7 @@
 tree
 substitute_in_type (tree t, tree f, tree r)
 {
-  tree new;
+  tree new_tree;
 
   gcc_assert (CONTAINS_PLACEHOLDER_P (r));
 
@@ -7809,15 +7809,15 @@
          if (low == TYPE_GCC_MIN_VALUE (t) && high == TYPE_GCC_MAX_VALUE (t))
            return t;
 
-         new = copy_type (t);
-         TYPE_GCC_MIN_VALUE (new) = low;
-         TYPE_GCC_MAX_VALUE (new) = high;
+         new_tree = copy_type (t);
+         TYPE_GCC_MIN_VALUE (new_tree) = low;
+         TYPE_GCC_MAX_VALUE (new_tree) = high;
 
          if (TREE_CODE (t) == INTEGER_TYPE && TYPE_INDEX_TYPE (t))
            SET_TYPE_INDEX_TYPE
-             (new, substitute_in_type (TYPE_INDEX_TYPE (t), f, r));
+             (new_tree, substitute_in_type (TYPE_INDEX_TYPE (t), f, r));
 
-         return new;
+         return new_tree;
        }
 
       /* Then the subtypes.  */
@@ -7830,21 +7830,21 @@
          if (low == TYPE_RM_MIN_VALUE (t) && high == TYPE_RM_MAX_VALUE (t))
            return t;
 
-         new = copy_type (t);
-         SET_TYPE_RM_MIN_VALUE (new, low);
-         SET_TYPE_RM_MAX_VALUE (new, high);
+         new_tree = copy_type (t);
+         SET_TYPE_RM_MIN_VALUE (new_tree, low);
+         SET_TYPE_RM_MAX_VALUE (new_tree, high);
 
-         return new;
+         return new_tree;
        }
 
       return t;
 
     case COMPLEX_TYPE:
-      new = substitute_in_type (TREE_TYPE (t), f, r);
-      if (new == TREE_TYPE (t))
+      new_tree = substitute_in_type (TREE_TYPE (t), f, r);
+      if (new_tree == TREE_TYPE (t))
        return t;
 
-      return build_complex_type (new);
+      return build_complex_type (new_tree);
 
     case OFFSET_TYPE:
     case METHOD_TYPE:
@@ -7861,16 +7861,16 @@
        if (component == TREE_TYPE (t) && domain == TYPE_DOMAIN (t))
          return t;
 
-       new = build_array_type (component, domain);
-       TYPE_ALIGN (new) = TYPE_ALIGN (t);
-       TYPE_USER_ALIGN (new) = TYPE_USER_ALIGN (t);
-       SET_TYPE_MODE (new, TYPE_MODE (t));
-       TYPE_SIZE (new) = SUBSTITUTE_IN_EXPR (TYPE_SIZE (t), f, r);
-       TYPE_SIZE_UNIT (new) = SUBSTITUTE_IN_EXPR (TYPE_SIZE_UNIT (t), f, r);
-       TYPE_NONALIASED_COMPONENT (new) = TYPE_NONALIASED_COMPONENT (t);
-       TYPE_MULTI_ARRAY_P (new) = TYPE_MULTI_ARRAY_P (t);
-       TYPE_CONVENTION_FORTRAN_P (new) = TYPE_CONVENTION_FORTRAN_P (t);
-       return new;
+       new_tree = build_array_type (component, domain);
+       TYPE_ALIGN (new_tree) = TYPE_ALIGN (t);
+       TYPE_USER_ALIGN (new_tree) = TYPE_USER_ALIGN (t);
+       SET_TYPE_MODE (new_tree, TYPE_MODE (t));
+       TYPE_SIZE (new_tree) = SUBSTITUTE_IN_EXPR (TYPE_SIZE (t), f, r);
+       TYPE_SIZE_UNIT (new_tree) = SUBSTITUTE_IN_EXPR (TYPE_SIZE_UNIT (t), f, 
r);
+       TYPE_NONALIASED_COMPONENT (new_tree) = TYPE_NONALIASED_COMPONENT (t);
+       TYPE_MULTI_ARRAY_P (new_tree) = TYPE_MULTI_ARRAY_P (t);
+       TYPE_CONVENTION_FORTRAN_P (new_tree) = TYPE_CONVENTION_FORTRAN_P (t);
+       return new_tree;
       }
 
     case RECORD_TYPE:
@@ -7883,8 +7883,8 @@
        /* Start out with no fields, make new fields, and chain them
           in.  If we haven't actually changed the type of any field,
           discard everything we've done and return the old type.  */
-       new = copy_type (t);
-       TYPE_FIELDS (new) = NULL_TREE;
+       new_tree = copy_type (t);
+       TYPE_FIELDS (new_tree) = NULL_TREE;
 
        for (field = TYPE_FIELDS (t); field; field = TREE_CHAIN (field))
          {
@@ -7915,23 +7915,23 @@
                  }
              }
 
-           DECL_CONTEXT (new_field) = new;
+           DECL_CONTEXT (new_field) = new_tree;
            SET_DECL_ORIGINAL_FIELD (new_field,
                                     (DECL_ORIGINAL_FIELD (field)
                                      ? DECL_ORIGINAL_FIELD (field) : field));
 
-           TREE_CHAIN (new_field) = TYPE_FIELDS (new);
-           TYPE_FIELDS (new) = new_field;
+           TREE_CHAIN (new_field) = TYPE_FIELDS (new_tree);
+           TYPE_FIELDS (new_tree) = new_field;
          }
 
        if (!changed_field)
          return t;
 
-       TYPE_FIELDS (new) = nreverse (TYPE_FIELDS (new));
-       TYPE_SIZE (new) = SUBSTITUTE_IN_EXPR (TYPE_SIZE (t), f, r);
-       TYPE_SIZE_UNIT (new) = SUBSTITUTE_IN_EXPR (TYPE_SIZE_UNIT (t), f, r);
-       SET_TYPE_ADA_SIZE (new, SUBSTITUTE_IN_EXPR (TYPE_ADA_SIZE (t), f, r));
-       return new;
+       TYPE_FIELDS (new_tree) = nreverse (TYPE_FIELDS (new_tree));
+       TYPE_SIZE (new_tree) = SUBSTITUTE_IN_EXPR (TYPE_SIZE (t), f, r);
+       TYPE_SIZE_UNIT (new_tree) = SUBSTITUTE_IN_EXPR (TYPE_SIZE_UNIT (t), f, 
r);
+       SET_TYPE_ADA_SIZE (new_tree, SUBSTITUTE_IN_EXPR (TYPE_ADA_SIZE (t), f, 
r));
+       return new_tree;
       }
 
     default:
Index: gcc/ada/gcc-interface/Make-lang.in
===================================================================
--- gcc/ada/gcc-interface/Make-lang.in  (revision 148953)
+++ gcc/ada/gcc-interface/Make-lang.in  (working copy)
@@ -105,7 +105,7 @@
        "GNATLINK=../../gnatlink"       \
        "GNATBIND=../../gnatbind"
 
-GCC_LINK=$(CC) -static-libgcc $(LDFLAGS)
+GCC_LINK=$(LINKER) -static-libgcc $(LDFLAGS)
 
 # Lists of files for various purposes.
 
@@ -927,13 +927,19 @@
 ada_extra_files : ada/treeprs.ads ada/einfo.h ada/sinfo.h ada/nmake.adb \
        ada/nmake.ads ada/snames.ads ada/snames.adb ada/snames.h
 
-ada/b_gnat1.c : $(GNAT1_ADA_OBJS)
-       $(GNATBIND) -C $(ADA_INCLUDES) -o ada/b_gnat1.c -n ada/gnat1drv.ali
-ada/b_gnat1.o : ada/b_gnat1.c
+ada/b_gnat1.adb : $(GNAT1_ADA_OBJS)
+       $(GNATBIND) -A $(ADA_INCLUDES) -o b_gnat1.adb -n ada/gnat1drv.ali
+       $(MV) -f b_gnat1.adb ada/
+       $(MV) -f b_gnat1.ads ada/
+ada/b_gnat1.o : ada/b_gnat1.adb
+       $(CC) -c $(CFLAGS) $(ADA_CFLAGS) $(ADA_INCLUDES) $< $(OUTPUT_OPTION)
 
-ada/b_gnatb.c : $(GNATBIND_OBJS) ada/gnatbind.o ada/interfac.o
-       $(GNATBIND) -C $(ADA_INCLUDES) -o ada/b_gnatb.c ada/gnatbind.ali
-ada/b_gnatb.o : ada/b_gnatb.c
+ada/b_gnatb.adb : $(GNATBIND_OBJS) ada/gnatbind.o ada/interfac.o
+       $(GNATBIND) -A $(ADA_INCLUDES) -o b_gnatb.adb ada/gnatbind.ali
+       $(MV) -f b_gnatb.adb ada/
+       $(MV) -f b_gnatb.ads ada/
+ada/b_gnatb.o : ada/b_gnatb.adb
+       $(CC) -c $(CFLAGS) $(ADA_CFLAGS) $(ADA_INCLUDES) $< $(OUTPUT_OPTION)
 
 # We delete the files before copying, below, in case they are read-only.
 ada/treeprs.ads : ada/treeprs.adt ada/sinfo.ads ada/xtreeprs.adb
Index: gcc/ada/gcc-interface/gigi.h
===================================================================
--- gcc/ada/gcc-interface/gigi.h        (revision 148953)
+++ gcc/ada/gcc-interface/gigi.h        (working copy)
@@ -175,6 +175,10 @@
   Nat Num_Source_Lines;
 };
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* This is the main program of the back-end.  It sets up all the table
    structures and then generates code.
 
@@ -195,6 +199,11 @@
                   Entity_Id standard_exception_type,
                   Int gigi_operating_mode);
 
+
+#ifdef __cplusplus
+}
+#endif
+
 /* GNAT_NODE is the root of some GNAT tree.  Return the root of the
    GCC tree corresponding to that GNAT tree.  Normally, no code is generated;
    we just return an equivalent tree which is used elsewhere to generate
@@ -915,6 +924,11 @@
 /* These functions return the basic data type sizes and related parameters
    about the target machine.  */
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 extern Pos get_target_bits_per_unit (void);
 extern Pos get_target_bits_per_word (void);
 extern Pos get_target_char_size (void);
@@ -939,6 +953,10 @@
 extern Nat get_target_double_float_alignment (void);
 extern Nat get_target_double_scalar_alignment (void);
 
+#ifdef __cplusplus
+}
+#endif
+
 /* Let code know whether we are targetting VMS without need of
    intrusive preprocessor directives.  */
 #ifndef TARGET_ABI_OPEN_VMS
Index: gcc/ada/gcc-interface/trans.c
===================================================================
--- gcc/ada/gcc-interface/trans.c       (revision 148953)
+++ gcc/ada/gcc-interface/trans.c       (working copy)
@@ -75,8 +75,17 @@
 #endif
 #endif
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 extern char *__gnat_to_canonical_file_spec (char *);
 
+#ifdef __cplusplus
+}
+#endif
+
 int max_gnat_nodes;
 int number_names;
 int number_files;
@@ -100,7 +109,7 @@
 /* When not optimizing, we cache the 'First, 'Last and 'Length attributes
    of unconstrained array IN parameters to avoid emitting a great deal of
    redundant instructions to recompute them each time.  */
-struct GTY (()) parm_attr {
+struct GTY (()) parm_attr_d {
   int id; /* GTY doesn't like Entity_Id.  */
   int dim;
   tree first;
@@ -108,7 +117,7 @@
   tree length;
 };
 
-typedef struct parm_attr *parm_attr;
+typedef struct parm_attr_d *parm_attr;
 
 DEF_VEC_P(parm_attr);
 DEF_VEC_ALLOC_P(parm_attr,gc);
@@ -1464,7 +1473,7 @@
        int Dimension = (Present (Expressions (gnat_node))
                         ? UI_To_Int (Intval (First (Expressions (gnat_node))))
                         : 1), i;
-       struct parm_attr *pa = NULL;
+       struct parm_attr_d *pa = NULL;
        Entity_Id gnat_param = Empty;
 
        /* Make sure any implicit dereference gets done.  */
@@ -1508,7 +1517,7 @@
 
            if (!pa)
              {
-               pa = GGC_CNEW (struct parm_attr);
+               pa = GGC_CNEW (struct parm_attr_d);
                pa->id = gnat_param;
                pa->dim = Dimension;
                VEC_safe_push (parm_attr, gc, f_parm_attr_cache, pa);
@@ -2273,7 +2282,7 @@
   cache = DECL_STRUCT_FUNCTION (gnu_subprog_decl)->language->parm_attr_cache;
   if (cache)
     {
-      struct parm_attr *pa;
+      struct parm_attr_d *pa;
       int i;
 
       start_stmt_group ();
Index: gcc/ada/gcc-interface/misc.c
===================================================================
--- gcc/ada/gcc-interface/misc.c        (revision 148953)
+++ gcc/ada/gcc-interface/misc.c        (working copy)
@@ -150,12 +150,23 @@
 extern int gnat_argc;
 extern char **gnat_argv;
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* Declare functions we use as part of startup.  */
 extern void __gnat_initialize           (void *);
 extern void __gnat_install_SEH_handler  (void *);
 extern void adainit                    (void);
 extern void _ada_gnat1drv              (void);
 
+
+#ifdef __cplusplus
+}
+#endif
+
+
 /* The parser for the language.  For us, we process the GNAT tree.  */
 
 static void
@@ -729,10 +740,11 @@
 void
 enumerate_modes (void (*f) (int, int, int, int, int, int, unsigned int))
 {
-  enum machine_mode i;
+  int iloop;
 
-  for (i = 0; i < NUM_MACHINE_MODES; i++)
+  for (iloop = 0; iloop < NUM_MACHINE_MODES; iloop++)
     {
+      enum machine_mode i = (enum machine_mode) iloop;
       enum machine_mode j;
       bool float_p = 0;
       bool complex_p = 0;
Index: gcc/ada/argv.c
===================================================================
--- gcc/ada/argv.c      (revision 148953)
+++ gcc/ada/argv.c      (working copy)
@@ -42,6 +42,11 @@
    main program, and these routines are accessed from the
    Ada.Command_Line.Environment package. */
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #ifdef IN_RTS
 #include "tconfig.h"
 #include "tsystem.h"
@@ -116,3 +121,7 @@
   if (gnat_envp != NULL)
     strncpy (a, gnat_envp[i], strlen (gnat_envp[i]));
 }
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/atree.h
===================================================================
--- gcc/ada/atree.h     (revision 148953)
+++ gcc/ada/atree.h     (working copy)
@@ -31,6 +31,11 @@
    Note that only routines for reading the tree are included, since the tree
    transformer is not supposed to modify the tree in any way. */
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* Structure used for the first part of the node in the case where we have
    an Nkind.  */
 
@@ -760,3 +765,8 @@
 #define Flag245(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw5.flag245)
 #define Flag246(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw5.flag246)
 #define Flag247(N)     (Nodes_Ptr[(N) - First_Node_Id + 4].V.EX.U.fw5.flag247)
+
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/expect.c
===================================================================
--- gcc/ada/expect.c    (revision 148953)
+++ gcc/ada/expect.c    (working copy)
@@ -30,6 +30,11 @@
  *                                                                          *
  ****************************************************************************/
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #ifdef __alpha_vxworks
 #include "vxWorks.h"
 #endif
@@ -557,3 +562,8 @@
   return -1;
 }
 #endif
+
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/seh_init.c
===================================================================
--- gcc/ada/seh_init.c  (revision 148953)
+++ gcc/ada/seh_init.c  (working copy)
@@ -32,6 +32,11 @@
 /*  This unit contains support for SEH (Structured Exception Handling).
     Right now the only implementation is for Win32.  */
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #ifdef IN_RTS
 #include "tconfig.h"
 #include "tsystem.h"
@@ -230,3 +235,8 @@
 {
 }
 #endif
+
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/gmem.c
===================================================================
--- gcc/ada/gmem.c      (revision 148953)
+++ gcc/ada/gmem.c      (working copy)
@@ -49,6 +49,10 @@
 
 */
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #ifdef VMS
 #include <string.h>
 #define xstrdup32(S)  strcpy ((__char_ptr32) _malloc32 (strlen (S) + 1), S)
@@ -215,3 +219,7 @@
 
   __gnat_convert_addresses (addresses, 1, buf, length);
 }
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/adadecode.c
===================================================================
--- gcc/ada/adadecode.c (revision 148953)
+++ gcc/ada/adadecode.c (working copy)
@@ -29,6 +29,11 @@
  *                                                                          *
  ****************************************************************************/
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #ifdef IN_GCC
 #include "config.h"
 #include "system.h"
@@ -372,3 +377,7 @@
 
   *dest_index = '\0';
 }
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/ada/link.c
===================================================================
--- gcc/ada/link.c      (revision 148953)
+++ gcc/ada/link.c      (working copy)
@@ -33,6 +33,11 @@
 /*  of the linker. It is used by gnatlink as well as all tools that use     */
 /*  Mlib.                                                                   */
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #include <string.h>
 
 /*  objlist_file_supported is set to 1 when the system linker allows        */
@@ -206,3 +211,8 @@
 const char *__gnat_object_library_extension = ".a";
 unsigned char __gnat_separate_run_path_options = 0;
 #endif
+
+
+#ifdef __cplusplus
+}
+#endif
Index: gcc/prefix.h
===================================================================
--- gcc/prefix.h        (revision 148953)
+++ gcc/prefix.h        (working copy)
@@ -21,10 +21,22 @@
 #ifndef GCC_PREFIX_H
 #define GCC_PREFIX_H
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* These functions are called by the Ada frontend with C convention. */
+
 /* Update PATH using KEY if PATH starts with PREFIX.  The returned
    string is always malloc-ed, and the caller is responsible for
    freeing it.  */
 extern char *update_path (const char *path, const char *key);
 extern void set_std_prefix (const char *, int);
 
+
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* ! GCC_PREFIX_H */
Index: gnattools/Makefile.in
===================================================================
--- gnattools/Makefile.in       (revision 148953)
+++ gnattools/Makefile.in       (working copy)
@@ -67,6 +67,7 @@
 # Variables for gnattools1, native
 TOOLS_FLAGS_TO_PASS_1= \
        "CC=../../xgcc -B../../" \
+       "LINKER=$(CXX)" \
        "CFLAGS=$(CFLAGS) $(WARN_CFLAGS)" \
        "LDFLAGS=$(LDFLAGS)" \
        "ADAFLAGS=$(ADAFLAGS)" \
@@ -82,6 +83,7 @@
 # Variables for regnattools
 TOOLS_FLAGS_TO_PASS_1re= \
        "CC=../../xgcc -B../../" \
+       "LINKER=$(CXX)" \
        "CFLAGS=$(CFLAGS)" \
        "ADAFLAGS=$(ADAFLAGS)" \
        "ADA_CFLAGS=$(ADA_CFLAGS)" \
@@ -99,6 +101,7 @@
 # Variables for gnattools2, native
 TOOLS_FLAGS_TO_PASS_NATIVE= \
        "CC=../../xgcc -B../../" \
+       "LINKER=$(CXX)" \
        "CFLAGS=$(CFLAGS)" \
        "ADAFLAGS=$(ADAFLAGS)" \
        "ADA_CFLAGS=$(ADA_CFLAGS)" \
@@ -115,6 +118,7 @@
 # Variables for gnattools, cross
 TOOLS_FLAGS_TO_PASS_CROSS= \
        "CC=$(CC)" \
+       "LINKER=$(CXX)" \
        "CFLAGS=$(CFLAGS) $(WARN_CFLAGS)" \
        "LDFLAGS=$(LDFLAGS)" \
        "ADAFLAGS=$(ADAFLAGS)"  \

Reply via email to