[lldb] Fix printf formatting of std::time_t seconds (#81078)

This formatter
https://github.com/llvm/llvm-project/pull/78609
was originally passing the signed seconds (which can refer to times in
the past) with an unsigned printf formatter, and had tests that expected
to see negative values from the printf which always failed on macOS. I'm
not clear how they ever passed on any platform.

Fix the printf to print seconds as a signed value, and re-enable the
tests.
This commit is contained in:
Jason Molenda 2024-02-08 09:16:12 -08:00 committed by GitHub
parent bdde5f9bea
commit f219cda7bd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 17 additions and 19 deletions

View File

@ -1108,7 +1108,7 @@ bool lldb_private::formatters::LibcxxChronoSysSecondsSummaryProvider(
const std::time_t seconds = ptr_sp->GetValueAsSigned(0);
if (seconds < chrono_timestamp_min || seconds > chrono_timestamp_max)
stream.Printf("timestamp=%" PRIu64 " s", static_cast<uint64_t>(seconds));
stream.Printf("timestamp=%" PRId64 " s", static_cast<int64_t>(seconds));
else {
std::array<char, 128> str;
std::size_t size =
@ -1116,8 +1116,8 @@ bool lldb_private::formatters::LibcxxChronoSysSecondsSummaryProvider(
if (size == 0)
return false;
stream.Printf("date/time=%s timestamp=%" PRIu64 " s", str.data(),
static_cast<uint64_t>(seconds));
stream.Printf("date/time=%s timestamp=%" PRId64 " s", str.data(),
static_cast<int64_t>(seconds));
}
return true;

View File

@ -54,17 +54,16 @@ class LibcxxChronoDataFormatterTestCase(TestBase):
substrs=["ss_0 = date/time=1970-01-01T00:00:00Z timestamp=0 s"],
)
# FIXME disabled temporarily, macOS is printing this as an unsigned?
#self.expect(
# "frame variable ss_neg_date_time",
# substrs=[
# "ss_neg_date_time = date/time=-32767-01-01T00:00:00Z timestamp=-1096193779200 s"
# ],
#)
#self.expect(
# "frame variable ss_neg_seconds",
# substrs=["ss_neg_seconds = timestamp=-1096193779201 s"],
#)
self.expect(
"frame variable ss_neg_date_time",
substrs=[
"ss_neg_date_time = date/time=-32767-01-01T00:00:00Z timestamp=-1096193779200 s"
],
)
self.expect(
"frame variable ss_neg_seconds",
substrs=["ss_neg_seconds = timestamp=-1096193779201 s"],
)
self.expect(
"frame variable ss_pos_date_time",
@ -77,11 +76,10 @@ class LibcxxChronoDataFormatterTestCase(TestBase):
substrs=["ss_pos_seconds = timestamp=971890963200 s"],
)
# FIXME disabled temporarily, macOS is printing this as an unsigned?
#self.expect(
# "frame variable ss_min",
# substrs=["ss_min = timestamp=-9223372036854775808 s"],
#)
self.expect(
"frame variable ss_min",
substrs=["ss_min = timestamp=-9223372036854775808 s"],
)
self.expect(
"frame variable ss_max",
substrs=["ss_max = timestamp=9223372036854775807 s"],