I've committed the attached patch to fix build failure on SH during compiling tree-profile.c:
../trunk/gcc/tree-profile.c: In function 'unsigned int tree_profiling()': ../trunk/gcc/tree-profile.c:560:12: error: 'TARGET_ATOMIC_ANY' was not declared in this scope The target sets HAVE_atomic_compare_and_swapsi to TARGET_ATOMIC_ANY defined in sh-protos.h which can't be seen from tree-profile.c. The patch simply moves definitions for atomic models to sh.h from sh-protos.h and guard them with __cplusplus. Regards, kaz -- 2016-09-07 Kaz Kojima <kkoj...@gcc.gnu.org> * config/sh/sh-protos.h (struct sh_atomic_model, selected_atomic_model, TARGET_ATOMIC_ANY, TARGET_ATOMIC_STRICT, TARGET_ATOMIC_SOFT_GUSA, TARGET_ATOMIC_HARD_LLCS, TARGET_ATOMIC_SOFT_TCB, TARGET_ATOMIC_SOFT_IMASK): Move to... * config/sh/sh.h (struct sh_atomic_model, selected_atomic_model, TARGET_ATOMIC_ANY, TARGET_ATOMIC_STRICT, TARGET_ATOMIC_SOFT_GUSA, TARGET_ATOMIC_HARD_LLCS, TARGET_ATOMIC_SOFT_TCB, TARGET_ATOMIC_SOFT_IMASK): ...here. Guard with __cplusplus. diff --git a/config/sh/sh-protos.h b/config/sh/sh-protos.h index fecbb88..f611dab 100644 --- a/config/sh/sh-protos.h +++ b/config/sh/sh-protos.h @@ -35,59 +35,6 @@ enum sh_function_kind { SFUNC_STATIC }; -/* Atomic model. */ -struct sh_atomic_model -{ - enum enum_type - { - none = 0, - soft_gusa, - hard_llcs, - soft_tcb, - soft_imask, - - num_models - }; - - /* If strict is set, disallow mixing of different models, as it would - happen on SH4A. */ - bool strict; - enum_type type; - - /* Name string as it was specified on the command line. */ - const char* name; - - /* Name string as it is used in C/C++ defines. */ - const char* cdef_name; - - /* GBR offset variable for TCB model. */ - int tcb_gbr_offset; -}; - -extern const sh_atomic_model& selected_atomic_model (void); - -/* Shortcuts to check the currently selected atomic model. */ -#define TARGET_ATOMIC_ANY \ - (selected_atomic_model ().type != sh_atomic_model::none) - -#define TARGET_ATOMIC_STRICT \ - (selected_atomic_model ().strict) - -#define TARGET_ATOMIC_SOFT_GUSA \ - (selected_atomic_model ().type == sh_atomic_model::soft_gusa) - -#define TARGET_ATOMIC_HARD_LLCS \ - (selected_atomic_model ().type == sh_atomic_model::hard_llcs) - -#define TARGET_ATOMIC_SOFT_TCB \ - (selected_atomic_model ().type == sh_atomic_model::soft_tcb) - -#define TARGET_ATOMIC_SOFT_TCB_GBR_OFFSET_RTX \ - GEN_INT (selected_atomic_model ().tcb_gbr_offset) - -#define TARGET_ATOMIC_SOFT_IMASK \ - (selected_atomic_model ().type == sh_atomic_model::soft_imask) - #ifdef RTX_CODE extern rtx sh_fsca_sf2int (void); extern rtx sh_fsca_int2sf (void); diff --git a/config/sh/sh.h b/config/sh/sh.h index 0403616..25b6cee 100644 --- a/config/sh/sh.h +++ b/config/sh/sh.h @@ -333,6 +333,63 @@ extern enum sh_divide_strategy_e sh_div_strategy; #define SH_DIV_STRATEGY_DEFAULT SH_DIV_CALL_DIV1 #endif +#ifdef __cplusplus + +/* Atomic model. */ +struct sh_atomic_model +{ + enum enum_type + { + none = 0, + soft_gusa, + hard_llcs, + soft_tcb, + soft_imask, + + num_models + }; + + /* If strict is set, disallow mixing of different models, as it would + happen on SH4A. */ + bool strict; + enum_type type; + + /* Name string as it was specified on the command line. */ + const char* name; + + /* Name string as it is used in C/C++ defines. */ + const char* cdef_name; + + /* GBR offset variable for TCB model. */ + int tcb_gbr_offset; +}; + +extern const sh_atomic_model& selected_atomic_model (void); + +/* Shortcuts to check the currently selected atomic model. */ +#define TARGET_ATOMIC_ANY \ + (selected_atomic_model ().type != sh_atomic_model::none) + +#define TARGET_ATOMIC_STRICT \ + (selected_atomic_model ().strict) + +#define TARGET_ATOMIC_SOFT_GUSA \ + (selected_atomic_model ().type == sh_atomic_model::soft_gusa) + +#define TARGET_ATOMIC_HARD_LLCS \ + (selected_atomic_model ().type == sh_atomic_model::hard_llcs) + +#define TARGET_ATOMIC_SOFT_TCB \ + (selected_atomic_model ().type == sh_atomic_model::soft_tcb) + +#define TARGET_ATOMIC_SOFT_TCB_GBR_OFFSET_RTX \ + GEN_INT (selected_atomic_model ().tcb_gbr_offset) + +#define TARGET_ATOMIC_SOFT_IMASK \ + (selected_atomic_model ().type == sh_atomic_model::soft_imask) + +#endif // __cplusplus + #define SUBTARGET_OVERRIDE_OPTIONS (void) 0