On Sat, 16 Nov 2024 at 11:20, Luca Bacci <luca.bacci...@gmail.com> wrote: > > This is both a performance optimization and a partial fix for > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98723. > > This commit fixes the issue for bracket expressions that do not > depend on the locale's collation facet. Examples: > > * Character ranges ([a-z]) when std::regex::collate is not set > * Character classes ([:alnum:]) > * Individual characters ([abc])
I've pushed this to trunk now, thanks for the patch. > > Signed-off-by: Luca Bacci <luca.bacci...@gmail.com> > --- > libstdc++-v3/include/bits/regex_compiler.tcc | 11 +++++++---- > 1 file changed, 7 insertions(+), 4 deletions(-) > > diff --git a/libstdc++-v3/include/bits/regex_compiler.tcc > b/libstdc++-v3/include/bits/regex_compiler.tcc > index 3c6cb6649df..615ada4e377 100644 > --- a/libstdc++-v3/include/bits/regex_compiler.tcc > +++ b/libstdc++-v3/include/bits/regex_compiler.tcc > @@ -608,10 +608,13 @@ namespace __detail > return true; > if (_M_traits.isctype(__ch, _M_class_set)) > return true; > - if (std::find(_M_equiv_set.begin(), _M_equiv_set.end(), > - _M_traits.transform_primary(&__ch, &__ch+1)) > - != _M_equiv_set.end()) > - return true; > + if (!_M_equiv_set.empty()) > + { > + auto __x = _M_traits.transform_primary(&__ch, &__ch+1); > + auto __p = std::find(_M_equiv_set.begin(), _M_equiv_set.end(), > __x); > + if (__p != _M_equiv_set.end()) > + return true; > + } > for (auto& __it : _M_neg_class_set) > if (!_M_traits.isctype(__ch, __it)) > return true; > -- > 2.47.0 >