[LLVMbugs] [Bug 11118] New: regex does not handle (?=^|[\n\r]) correctly

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Wed Oct 12 04:48:57 PDT 2011


           Summary: regex does not handle (?=^|[\n\r]) correctly
           Product: libc++
           Version: unspecified
          Platform: Macintosh
        OS/Version: MacOS X
            Status: NEW
          Severity: normal
          Priority: P
         Component: All Bugs
        AssignedTo: hhinnant at apple.com
        ReportedBy: jonathan.sauer at gmx.de
                CC: llvmbugs at cs.uiuc.edu

The following program, intended to search for #include directives in a string,
compiles using clang r141771 and libc++ r141771, but does not produce the
intended result:

#include <regex>

static const std::regex   

static const std::string    s = 
    "#include <A.glsl>\n"
    "attribute vec3    vertexTex0;\n"
    "//#include <DontFindThisOne.glsl>\n"
    "uniform mat4    mvp;\n"
    "#include <shaders/include/B.glsl>";

int main(int, char**)
    std::sregex_iterator        it(s.begin(), s.end(), INCLUDE_REGEXP);
    std::sregex_iterator const    end;
    if (it == end)
        std::printf("Not found\n");
        while (it != end)
            std::printf("Found '%s [%s]'\n", it->str().c_str(),

When run, this produces:

Found '#include <A.glsl> [A.glsl]'
Found '#include <DontFindThisOne.glsl> [DontFindThisOne.glsl]'
Found '#include <shaders/include/B.glsl> [shaders/include/B.glsl]'

"DontFindThisOne" is found, even though there are "//" between the beginning of
the line and the "#include".

Turning the predicate into a normal capture (full regexp:
"(^|[\n\r])#include\s*<([^>]+)>") results in the desired result (modulo one
additional capture and thus slightly incorrect output).

Removing the begin-of-line atom (full regexp: "(?=[\n\r])#include\s*<([^>]+)>")
results in no finding at all, even though the last line of <s> should be found.

C.f. the thread starting at

Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.

More information about the llvm-bugs mailing list