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.

> 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

Reply via email to