Merge branch 'cxx20-warnings'

Fix more C++20 warnings about incompatible enums.

See #22683.
This commit is contained in:
Vadim Zeitlin 2022-08-03 17:27:26 +02:00
commit 6fcca0c275
4 changed files with 59 additions and 10 deletions

View file

@ -88,6 +88,10 @@ jobs:
skip_samples: true
use_asan: true
use_xvfb: true
- name: Ubuntu 22.04 wxGTK C++20
runner: ubuntu-22.04
configure_flags: --with-cxx=20
skip_samples: true
- name: Ubuntu 18.04 wxX11
runner: ubuntu-18.04
configure_flags: --with-x11 --enable-pch --disable-stc

View file

@ -1465,12 +1465,21 @@ enum wxBorder
Elements of these enums can be combined with each other when using
wxSizer::Add() overload not using wxSizerFlags.
*/
wxALLOW_COMBINING_ENUMS(wxAlignment, wxBorder)
wxALLOW_COMBINING_ENUMS(wxAlignment, wxDirection)
wxALLOW_COMBINING_ENUMS(wxAlignment, wxGeometryCentre)
wxALLOW_COMBINING_ENUMS(wxAlignment, wxSizerFlagBits)
wxALLOW_COMBINING_ENUMS(wxAlignment, wxStretch)
wxALLOW_COMBINING_ENUMS(wxAlignment, wxBorder)
wxALLOW_COMBINING_ENUMS(wxDirection, wxStretch)
wxALLOW_COMBINING_ENUMS(wxBorder, wxDirection)
wxALLOW_COMBINING_ENUMS(wxBorder, wxGeometryCentre)
wxALLOW_COMBINING_ENUMS(wxBorder, wxSizerFlagBits)
wxALLOW_COMBINING_ENUMS(wxBorder, wxStretch)
wxALLOW_COMBINING_ENUMS(wxDirection, wxGeometryCentre)
wxALLOW_COMBINING_ENUMS(wxDirection, wxStretch)
wxALLOW_COMBINING_ENUMS(wxDirection, wxSizerFlagBits)
wxALLOW_COMBINING_ENUMS(wxGeometryCentre, wxSizerFlagBits)
wxALLOW_COMBINING_ENUMS(wxGeometryCentre, wxStretch)
wxALLOW_COMBINING_ENUMS(wxSizerFlagBits, wxStretch)
/* ---------------------------------------------------------------------------- */
/* Window style flags */

View file

@ -71,12 +71,12 @@ static void
CheckMatch(const char* pattern,
const char* text,
const char* expected = NULL,
int flags = wxRE_DEFAULT)
int compileFlags = wxRE_DEFAULT,
int matchFlags = 0)
{
int compileFlags = flags & ~(wxRE_NOTBOL | wxRE_NOTEOL);
int matchFlags = flags & (wxRE_NOTBOL | wxRE_NOTEOL);
INFO( "Pattern: " << pattern << FlagStr(flags) << ", match: " << text );
INFO( "Pattern: "
<< pattern << FlagStr(static_cast<int>(compileFlags) | matchFlags)
<< ", match: " << text );
wxRegEx re(pattern, compileFlags);
if ( !re.IsValid() )
@ -104,7 +104,7 @@ CheckMatch(const char* pattern,
CHECK( re.GetMatch(text, i) == tkz.GetNextToken() );
}
if ((flags & wxRE_NOSUB) == 0)
if ((compileFlags & wxRE_NOSUB) == 0)
CHECK(re.GetMatchCount() == i);
}
@ -124,8 +124,8 @@ TEST_CASE("wxRegEx::Match", "[regex][match]")
CheckMatch("^[A-Z].*$", "AA\nbb\nCC", "AA\nbb\nCC");
CheckMatch("^[A-Z].*$", "AA\nbb\nCC", "AA", wxRE_NEWLINE);
CheckMatch("^[a-z].*$", "AA\nbb\nCC", "bb", wxRE_NEWLINE);
CheckMatch("^[A-Z].*$", "AA\nbb\nCC", "CC", wxRE_NEWLINE | wxRE_NOTBOL);
CheckMatch("^[A-Z].*$", "AA\nbb\nCC", NULL, wxRE_NEWLINE | wxRE_NOTBOL | wxRE_NOTEOL);
CheckMatch("^[A-Z].*$", "AA\nbb\nCC", "CC", wxRE_NEWLINE, wxRE_NOTBOL);
CheckMatch("^[A-Z].*$", "AA\nbb\nCC", NULL, wxRE_NEWLINE, wxRE_NOTBOL | wxRE_NOTEOL);
CheckMatch("([[:alpha:]]+) ([[:alpha:]]+) ([[:digit:]]+).* ([[:digit:]]+)$",
"Fri Jul 13 18:37:52 CEST 2001",
"Fri Jul 13 18:37:52 CEST 2001\tFri\tJul\t13\t2001");

View file

@ -447,3 +447,39 @@ TEST_CASE_METHOD(BoxSizerTestCase, "BoxSizer::Replace", "[sizer]")
m_sizer->AddSpacer(1);
m_sizer->Replace(0, new wxSizerItem(new wxWindow(m_win, wxID_ANY)));
}
TEST_CASE("Sizer::CombineFlags", "[sizer]")
{
// This is a compile-time test which simply verifies that we can combine
// all the different flags without getting any warnings about doing it --
// as would have been the case when using C++20 or later if we didn't use
// wxALLOW_COMBINING_ENUMS() for all these enums in wx/defs.h.
//
// These constants belong to the following enums, respectively:
//
// wxALIGN_CENTER wxAlignment
// wxBORDER_NONE wxBorder
// wxLEFT wxDirection
// wxCENTER wxGeometryCentre
// wxFIXED_MINSIZE wxSizerFlagBits
// wxEXPAND wxStretch
//
int n = (wxALIGN_CENTER | wxBORDER_NONE)
| (wxALIGN_CENTER | wxLEFT)
| (wxALIGN_CENTER | wxCENTER)
| (wxALIGN_CENTER | wxFIXED_MINSIZE)
| (wxALIGN_CENTER | wxEXPAND)
| (wxBORDER_NONE | wxLEFT)
| (wxBORDER_NONE | wxCENTER)
| (wxBORDER_NONE | wxFIXED_MINSIZE)
| (wxBORDER_NONE | wxEXPAND)
| (wxLEFT | wxCENTER)
| (wxLEFT | wxFIXED_MINSIZE)
| (wxLEFT | wxEXPAND)
| (wxCENTER | wxFIXED_MINSIZE)
| (wxCENTER | wxEXPAND)
| (wxFIXED_MINSIZE | wxEXPAND)
;
wxUnusedVar(n);
}