On Tru64 UNIX, I ran into two problems with C++ bootstrap: * gcc.c doesn't compile:
In file included from /vol/gcc/src/hg/trunk/local/gcc/../include/xregex.h:26:0, from /vol/gcc/src/hg/trunk/local/gcc/gcc.c:38: /vol/gcc/src/hg/trunk/local/gcc/../include/xregex2.h:402:13: error: conflicting declaration 'typedef int regoff_t' /usr/include/reg_types.h:49:15: error: 'regoff_t' has a previous declaration as 'typedef off_t regoff_t' make[3]: *** [gcc.o] Error 1 include/xregex2.h has /* Type for byte offsets within the string. POSIX mandates this. */ typedef int regoff_t; while <reg_types.h> has typedef off_t regoff_t; with <sys/types.h>: typedef long off_t; /* file offset */ While this would conflict with C, too, I only find the xregex2.h typedef in C -save-temps output. C++ is different, though: <sys/lc_core.h> has /* only include when using full prototypes to avoid extra */ /* name space cruft in default case */ #ifndef _NO_PROTO #include <nl_types.h> #include <va_list.h> #ifdef __cplusplus #include <reg_types.h> #endif #endif I'm thus special-casing osf in regex2.h. I had a look at upstream (gnulib) regex.h, but it is unchanged in this regard. * lto-wrapper failed to link (also on IRIX 6.5, both of which lack strsignal in libc): strsignal(int) collect2: error: ld returned 1 exit status make[3]: *** [lto-wrapper] Error 1 While the object file uses the mangled form _Z9strsignali | 0000000000000000 | U | 0000000000000000 lto-wrapper.o libiberty.a has it as a C function. The problem is that gcc/system.h isn't wrapped in extern "C". Doing so allows the link to succeed. The bootstraps are still running, ok for mainline if they succeed? Thanks. Rainer 2011-07-21 Rainer Orth <r...@cebitec.uni-bielefeld.de> gcc: * system.h [__cplusplus]: Wrap in extern "C". include: * xregex2.h [__osf__ && __cplusplus] (regoff_t): Alternative typedef. diff --git a/gcc/system.h b/gcc/system.h --- a/gcc/system.h +++ b/gcc/system.h @@ -24,6 +24,10 @@ along with GCC; see the file COPYING3. #ifndef GCC_SYSTEM_H #define GCC_SYSTEM_H +#ifdef __cplusplus +extern "C" { +#endif + /* We must include stdarg.h before stdio.h. */ #include <stdarg.h> @@ -969,4 +973,8 @@ helper_const_non_const_cast (const char #define DEBUG_VARIABLE #endif +#ifdef __cplusplus +} +#endif + #endif /* ! GCC_SYSTEM_H */ diff --git a/include/xregex2.h b/include/xregex2.h --- a/include/xregex2.h +++ b/include/xregex2.h @@ -399,7 +399,11 @@ struct re_pattern_buffer typedef struct re_pattern_buffer regex_t; /* Type for byte offsets within the string. POSIX mandates this. */ +#if defined(__osf__) && defined(__cplusplus) +typedef off_t regoff_t; +#else typedef int regoff_t; +#endif /* This is the structure we store register match data in. See -- ----------------------------------------------------------------------------- Rainer Orth, Center for Biotechnology, Bielefeld University