On 9 October 2018 at 12:59, Peter Maydell <peter.mayd...@linaro.org> wrote: > On 5 October 2018 at 17:09, Laurent Vivier <laur...@vivier.eu> wrote: >> Could it be a bug in _Pragma()? > > I got an f28 VM and can repro this. It looks like the problem > only happens when the get_user/put_user stuff is used via some > other macro, for some reason -- so the GET_ARG and SET_ARG > macros in arm-semi.c and the NEW_AUX_ENT macro in elfload.c > cause problems, but less indirect use does not. I'll try to > trim this down to a smaller test case somehow...
I think it is a bug in _Pragma(). I boiled it down to a small test case, and tested using the compilers on godbolt.org. The test fails with gcc 5, 6, 7 and 8 but works on 4 and on gcc trunk. Trying to use _Pragma() inside a macro to disable warnings seems to be pretty broken. The GCC bugzilla has: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85153 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69558 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82335 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66099 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55578 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69543 which are various bug reports in this area, with test cases which variously are fixed in gcc 8, or fixed not in 8 but in trunk, or still broken in trunk. So there isn't a single bug here but a cluster of similar ones. I think the underlying difficulty is that the compiler decides whether to suppress the warning by looking at the source location for the warning, and at the source locations of the various pragmas, and especially when macro expansion is involved the "source location" can be harder to correctly identify. I'm not sure if there is some "safe" subset of _Pragma()-in-macro use here that will work regardless of compiler version, or if we should just give up on it as non-feasible and try to silence the warnings some other way. Looks like clang is not flawless in this area either: https://bugs.llvm.org/show_bug.cgi?id=31999 https://bugs.llvm.org/show_bug.cgi?id=15129 https://bugs.llvm.org/show_bug.cgi?id=35154 thanks -- PMM