Hello. Following error message can be seen for LTO boostrap:
../../gcc/fortran/resolve.c:3812:1: error: type ‘comparison’ violates one definition rule [-Werror=odr] comparison; ^ ../../gcc/compare-elim.c:95:0: note: a different type is defined in another translation unit rtx_insn *insn; ^ lto1: all warnings being treated as errors lto-wrapper: fatal error: /home/marxin/Programming/gcc3/objdir/./prev-gcc/xg++ returned 1 exit status I've removed enum type in resolve.c, which is quite small change (I hope so). With patch applied, GCC can bootstrap. Ready for trunk? Thanks, Martin
>From 248d92eb9d9131d0643eb32bce273444bf1ac968 Mon Sep 17 00:00:00 2001 From: mliska <mli...@suse.cz> Date: Thu, 26 Feb 2015 13:23:38 +0100 Subject: [PATCH] Fix LTO bootstrap. gcc/fortran/ChangeLog: 2015-02-26 Martin Liska <mli...@suse.cz> * resolve.c: Rename enum 'comparison' to 'compare_result' as solution for -Wodr issue. --- gcc/fortran/resolve.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index b1111cc..675cb15 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -3809,11 +3809,11 @@ bad_op: typedef enum { CMP_LT, CMP_EQ, CMP_GT, CMP_UNKNOWN } -comparison; +compare_result; /* Compare two integer expressions. */ -static comparison +static compare_result compare_bound (gfc_expr *a, gfc_expr *b) { int i; @@ -3840,7 +3840,7 @@ compare_bound (gfc_expr *a, gfc_expr *b) /* Compare an integer expression with an integer. */ -static comparison +static compare_result compare_bound_int (gfc_expr *a, int b) { int i; @@ -3863,7 +3863,7 @@ compare_bound_int (gfc_expr *a, int b) /* Compare an integer expression with a mpz_t. */ -static comparison +static compare_result compare_bound_mpz_t (gfc_expr *a, mpz_t b) { int i; @@ -4002,7 +4002,7 @@ check_dimension (int i, gfc_array_ref *ar, gfc_array_spec *as) #define AR_START (ar->start[i] ? ar->start[i] : as->lower[i]) #define AR_END (ar->end[i] ? ar->end[i] : as->upper[i]) - comparison comp_start_end = compare_bound (AR_START, AR_END); + compare_result comp_start_end = compare_bound (AR_START, AR_END); /* Check for zero stride, which is not allowed. */ if (compare_bound_int (ar->stride[i], 0) == CMP_EQ) -- 2.1.2