This is the mail archive of the
mailing list for the GCC project.
Re: [PATCH] Fix bootstrap on ia64 with old GCC version.
- From: Martin Liška <mliska at suse dot cz>
- To: Jakub Jelinek <jakub at redhat dot com>
- Cc: gcc-patches at gcc dot gnu dot org, Michael Matz <matz at suse dot de>
- Date: Wed, 4 Jul 2018 09:52:33 +0200
- Subject: Re: [PATCH] Fix bootstrap on ia64 with old GCC version.
- References: <email@example.com> <20180703173249.GC7166@tucnak>
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?
>> 2018-07-03 Martin Liska <firstname.lastname@example.org>
>> * 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.
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.
>> 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