diff --git a/cpp/ql/test/library-tests/regex/locations.expected b/cpp/ql/test/library-tests/regex/locations.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/cpp/ql/test/library-tests/regex/locations.ql b/cpp/ql/test/library-tests/regex/locations.ql new file mode 100644 index 00000000000..f102f98a1b0 --- /dev/null +++ b/cpp/ql/test/library-tests/regex/locations.ql @@ -0,0 +1,5 @@ +import semmle.code.cpp.regex.RegexTreeView + +from RegExpTerm t, string file, int sl, int sc, int el, int ec +where t.isRootTerm() and t.hasLocationInfo(file, sl, sc, el, ec) +select t, file, sl, sc, el, ec diff --git a/cpp/ql/test/library-tests/regex/parse.expected b/cpp/ql/test/library-tests/regex/parse.expected index 13d74f0e561..55d22c1b5fd 100644 --- a/cpp/ql/test/library-tests/regex/parse.expected +++ b/cpp/ql/test/library-tests/regex/parse.expected @@ -485,3 +485,36 @@ regexp.cpp: # 88| [RegExpNamedCharacterProperty] [:digit:] # 91| [RegExpConstant, RegExpEscape] \u{987 + +# 94| [RegExpConstant, RegExpNormalChar] a + +# 94| [RegExpSequence] a\nb +#-----| 0 -> [RegExpConstant, RegExpNormalChar] a +#-----| 1 -> [RegExpConstant, RegExpEscape] \n +#-----| 2 -> [RegExpConstant, RegExpNormalChar] b + +# 94| [RegExpConstant, RegExpEscape] \n + +# 94| [RegExpConstant, RegExpNormalChar] b + +# 95| [RegExpConstant, RegExpNormalChar] abc + +# 96| [RegExpConstant, RegExpNormalChar] abc + +# 97| [RegExpConstant, RegExpNormalChar] abc + +# 98| [RegExpConstant, RegExpNormalChar] abc + +# 99| [RegExpConstant, RegExpNormalChar] abc + +# 100| [RegExpConstant, RegExpNormalChar] abc + +# 101| [RegExpConstant, RegExpNormalChar] abc + +# 102| [RegExpConstant, RegExpNormalChar] abc + +# 103| [RegExpConstant, RegExpNormalChar] abc + +# 104| [RegExpConstant, RegExpNormalChar] abc + +# 105| [RegExpConstant, RegExpNormalChar] abc diff --git a/cpp/ql/test/library-tests/regex/regexp.cpp b/cpp/ql/test/library-tests/regex/regexp.cpp index d0ba8099db5..63bb73d3244 100644 --- a/cpp/ql/test/library-tests/regex/regexp.cpp +++ b/cpp/ql/test/library-tests/regex/regexp.cpp @@ -4,9 +4,9 @@ namespace std { template class basic_regex { public: - basic_regex(const char *s) {} - basic_regex(const char *s, int flags) {} - basic_regex &assign(const char *s) { return *this; } + basic_regex(const CharT *s) {} + basic_regex(const CharT *s, int flags) {} + basic_regex &assign(const CharT *s) { return *this; } }; typedef basic_regex regex; } // namespace std @@ -89,3 +89,17 @@ std::regex r_posix4("[:digit:]"); // unicode std::regex r_uni("\\u{9879}"); + +// String literal spellings for location tests +std::regex r_loc_plain("a\\nb"); +std::basic_regex r_loc_L(L"abc"); +std::basic_regex r_loc_u8(u8"abc"); +std::basic_regex r_loc_u(u"abc"); +std::basic_regex r_loc_U(U"abc"); +std::regex r_loc_R(R"(abc)"); +std::basic_regex r_loc_LR(LR"(abc)"); +std::basic_regex r_loc_u8R(u8R"(abc)"); +std::basic_regex r_loc_uR(uR"(abc)"); +std::basic_regex r_loc_UR(UR"(abc)"); +std::regex r_loc_Rx(R"x(abc)x"); +std::regex r_loc_Rfoo(R"foo(abc)foo"); diff --git a/cpp/ql/test/library-tests/regex/regexp.expected b/cpp/ql/test/library-tests/regex/regexp.expected index 6b2409e7c7c..9cdc2743842 100644 --- a/cpp/ql/test/library-tests/regex/regexp.expected +++ b/cpp/ql/test/library-tests/regex/regexp.expected @@ -186,6 +186,21 @@ term | regexp.cpp:85:37:85:37 | f | RegExpConstant,RegExpNormalChar | | regexp.cpp:88:22:88:30 | [:digit:] | RegExpNamedCharacterProperty | | regexp.cpp:91:19:91:24 | \\u{987 | RegExpConstant,RegExpEscape | +| regexp.cpp:94:25:94:25 | a | RegExpConstant,RegExpNormalChar | +| regexp.cpp:94:25:94:28 | a\\nb | RegExpSequence | +| regexp.cpp:94:26:94:27 | \\n | RegExpConstant,RegExpEscape | +| regexp.cpp:94:28:94:28 | b | RegExpConstant,RegExpNormalChar | +| regexp.cpp:95:36:95:38 | abc | RegExpConstant,RegExpNormalChar | +| regexp.cpp:96:34:96:36 | abc | RegExpConstant,RegExpNormalChar | +| regexp.cpp:97:37:97:39 | abc | RegExpConstant,RegExpNormalChar | +| regexp.cpp:98:37:98:39 | abc | RegExpConstant,RegExpNormalChar | +| regexp.cpp:99:21:99:23 | abc | RegExpConstant,RegExpNormalChar | +| regexp.cpp:100:37:100:39 | abc | RegExpConstant,RegExpNormalChar | +| regexp.cpp:101:35:101:37 | abc | RegExpConstant,RegExpNormalChar | +| regexp.cpp:102:38:102:40 | abc | RegExpConstant,RegExpNormalChar | +| regexp.cpp:103:38:103:40 | abc | RegExpConstant,RegExpNormalChar | +| regexp.cpp:104:22:104:24 | abc | RegExpConstant,RegExpNormalChar | +| regexp.cpp:105:24:105:26 | abc | RegExpConstant,RegExpNormalChar | regExpNormalCharValue | regexp.cpp:18:19:18:21 | abc | abc | | regexp.cpp:21:20:21:20 | a | a | @@ -266,3 +281,17 @@ regExpNormalCharValue | regexp.cpp:85:35:85:35 | a | a | | regexp.cpp:85:37:85:37 | f | f | | regexp.cpp:91:19:91:24 | \\u{987 | \u0987 | +| regexp.cpp:94:25:94:25 | a | a | +| regexp.cpp:94:26:94:27 | \\n | \n | +| regexp.cpp:94:28:94:28 | b | b | +| regexp.cpp:95:36:95:38 | abc | abc | +| regexp.cpp:96:34:96:36 | abc | abc | +| regexp.cpp:97:37:97:39 | abc | abc | +| regexp.cpp:98:37:98:39 | abc | abc | +| regexp.cpp:99:21:99:23 | abc | abc | +| regexp.cpp:100:37:100:39 | abc | abc | +| regexp.cpp:101:35:101:37 | abc | abc | +| regexp.cpp:102:38:102:40 | abc | abc | +| regexp.cpp:103:38:103:40 | abc | abc | +| regexp.cpp:104:22:104:24 | abc | abc | +| regexp.cpp:105:24:105:26 | abc | abc |