[PATCH] D16467: [libcxx] re.results.form: Format out-of-range subexpression references as null

Duncan P. N. Exon Smith via cfe-commits cfe-commits at lists.llvm.org
Mon Jan 25 10:19:34 PST 2016


> On 2016-Jan-25, at 08:49, Marshall Clow <mclow.lists at gmail.com> wrote:
> 
> mclow.lists added inline comments.
> 
> ================
> Comment at: include/regex:5390
> @@ -5389,3 +5389,3 @@
>                     size_t __i = *__fmt_first - '0';
> -                    __out = _VSTD::copy(__matches_[__i].first,
> -                                       __matches_[__i].second, __out);
> +                    if (__i < __matches_.size()) {
> +                        __out = _VSTD::copy(__matches_[__i].first,
> ----------------
> A better idea.  
> Replace this code:
>     __out = _VSTD::copy(__matches_[__i].first, __matches_[__i].second, __out);
> with:
>     __out = _VSTD::copy((*this)[__i].first, (*this)[__i].second, __out);
> 
> `match_results::operator[]` already has the logic to do something with out of range indexes. 
> 

Yes, that's way better.  I'll update the patch.

> 
> ================
> Comment at: include/regex:5444
> @@ -5441,3 +5443,3 @@
>                         }
> -                        __out = _VSTD::copy(__matches_[__i].first,
> -                                           __matches_[__i].second, __out);
> +                        if (__i < __matches_.size()) {
> +                            __out = _VSTD::copy(__matches_[__i].first,
> ----------------
> Same as above.
> 
> ================
> Comment at: test/std/re/re.results/re.results.form/form1.pass.cpp:61
> @@ +60,3 @@
> +        assert(r == out + 54);
> +        assert(std::string(out) == "prefix: ab, match: cdefghi, suffix: jk, m[1]: , m[2]: ");
> +    }
> ----------------
> Keep the tests.
> 
> 
> http://reviews.llvm.org/D16467
> 
> 
> 



More information about the cfe-commits mailing list