HomePhabricator

[libc++] Use __int128_t to represent file_time_type.

Authored by EricWF on Jul 25 2018, 1:51 PM.

Description

[libc++] Use __int128_t to represent file_time_type.

Summary:
The `file_time_type` time point is used to represent the write times for files.
Its job is to act as part of a C++ wrapper for less ideal system interfaces. The
underlying filesystem uses the `timespec` struct for the same purpose.

However, the initial implementation of `file_time_type` could not represent
either the range or resolution of `timespec`, making it unsuitable. Fixing
this requires an implementation which uses more than 64 bits to store the
time point.

I primarily considered two solutions: Using `__int128_t` and using a
arithmetic emulation of `timespec`. Each has its pros and cons, and both
come with more than one complication.

However, after a lot of consideration, I decided on using __int128_t. This patch implements that change.

Please see the FileTimeType Design Document for more information.

Reviewers: mclow.lists, ldionne, joerg, arthur.j.odwyer, EricWF

Reviewed By: EricWF

Subscribers: christof, K-ballo, cfe-commits, BillyONeal

Differential Revision: https://reviews.llvm.org/D49774

llvm-svn: 337960

Details

Committed
EricWFJul 25 2018, 1:51 PM
Reviewer
EricWF
Differential Revision
D49774: [libc++] Use __int128_t to represent file_time_type.
Parents
rG1d4a78ef0422: [DataFormatters] Add formatter for C++17 std::optional.
Branches
Unknown
Tags
Unknown