Ian,
> I agree with Joseph that this is wrong. We must never wrap the #include
> of a system header file with extern "C". That will simply break on some
> systems. You should only wrap extern "C" around the various HAVE_DECL
> declarations.
ok, the following patch does this. Bootstrap on alpha-dec-osf5.1b and
mips-sgi-irix6.5 is into stage3.
Ok for mainline if it passes?
Thanks.
Rainer
2011-07-21 Rainer Orth <[email protected]>
gcc:
* system.h [__cplusplus]: Wrap C function declarations in extern "C".
include:
* xregex.h (regoff_t): Define.
diff --git a/gcc/system.h b/gcc/system.h
--- a/gcc/system.h
+++ b/gcc/system.h
@@ -90,6 +90,10 @@ along with GCC; see the file COPYING3.
# define fputc(C, Stream) fputc_unlocked (C, Stream)
# endif
+#ifdef __cplusplus
+extern "C" {
+#endif
+
# ifdef HAVE_CLEARERR_UNLOCKED
# undef clearerr
# define clearerr(Stream) clearerr_unlocked (Stream)
@@ -170,6 +174,10 @@ extern int fprintf_unlocked (FILE *, con
# endif
# endif
+#ifdef __cplusplus
+}
+#endif
+
#endif
/* ??? Glibc's fwrite/fread_unlocked macros cause
@@ -390,6 +398,10 @@ extern int errno;
here. These checks will be in the undefined state while configure
is running so be careful to test "defined (HAVE_DECL_*)". */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#if defined (HAVE_DECL_ATOF) && !HAVE_DECL_ATOF
extern double atof (const char *);
#endif
@@ -430,10 +442,18 @@ extern void *sbrk (int);
extern char *strstr (const char *, const char *);
#endif
+#ifdef __cplusplus
+}
+#endif
+
#ifdef HAVE_MALLOC_H
#include <malloc.h>
#endif
+#ifdef __cplusplus
+extern "C" {
+#endif
+
#if defined (HAVE_DECL_MALLOC) && !HAVE_DECL_MALLOC
extern void *malloc (size_t);
#endif
@@ -446,6 +466,10 @@ extern void *calloc (size_t, size_t);
extern void *realloc (void *, size_t);
#endif
+#ifdef __cplusplus
+}
+#endif
+
#ifdef HAVE_STDINT_H
#include <stdint.h>
#endif
@@ -454,6 +478,10 @@ extern void *realloc (void *, size_t);
#include <inttypes.h>
#endif
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/* If the system doesn't provide strsignal, we get it defined in
libiberty but no declaration is supplied. */
#if !defined (HAVE_STRSIGNAL) \
@@ -493,6 +521,10 @@ extern int snprintf (char *, size_t, con
extern int vsnprintf(char *, size_t, const char *, va_list);
#endif
+#ifdef __cplusplus
+}
+#endif
+
/* 1 if we have C99 designated initializers. */
#if !defined(HAVE_DESIGNATED_INITIALIZERS)
#define HAVE_DESIGNATED_INITIALIZERS \
diff --git a/include/xregex.h b/include/xregex.h
--- a/include/xregex.h
+++ b/include/xregex.h
@@ -8,6 +8,7 @@
# define regexec xregexec
# define regcomp xregcomp
# define regerror xregerror
+# define regoff_t xregoff_t
# define re_set_registers xre_set_registers
# define re_match_2 xre_match_2
# define re_match xre_match
--
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University