vsapsai added inline comments.

================
Comment at: 
libcxx/test/std/experimental/filesystem/fs.op.funcs/fs.op.last_write_time/last_write_time.pass.cpp:360
-
-    ec = GetTestEC();
-    last_write_time(p, Clock::now());
----------------
EricWF wrote:
> I would really love to keep this test. I think it has the ability to detect 
> incorrect integer arithmetic in `last_write_time` when UBSAN is enabled.
> 
> Could we maybe add another check like `SupportsAlmostMinTime` where that 
> checks `::min() + MicroSec(1)`?
What about nesting removed part in `TimeIsRepresentableByFilesystem` like
```lang=c++
    if (TimeIsRepresentableByFilesystem(new_time)) {
        TEST_CHECK(!ec);
        TEST_CHECK(tt >= new_time);
        TEST_CHECK(tt < new_time + Sec(1));

        ec = GetTestEC();
        last_write_time(p, Clock::now());

        new_time = file_time_type::min() + MicroSec(1);

        last_write_time(p, new_time, ec);
        tt = last_write_time(p);

        if (TimeIsRepresentableByFilesystem(new_time)) {
            TEST_CHECK(!ec);
            TEST_CHECK(tt >= new_time);
            TEST_CHECK(tt < new_time + Sec(1));
        }
    }
```

As for me, I don't like how it looks. So maybe the same approach but with a 
flag like
```lang=c++
    bool supports_min_time = false;
    if (TimeIsRepresentableByFilesystem(new_time)) {
        TEST_CHECK(!ec);
        TEST_CHECK(tt >= new_time);
        TEST_CHECK(tt < new_time + Sec(1));
        supports_min_time = true;
    }

    ec = GetTestEC();
    last_write_time(p, Clock::now());

    new_time = file_time_type::min() + MicroSec(1);

    last_write_time(p, new_time, ec);
    tt = last_write_time(p);

    if (supports_min_time && TimeIsRepresentableByFilesystem(new_time)) {
        TEST_CHECK(!ec);
        TEST_CHECK(tt >= new_time);
        TEST_CHECK(tt < new_time + Sec(1));
    }
```

Yet another option is to leverage that APFS truncates time to supported value, 
something like
```if ((old_tt < new_time + Sec(1)) && 
TimeIsRepresentableByFilesystem(new_time))```
I don't like it because it implicitly relies on time truncation which is not 
guaranteed for all filesystems and it is slightly harder to understand than 
boolean.

How do you like these ideas? `SupportsAlmostMinTime` can also work but I'd like 
to avoid repeating `+ MicroSec(1)` part in 2 places.


https://reviews.llvm.org/D42755



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to