From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23840 invoked by alias); 21 Dec 2012 12:18:55 -0000 Received: (qmail 23824 invoked by uid 22791); 21 Dec 2012 12:18:50 -0000 X-SWARE-Spam-Status: No, hits=-2.9 required=5.0 tests=AWL,BAYES_00,KHOP_THREADED,TW_JL,TW_RG X-Spam-Check-By: sourceware.org Received: from mel.act-europe.fr (HELO mel.act-europe.fr) (194.98.77.210) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 21 Dec 2012 12:18:43 +0000 Received: from localhost (localhost [127.0.0.1]) by filtered-smtp.eu.adacore.com (Postfix) with ESMTP id D24F8290049; Fri, 21 Dec 2012 13:18:48 +0100 (CET) Received: from mel.act-europe.fr ([127.0.0.1]) by localhost (smtp.eu.adacore.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ykm0IV-7F89d; Fri, 21 Dec 2012 13:18:48 +0100 (CET) Received: from polaris.localnet (bon31-6-88-161-99-133.fbx.proxad.net [88.161.99.133]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mel.act-europe.fr (Postfix) with ESMTP id 8BF40290001; Fri, 21 Dec 2012 13:18:48 +0100 (CET) From: Eric Botcazou To: Richard Biener Cc: gcc-patches@gcc.gnu.org, laurent@guerby.net Subject: Re: [PATCH] Include gmp.h from system.h to fix PR54659 Date: Fri, 21 Dec 2012 12:18:00 -0000 Message-ID: <1566647.uGP6oVgNTF@polaris> User-Agent: KMail/4.7.2 (Linux/3.1.10-1.16-desktop; KDE/4.7.2; x86_64; ; ) In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="nextPart1411063.3iOn3Gqcfn" Content-Transfer-Encoding: 7Bit Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2012-12/txt/msg01309.txt.bz2 --nextPart1411063.3iOn3Gqcfn Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Content-length: 627 > This runs into issues with Ada which basically does (ugh) > > #ifdef __cplusplus > extern "C" { > #endif > > #include "system.h" > > #endif __cplusplus > } > #endif > > which of course wrecks any system header doing __cplusplus > conditional stuff (such as gmp.h including iosfwd). The patch > un-kludges this by wrapping system.h inside extern "C++" when > compiling with the C++ frontend. > > But - really - Ada people - can you fix that on your side please? > (CCed people doing r176210) Like so? I cannot believe that all this fuss was about moving 3 lines within less than a dozen of files... -- Eric Botcazou --nextPart1411063.3iOn3Gqcfn Content-Disposition: attachment; filename="terribly_difficult_ada_patch.diff" Content-Transfer-Encoding: 7Bit Content-Type: text/x-patch; charset="utf-8"; name="terribly_difficult_ada_patch.diff" Content-length: 7252 Index: targext.c =================================================================== --- targext.c (revision 194632) +++ targext.c (working copy) @@ -35,10 +35,6 @@ Note that, in order to have access to the TARGET_* macros used below, the file must be compiled with IN_GCC defined, even for the library. */ -#ifdef __cplusplus -extern "C" { -#endif - #ifdef IN_RTS #include "tconfig.h" #include "tsystem.h" @@ -57,6 +53,10 @@ extern "C" { #define TARGET_EXECUTABLE_SUFFIX "" #endif +#ifdef __cplusplus +extern "C" { +#endif + 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; Index: raise.c =================================================================== --- raise.c (revision 194632) +++ raise.c (working copy) @@ -32,10 +32,6 @@ /* Shared routines to support exception handling. __gnat_unhandled_terminate is shared between all exception handling mechanisms. */ -#ifdef __cplusplus -extern "C" { -#endif - #ifdef IN_RTS #include "tconfig.h" #include "tsystem.h" @@ -47,6 +43,10 @@ extern "C" { #include "adaint.h" #include "raise.h" +#ifdef __cplusplus +extern "C" { +#endif + /* Wrapper to builtin_longjmp. This is for the compiler eh only, as the sjlj runtime library interfaces directly to the intrinsic. We can't yet do this for the compiler itself, because this capability relies on changes Index: argv.c =================================================================== --- argv.c (revision 194632) +++ argv.c (working copy) @@ -42,10 +42,6 @@ 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" @@ -57,6 +53,10 @@ extern "C" { #include "adaint.h" +#ifdef __cplusplus +extern "C" { +#endif + /* argc and argv of the main program are saved under gnat_argc and gnat_argv, envp of the main program is saved under gnat_envp. */ Index: seh_init.c =================================================================== --- seh_init.c (revision 194632) +++ seh_init.c (working copy) @@ -32,10 +32,6 @@ /* 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" @@ -50,6 +46,10 @@ extern "C" { #include "raise.h" +#ifdef __cplusplus +extern "C" { +#endif + /* Addresses of exception data blocks for predefined exceptions. */ extern struct Exception_Data constraint_error; extern struct Exception_Data numeric_error; Index: env.c =================================================================== --- env.c (revision 194632) +++ env.c (working copy) @@ -29,10 +29,6 @@ * * ****************************************************************************/ -#ifdef __cplusplus -extern "C" { -#endif - #ifdef IN_RTS #include "tconfig.h" #include "tsystem.h" @@ -76,6 +72,10 @@ extern "C" { #include "system.h" #endif /* IN_RTS */ +#ifdef __cplusplus +extern "C" { +#endif + #if defined (__APPLE__) #include #endif Index: init.c =================================================================== --- init.c (revision 194632) +++ init.c (working copy) @@ -38,10 +38,6 @@ 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. */ @@ -71,6 +67,10 @@ extern "C" { #include "adaint.h" #include "raise.h" +#ifdef __cplusplus +extern "C" { +#endif + extern void __gnat_raise_program_error (const char *, int); /* Addresses of exception data blocks for predefined exceptions. Tasking_Error Index: initialize.c =================================================================== --- initialize.c (revision 194632) +++ initialize.c (working copy) @@ -34,10 +34,6 @@ 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 @@ -57,6 +53,10 @@ extern "C" { #include "raise.h" +#ifdef __cplusplus +extern "C" { +#endif + /******************************************/ /* __gnat_initialize (NT-mingw32 Version) */ /******************************************/ Index: exit.c =================================================================== --- exit.c (revision 194632) +++ exit.c (working copy) @@ -29,10 +29,6 @@ * * ****************************************************************************/ -#ifdef __cplusplus -extern "C" { -#endif - #ifdef __alpha_vxworks #include "vxWorks.h" #endif @@ -48,6 +44,10 @@ extern "C" { #include "adaint.h" +#ifdef __cplusplus +extern "C" { +#endif + /* Routine used by Ada.Command_Line.Set_Exit_Status. */ int gnat_exit_status = 0; Index: adaint.c =================================================================== --- adaint.c (revision 194632) +++ adaint.c (working copy) @@ -34,10 +34,6 @@ 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. */ @@ -107,6 +103,10 @@ extern "C" { #include "version.h" #endif +#ifdef __cplusplus +extern "C" { +#endif + #if defined (__MINGW32__) #if defined (RTX) Index: cio.c =================================================================== --- cio.c (revision 194632) +++ cio.c (working copy) @@ -29,10 +29,6 @@ * * ****************************************************************************/ -#ifdef __cplusplus -extern "C" { -#endif - #ifdef IN_RTS #include "tconfig.h" #include "tsystem.h" @@ -44,6 +40,10 @@ extern "C" { #include "adaint.h" +#ifdef __cplusplus +extern "C" { +#endif + /* Don't use macros on GNU/Linux since they cause incompatible changes between glibc 2.0 and 2.1 */ #ifdef linux Index: cstreams.c =================================================================== --- cstreams.c (revision 194632) +++ cstreams.c (working copy) @@ -31,10 +31,6 @@ /* Routines required for implementing routines in Interfaces.C.Streams. */ -#ifdef __cplusplus -extern "C" { -#endif - #ifdef __vxworks #include "vxWorks.h" #endif @@ -50,6 +46,10 @@ extern "C" { #include "adaint.h" +#ifdef __cplusplus +extern "C" { +#endif + #ifdef VMS #include #endif --nextPart1411063.3iOn3Gqcfn--