On 03/01/2018 03:29 PM, Daniel P. Berrangé wrote:
On Thu, Mar 01, 2018 at 03:12:39PM +0100, Michal Privoznik wrote:
> On 03/01/2018 02:15 PM, Peter Krempa wrote:
>> On Thu, Mar 01, 2018 at 14:08:29 +0100, Michal Privoznik wrote:
>>> Signed-off-by: --help <mprivozn(a)redhat.com>
>>
>> Hmm.
>>
>>> ---
>>> docs/news.xml | 102
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>>> 1 file changed, 102 insertions(+)
>>>
>>> + <change>
>>> + <summary>
>>> + src: Enable building with GCC 8.0
>>> + </summary>
>>> + <description>
>>> + GCC 8.0 added more warnings which found some genuine problems with
our code.
>>> + </description>
>>
>> I'm not sure whether that improved anything. Also wasn't that gcc 7?
>
> It added a lot of cases into our switches which are now safer. The
> problem with enums in switch() statements is we have to be 100% sure
> value fits into the enum. For instance:
>
> int x = VIR_DOMAIN_DEVICE_LAST + 1;
>
> switch ((virDomainDeviceType) x) {
> ...
> }
>
> is obviously problematic.
> And no, it's gcc 8.
Well yes & no. GCC complained about cases where we fell-through case:
statements, due to us not including enough cases. This caused me to
notice the more general problem with us not handling enum values which
didn't correspond to named constants.
So the general addition of case/default everywhere was not specifically
required by gcc 8. It is just something I chose todo to make us more
robust after realizing the implications of what gcc8 identified. The
warning flags we use to validate this have existed in ancient gcc versions.
Looks like Peter has opinion on this too. So should I leave this item
out or reword it?
Michal