Skip to content

Commit

Permalink
linux-user: Move PRAGMA_DISABLE_PACKED_WARNING to compiler.h
Browse files Browse the repository at this point in the history
Replace the slightly older version of this in include/qemu/compiler.h
that was commit as part of bsd-user changes with the newer one from
linux-user. bsd-user has no regreassions with this.

Signed-off-by: Warner Losh <imp@bsdimp.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
  • Loading branch information
bsdimp committed Aug 30, 2023
1 parent 813bac3 commit de287fb
Show file tree
Hide file tree
Showing 2 changed files with 1 addition and 31 deletions.
6 changes: 1 addition & 5 deletions include/qemu/compiler.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,17 +31,13 @@
* functions than host-endian unaligned load/store plus tswapN.
* - The pragmas are necessary only to silence a clang false-positive
* warning: see https://bugs.llvm.org/show_bug.cgi?id=39113 .
* - We have to disable -Wpragmas warnings to avoid a complaint about
* an unknown warning type from older compilers that don't know about
* -Waddress-of-packed-member.
* - gcc has bugs in its _Pragma() support in some versions, eg
* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83256 -- so we only
* include the warning-suppression pragmas for clang
*/
#ifdef __clang__
#if defined(__clang__) && __has_warning("-Waddress-of-packed-member")
#define PRAGMA_DISABLE_PACKED_WARNING \
_Pragma("GCC diagnostic push"); \
_Pragma("GCC diagnostic ignored \"-Wpragmas\""); \
_Pragma("GCC diagnostic ignored \"-Waddress-of-packed-member\"")

#define PRAGMA_REENABLE_PACKED_WARNING \
Expand Down
26 changes: 0 additions & 26 deletions linux-user/qemu.h
Original file line number Diff line number Diff line change
Expand Up @@ -193,32 +193,6 @@ static inline bool access_ok(CPUState *cpu, int type,
These are usually used to access struct data members once the struct has
been locked - usually with lock_user_struct. */

/*
* Tricky points:
* - Use __builtin_choose_expr to avoid type promotion from ?:,
* - Invalid sizes result in a compile time error stemming from
* the fact that abort has no parameters.
* - It's easier to use the endian-specific unaligned load/store
* functions than host-endian unaligned load/store plus tswapN.
* - The pragmas are necessary only to silence a clang false-positive
* warning: see https://bugs.llvm.org/show_bug.cgi?id=39113 .
* - gcc has bugs in its _Pragma() support in some versions, eg
* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83256 -- so we only
* include the warning-suppression pragmas for clang
*/
#if defined(__clang__) && __has_warning("-Waddress-of-packed-member")
#define PRAGMA_DISABLE_PACKED_WARNING \
_Pragma("GCC diagnostic push"); \
_Pragma("GCC diagnostic ignored \"-Waddress-of-packed-member\"")

#define PRAGMA_REENABLE_PACKED_WARNING \
_Pragma("GCC diagnostic pop")

#else
#define PRAGMA_DISABLE_PACKED_WARNING
#define PRAGMA_REENABLE_PACKED_WARNING
#endif

#define __put_user_e(x, hptr, e) \
do { \
PRAGMA_DISABLE_PACKED_WARNING; \
Expand Down

0 comments on commit de287fb

Please sign in to comment.