On Thu, May 25, 2017 at 04:11:19PM +0200, Jakub Jelinek wrote: > On Thu, May 25, 2017 at 03:02:42PM +0100, Jonathan Wakely wrote: > > On 25/05/17 11:07 +0100, Jonathan Wakely wrote: > > > On 25/05/17 10:05 +0200, Andreas Schwab wrote: > > > > ../../gcc/ada/gcc-interface/utils2.c: In function 'int > > > > compare_elmt_bitpos(const void*, const void*)': > > > > ../../gcc/ada/gcc-interface/utils2.c:1937:73: error: type qualifiers > > > > ignored on cast result type [-Werror=ignored-qualifiers] > > > > const constructor_elt * const elmt1 = (const constructor_elt * const) > > > > rt1; > > > > > > > > ^~~ > > > > ../../gcc/ada/gcc-interface/utils2.c:1938:73: error: type qualifiers > > > > ignored on cast result type [-Werror=ignored-qualifiers] > > > > const constructor_elt * const elmt2 = (const constructor_elt * const) > > > > rt2; > > > > > > I'm testing this obvious fix. > > > > Committed as r248458 because it gets bootstrap past the error above, > > although now Ada fails for me with: > > > > /home/jwakely/src/gcc/bootstrap/./gcc/xgcc > > -B/home/jwakely/src/gcc/bootstrap/./gcc/ > > -B/usr/local/x86_64-pc-linux-gnu/bin/ -B/usr/local/x86_64-pc-linux-gnu/lib/ > > -isystem /usr/local/x86_64-pc-linux-gnu/include -isystem > > /usr/local/x86_64-pc-linux-gnu/sys-include -c -g -O2 -m32 -fpic -W > > -Wall -gnatpg -nostdinc -m32 s-regpat.adb -o s-regpat.o > > > > raised STORAGE_ERROR : stack overflow or erroneous memory access > > ../gcc-interface/Makefile:296: recipe for target 's-regpat.o' failed > > > > > > > diff --git a/gcc/ada/gcc-interface/utils2.c > > > b/gcc/ada/gcc-interface/utils2.c > > > index fc6f1b8..cd37791 100644 > > > --- a/gcc/ada/gcc-interface/utils2.c > > > +++ b/gcc/ada/gcc-interface/utils2.c > > > @@ -1934,8 +1934,8 @@ build_call_raise_range (int msg, Node_Id gnat_node, > > > char kind, > > > static int > > > compare_elmt_bitpos (const PTR rt1, const PTR rt2) > > > { > > > - const constructor_elt * const elmt1 = (const constructor_elt * const) > > > rt1; > > > - const constructor_elt * const elmt2 = (const constructor_elt * const) > > > rt2; > > > + const constructor_elt * const elmt1 = (const constructor_elt *) rt1; > > > + const constructor_elt * const elmt2 = (const constructor_elt *) rt2; > > > const_tree const field1 = elmt1->index; > > > const_tree const field2 = elmt2->index; > > > const int ret > > So, what can one do with typeof or similar to avoid the warning? > > void > foo (const void *p) > { > const int *const q = (const int *const) p; > typeof (q) r = (typeof (q)) p; > (void) q; > (void) r; > } > > AFAIK typeof doesn't strip the toplevel qualifiers and I see current trunk > warns even about the cast in r initialization. Similarly to what has been > noted recently in another (C) PR, it would be nice if we had toplevel cv > stripping variant of typeof or some special builtin that could wrap > typeof or some type and could be used in places where typeof can, > __strip_cv (typeof (q)) = (__strip_cv (typeof (q))) p; > or > typeof (q) = (__strip_cv (typeof (q))) p; > or > __strip_cv (const int *const) z; > where the last one would be effectively > const int *z;
I remember trying to implement the stripping version of __typeof; I even had a prototype patch that I'm of course not finding right now, but I'd be happy to work on this again. Ok, I at least found the PR: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65455 and https://gcc.gnu.org/bugzilla/show_bug.cgi?id=39985 Also there's https://gcc.gnu.org/ml/gcc-patches/2016-02/msg00268.html Let me know if I should get back to it. Marek