[PATCH] D26136: Protect exceptional path under libcpp-no-exceptions
Roger Ferrer Ibanez via cfe-commits
cfe-commits at lists.llvm.org
Mon Oct 31 03:08:30 PDT 2016
rogfer01 added inline comments.
================
Comment at: test/std/strings/basic.string/string.access/at.pass.cpp:41
+ const S& cs = s;
+ if (pos < cs.size())
+ {
----------------
rmaprath wrote:
> For the cases where an exception //should've been// thrown, are we not entering the **undefined** domain at this point?
>
> What if instead, we define two versions of the `test()` function? one containing the current code as-is, and the other only handles the cases where exceptions are not expected, and we modify the `main()` function below so that the correct `test()` case is invoked depending on the presence / absence of exceptions? It's a bit more cumbersome than the current setup, but I'm not totally happy about treading into the undefined domain (if my understanding above is correct).
If I understand this test correctly, it checks for the `at` member function. While certainly binding a const reference might throw, here it is bound to a lvalue of the same type so no temporary construction should happen.
The original test checks both `s.size()` and `cs.size()`. Given that `size` is a const member function it probably does not matter given that `cs` and `s` are aliased, but see comment below.
================
Comment at: test/std/strings/basic.string/string.access/at.pass.cpp:45
+ assert(cs.at(pos) == cs[pos]);
+ assert(pos < cs.size());
+ }
----------------
This is redundant, maybe I should change the if condition to be `if (pos < s.size())`
https://reviews.llvm.org/D26136
More information about the cfe-commits
mailing list