On 07/03/2018 07:32 PM, Jakub Jelinek wrote: > On Tue, Jul 03, 2018 at 07:22:19PM +0200, Martin Liška wrote: >> In order to make GCC 4.1 happy and build current tip, we need to define >> static constants out of a class definition. >> >> Ready for trunk? >> Thanks, >> Martin >> >> gcc/ChangeLog: >> >> 2018-07-03 Martin Liska <mli...@suse.cz> >> >> * tree-switch-conversion.h (struct jump_table_cluster): Define >> constant values outside of class declaration. > > That looks incorrect. I don't see why 4.1 wouldn't allow the const static > data members initializers inside of the class. > > You just need to define those vars, and the definition (without the > initializers) shouldn't go into the header, but to a single .c file instead > (I know right now there is just one .c file that includes this header, but > if we ever want to include it in more than one, it would be a problem; > if we never want to include in more than one, the question is why we have > the header file at all). > > So IMHO keep tree-switch-conversion.h unmodified and add: > > const unsigned HOST_WIDE_INT jump_table_cluster::max_ratio_for_size; > const unsigned HOST_WIDE_INT jump_table_cluster::max_ratio_for_speed; > > to tree-switch-conversion.c somewhere.
Hi. Thanks Jakub, works for me both on x86_64 with a recent compiler and ia64 with GCC 4.1. I'm going to install that. Martin > >> diff --git a/gcc/tree-switch-conversion.h b/gcc/tree-switch-conversion.h >> index 4beac785f05..8efb125aff1 100644 >> --- a/gcc/tree-switch-conversion.h >> +++ b/gcc/tree-switch-conversion.h >> @@ -259,12 +259,17 @@ struct jump_table_cluster: public group_cluster >> static bool is_enabled (void); >> >> /* Max growth ratio for code that is optimized for size. */ >> - static const unsigned HOST_WIDE_INT max_ratio_for_size = 3; >> + static const unsigned HOST_WIDE_INT max_ratio_for_size; >> >> /* Max growth ratio for code that is optimized for speed. */ >> - static const unsigned HOST_WIDE_INT max_ratio_for_speed = 8; >> + static const unsigned HOST_WIDE_INT max_ratio_for_speed; >> }; >> >> +const unsigned HOST_WIDE_INT jump_table_cluster::max_ratio_for_size = 3; >> + >> +const unsigned HOST_WIDE_INT jump_table_cluster::max_ratio_for_speed = 8; >> + >> + >> /* A GIMPLE switch statement can be expanded to a short sequence of bit-wise >> comparisons. "switch(x)" is converted into "if ((1 << (x-MINVAL)) & CST)" >> where CST and MINVAL are integer constants. This is better than a series >> > > > Jakub >