g++-12 bits, mostly Qt5 related
I forced a test compile to -std=c++20 mostly to see what we would
be up against. There was only a small number of things and they
are corrected in this commit.
c++20 has some issues with comparisons and bit twiddling between
different enums.
The vendor-supplied Qt5 header files triggered some of those issues as
well, so the qt_pre.h and qt_post.h NetHack header files were adjusted
to make those new warnings go away. I have not tested Qt6 under the
new compiler and c++ version yet.
Because there are multiple pragmas in qt_pre.h now, the conditional
ifdef structure in there was modified a little to make maintenance
simpler and have a single pragma push at the top. The pragma pop
comes after the Qt vendor-supplied header files, and is done
in qt_post.h.
The display.h macro cmap_to_glyph() was used in
a Qt c++ file and triggered a series of warnings because of that.
Rather than write c++20-friendly versions of those macros, the
simple fix is to provide a function on the C side of things
to front the cmap_to_glyph() macro, so fn_cmap_to_glyph()
was added.
Also thrown into this commit, PatR picked up on the fact that for
yesterday's new warning in qt_menu.cpp, the compiler had correctly
picked up on the fact that the format range of the variable 'cash'
had been correctly upper-capped at 999999999L in the warning message
because of an assignment prior. He suggested that perhaps by also adding
if (cash < 0)
cash = 0;
the warning might be eliminated altogether.
After a test, that was proven to be correct, so yesterday's
more-kludgy change is reverted and replaced with that variable
variable restriction ahead of the snprintf().
This commit is contained in:
+33
-4
@@ -17,14 +17,22 @@
|
||||
#undef min
|
||||
#undef max
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
#ifdef __clang__
|
||||
#pragma clang diagnostic push
|
||||
#endif
|
||||
#ifdef __GNUC__
|
||||
#pragma GCC diagnostic push
|
||||
#endif
|
||||
/* the diagnostic pop is in qt_post.h */
|
||||
|
||||
#ifdef __clang__
|
||||
/* disable warnings for shadowed names; some of the Qt prototypes use
|
||||
placeholder argument names which conflict with nethack variables
|
||||
('g', 'u', a couple of others) */
|
||||
#ifdef __clang__
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wshadow"
|
||||
#elif defined(__GNUC__) && defined(__cplusplus)
|
||||
#pragma GCC diagnostic push
|
||||
#elif defined(__GNUC__)
|
||||
#pragma GCC diagnostic ignored "-Wshadow"
|
||||
#endif
|
||||
|
||||
@@ -37,5 +45,26 @@
|
||||
#define QFM_WIDTH(foo) horizontalAdvance(foo)
|
||||
#endif
|
||||
|
||||
#if __cplusplus >= 202002L
|
||||
/* c++20 or newer */
|
||||
#if QT_VERSION < 0x060000
|
||||
/*
|
||||
* qt5/QtWidgets/qsizepolicy.h
|
||||
* Qt5 header file issue under c++ 20
|
||||
*
|
||||
* warning: bitwise operation between different enumeration types
|
||||
* ‘QSizePolicy::Policy’ and ‘QSizePolicy::PolicyFlag’
|
||||
* is deprecated [-Wdeprecated-enum-enum-conversion]
|
||||
*/
|
||||
#if defined(__GNUC__)
|
||||
#pragma GCC diagnostic ignored "-Wdeprecated-enum-enum-conversion"
|
||||
#endif
|
||||
#if defined(__clang__)
|
||||
#pragma clang diagnostic ignored "-Wdeprecated-enum-enum-conversion"
|
||||
#endif
|
||||
#endif /* QT_VERSION < 0x060000 */
|
||||
#endif /* __cplusplus >= 202002L */
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/*qt_pre.h*/
|
||||
|
||||
|
||||
Reference in New Issue
Block a user