On Sep 6, 2013, at 8:21 AM, Andrew MacLeod <amacl...@redhat.com> wrote: > these would be really good to identify and fix, if possible.
> Do you know of any of the top of your head? Sure, they are easy to find. See below. I'll note one more use of fixing these. clang is adding modules to get compilation speed. Modules require that the inclusion of a header be the same in every instance that it is used. The usages below would prevent these headers from participating in being a module (and transitive closure of all they include them), thus dooming the software to slow compiles. C++ features exponential compile time, where/as C features logarithmic compile time. modules return things back to being linear and are worthwhile to control compilation speed issues. To be competitive, I think gcc will have to add modules eventually as well, and as the gcc source base grows, making use of modules to keep compilation time down is also worthwhile. dfp.h: #ifdef TREE_CODE bool decimal_real_arithmetic (REAL_VALUE_TYPE *, enum tree_code, const REAL_VALUE_TYPE *, const REAL_VALUE_TYPE *); #endif double-int.h: #ifndef GENERATOR_FILE /* Conversion to and from GMP integer representations. */ void mpz_set_double_int (mpz_t, double_int, bool); double_int mpz_get_double_int (const_tree, mpz_t, bool); #endif expr.h: #ifdef TREE_CODE extern rtx expand_variable_shift (enum tree_code, enum machine_mode, rtx, tree, rtx, int); extern rtx expand_shift (enum tree_code, enum machine_mode, rtx, int, rtx, int); extern rtx expand_divmod (int, enum tree_code, enum machine_mode, rtx, rtx, rtx, int); #endif function.h: #ifdef RTX_CODE extern void diddle_return_value (void (*)(rtx, void*), void*); extern void clobber_return_register (void); #endif target.h: #ifdef GCC_TM_H #ifndef CUMULATIVE_ARGS_MAGIC #define CUMULATIVE_ARGS_MAGIC ((void *) &targetm.calls) #endif static inline CUMULATIVE_ARGS * get_cumulative_args (cumulative_args_t arg) { #ifdef ENABLE_CHECKING gcc_assert (arg.magic == CUMULATIVE_ARGS_MAGIC); #endif /* ENABLE_CHECKING */ return (CUMULATIVE_ARGS *) arg.p; }