<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/74838>74838</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [libc++] `std::regex` `match_prev_avail` implementation is regressed
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            libc++
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          zufuliu
      </td>
    </tr>
</table>

<pre>
    It seems `match_prev_avail` implementation is regressed after fixed issue #41544.

test cases:
```c++
#include <string>
#include <regex>
#include <iostream>
using namespace std;

int main() {
    string s = "ab";
    string::iterator start = s.begin() + 1;
    regex re0("^");
    cout << "^" << endl;
    cout << regex_search(start, s.end(), re0, regex_constants::match_default) << endl;
    cout << regex_search(start, s.end(), re0, regex_constants::match_not_bol) << endl;
    cout << regex_search(start, s.end(), re0, regex_constants::match_prev_avail) << endl;
    cout << regex_search(start, s.end(), re0, regex_constants::match_prev_avail | regex_constants::match_not_bol) << endl;

    // https://github.com/llvm/llvm-project/issues/41544
    regex re1("^ab");
    cout << "\n\n" << "^ab" << endl;
    cout << regex_search(s, re1, regex_constants::match_default) << endl;
    cout << regex_search(s, re1, regex_constants::match_not_bol) << endl;
    cout << regex_search(s, re1, regex_constants::match_prev_avail) << endl;
    cout << regex_search(s, re1, regex_constants::match_prev_avail | regex_constants::match_not_bol) << endl;

    regex re2("^b");
 cout << "\n\n" << "^b" << endl;
    cout << regex_search(start, s.end(), re2, regex_constants::match_default) << endl;
    cout << regex_search(start, s.end(), re2, regex_constants::match_not_bol) << endl;
    cout << regex_search(start, s.end(), re2, regex_constants::match_prev_avail) << endl;
    cout << regex_search(start, s.end(), re2, regex_constants::match_prev_avail | regex_constants::match_not_bol) << endl;
    return 0;
}
```

GCC (msys2 mingw64 13.2.0):
```
D:\notepad2>g++ -std=c++17 -Wall -Wextra test.cpp

D:\notepad2>a.exe
^
1
0
0
0


^ab
1
0
0
0


^b
1
0
0
0
```

MSVC (2022 17.8.3):
```
D:\notepad2>cl /nologo /EHsc /std:c++17 /W4 test.cpp
test.cpp

D:\notepad2>test.exe
^
1
0
0
0


^ab
1
0
0
0


^b
1
0
0
0
```

llvm-mingw 17.0.6 https://github.com/mstorsjo/llvm-mingw/releases/tag/20231128
```
D:\notepad2>clang++ -std=c++17 -Wall -Wextra test.cpp

D:\notepad2>a.exe
^
1
0
1
1


^ab
1
0
1
1


^b
1
0
1
1
```

based on https://sourceforge.net/p/scintilla/bugs/2405/?page=1#442d/89d2, libc++ (Xcode 15.0.1) on macOS also fails.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUV81u4zYQfhr6QkSghpIsH3RI7KjtoehhgW5vASWNZS4oUiCpNNunL0g5sfO3cZImiwKyaJIznOGnb8gZ4ZzsNWJF8guSbxZi8jtjq3-m7aTktGhM9736zVOHODhKCjYI3-6uRovXV-JaSEUKRuUwKhxQe-Gl0VQ6arG36Bx2VGw9WrqVN9hR6dyElADP0jzLEsI2hJ3Pb4_O01Y4dITvh0jB5qclcBGeeRS41K2aOqSEr523UveEXz41abHHm2fmpHHeohjupicndU-1GNCNokXqfEf4xbGLUns6CKkJlARWlCz3s5RSOvtBHSV8QwmAaAjAnf5BImyOn0uPVnhjqfPC-qjjkgb7w9pwQdN76nEv1CKLEkDyy_CG1T2h1kxhtTXha3ondDuAulPPSsflrxwK2-4IlNEvAmvqEtTd7FToRvu30q3Rzgvt3bypmRgdbsWkfNzEZ9rVxl81Rn263aNA-HmmKVm-B5yDnwRqAjXdeT_GBWK3l343NUlrBgK1Ute3zdlozTdsPYE6BrYjUMfAfsza9I61c2C8xNu1jr8DeY-U3wTyDGX6seQ9zcg7mXqakffT8rV2_jMO3nIG7jjziDKn8uXNdHk2JuEnHX8v2f2o4-8lux94_J1u-p3Um0nnJ6spO_BxuXmQhRzz9Jd1oFg5uO8O6CB1_3eR0ZQnkLBI1IcZzNzdhIl8rY3HUXRA-GU_Zzb0LGYbm32iky7p2VehFD37ijfeChqSo6Qdx2MXHi8mErzBvUi-z2rSuWFPNffe8XB9rcopGk_B9_uXPyN-wABoukzKhL8KtlaFm0obZXoT_l3-6trQRhTPDygSqL9mD9A7Dcso9X-BM17GkYUBTJYUP7rAB-eNdd_M7SUe9QjUFhXG9BtqL3oCNTDgaQrlyd9E6E-mc3qvOQn_H6qcovEU_o0IhY7RD2B3ZrItbo3tMdEY0qQxjLZSe6mUIFA3Ux_whozlQYXXo-iR8E0aSqQMOgJ1ueriQahks4czBM5fremQpnnCkjQca0bTQbR_fKFCOUO3QiqXLLqKdyu-Egus0iUDlvGiLBe7quTdChnky7QB1qV50TKRCV40omlXOZYLWcVvD6xMeZ5lZVI2RcGWvOGiY2nZbEnGcBBSJYFBibH9IiaA1TIreblQokHlYj0JcPA7Xsmbha0i7eLWM6ak8-6wjJdexUr0SC3fhLJzDm3Cz-eirmBvqEUXk1XV23PbuLt_AwAA___Xo0VI">