http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44749
--- Comment #4 from Jorn Wolfgang Rennecke <amylaar at gcc dot gnu.org> 2010-11-03 12:15:16 UTC --- mep-elf still doesn't build when configured with --enable-werror-always. gcc -c -g -O2 -DIN_GCC -DCROSS_DIRECTORY_STRUCTURE -W -Wall -Wwrite-strings -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wmissing-format-attribute -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings -Werror -Wold-style-definition -Wc++-compat -fno-common -DHAVE_CONFIG_H -I. -I. -I../../gcc/gcc -I../../gcc/gcc/. -I../../gcc/gcc/../include -I../../gcc/gcc/../libcpp/include -I../../gcc/gcc/../libdecnumber -I../../gcc/gcc/../libdecnumber/dpd -I../libdecnumber -DCLOOG_PPL_BACKEND ../../gcc/gcc/combine.c -o combine.o ../../gcc/gcc/combine.c: In function ‘subst’: ../../gcc/gcc/combine.c:5056:12: error: enum conversion when passing argument 3 of ‘mep_cannot_change_mode_class’ is invalid in C++ [-Werror=c++-compat] ../../gcc/gcc/config/mep/mep-protos.h:104:13: note: expected ‘enum reg_class’ but argument is of type ‘int’ ../../gcc/gcc/combine.c: In function ‘simplify_set’: ../../gcc/gcc/combine.c:6372:9: error: enum conversion when passing argument 3 of ‘mep_cannot_change_mode_class’ is invalid in C++ [-Werror=c++-compat] ../../gcc/gcc/config/mep/mep-protos.h:104:13: note: expected ‘enum reg_class’ but argument is of type ‘int’ combine uses REG_CANNOT_CHANGE_MODE_P, which is defined in hard-reg-set.h: #define REG_CANNOT_CHANGE_MODE_P(REGN, FROM, TO) \ CANNOT_CHANGE_MODE_CLASS (FROM, TO, REGNO_REG_CLASS (REGN)) these macros are defined in mep.h like this: #define REGNO_REG_CLASS(REGNO) mep_regno_reg_class (REGNO) #define CANNOT_CHANGE_MODE_CLASS(FROM, TO, CLASS) \ mep_cannot_change_mode_class (FROM, TO, CLASS) Unfortunately, argument three of mep_cannot_change_mode_class doesn't accept (in C++) the result of mep_regno_reg_class: extern bool mep_cannot_change_mode_class (enum machine_mode, enum machine_mode, enum reg_class); extern int mep_regno_reg_class (int); it would be better if the two functions could agree on using reg_class_t . Of course, when fixing this, we later run into PR44765.