From: Nick Desaulniers
Sent: 24 January 2020 17:20
...
quoted
quoted
Good thing it's the variable being modified was not declared const; I
get spooked when I see -Wdiscarded-qualifiers because of Section
6.7.3.6 of the ISO C11 draft spec:
If an attempt is made to modify an object defined with a const-qualified
type through use of an lvalue with non-const-qualified type,
the behavior is undefined.
Well some old systems had small integer constants at fixes addresses.
So 'const int one = 1;' would be a reference to the global constant.
An assignment like '*(int *)&one = 2;' would change the value of the
system-wide 'one' constant'.
Pretty much 'undefined'.
But no excuse for the compiler just discarding the code.
I suspect that the code to remove 'const' needs to 'launder' the value
through a suitable integer type.
David
-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)