From 2947ae7d6e13fee8a63fbf5cb14a79878e2f2700 Mon Sep 17 00:00:00 2001 From: Ali Mohammad Pur Date: Tue, 24 Jun 2025 15:48:33 +0200 Subject: [PATCH] LibRegex: Move required bytecode.flatten() outside optimization function Not running the optimization passes should not leave the bytecode in a broken state. Fixes #5146. --- Libraries/LibRegex/RegexMatcher.cpp | 2 ++ Libraries/LibRegex/RegexOptimizer.cpp | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Libraries/LibRegex/RegexMatcher.cpp b/Libraries/LibRegex/RegexMatcher.cpp index dc4486d6a5f..972dda82247 100644 --- a/Libraries/LibRegex/RegexMatcher.cpp +++ b/Libraries/LibRegex/RegexMatcher.cpp @@ -74,6 +74,7 @@ Regex::Regex(ByteString pattern, typename ParserTraits::OptionsT Parser parser(lexer, regex_options); parser_result = parser.parse(); + parser_result.bytecode.flatten(); run_optimization_passes(); @@ -90,6 +91,7 @@ Regex::Regex(regex::Parser::Result parse_result, ByteString pattern, typ : pattern_value(move(pattern)) , parser_result(move(parse_result)) { + parser_result.bytecode.flatten(); run_optimization_passes(); if (parser_result.error == regex::Error::NoError) matcher = make>(this, regex_options | static_cast(parser_result.options.value())); diff --git a/Libraries/LibRegex/RegexOptimizer.cpp b/Libraries/LibRegex/RegexOptimizer.cpp index 472f23d6a67..8e8161a997e 100644 --- a/Libraries/LibRegex/RegexOptimizer.cpp +++ b/Libraries/LibRegex/RegexOptimizer.cpp @@ -28,8 +28,6 @@ using Detail::Block; template void Regex::run_optimization_passes() { - parser_result.bytecode.flatten(); - rewrite_with_useless_jumps_removed(); auto blocks = split_basic_blocks(parser_result.bytecode);