This revision was automatically updated to reflect the committed changes. Closed by commit rG5814255e1a7d: [lldb] Always round down in NSDate's formatter to match NSDate's builtin format (authored by teemperor). Herald added a project: LLDB. Herald added a subscriber: lldb-commits.
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D83221/new/ https://reviews.llvm.org/D83221 Files: lldb/source/Plugins/Language/ObjC/Cocoa.cpp lldb/test/API/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjCNSDate.py lldb/test/API/functionalities/data-formatter/data-formatter-objc/main.m Index: lldb/test/API/functionalities/data-formatter/data-formatter-objc/main.m =================================================================== --- lldb/test/API/functionalities/data-formatter/data-formatter-objc/main.m +++ lldb/test/API/functionalities/data-formatter/data-formatter-objc/main.m @@ -655,6 +655,14 @@ [NSDate dateWithTimeIntervalSinceReferenceDate: floor([[NSDate date] timeIntervalSinceReferenceDate])]; + NSDate *date_1970_minus_06 = [NSDate dateWithTimeIntervalSince1970:-0.6]; + NSDate *date_1970_minus_05 = [NSDate dateWithTimeIntervalSince1970:-0.5]; + NSDate *date_1970_minus_04 = [NSDate dateWithTimeIntervalSince1970:-0.4]; + + NSDate *date_1970_plus_06 = [NSDate dateWithTimeIntervalSince1970:0.6]; + NSDate *date_1970_plus_05 = [NSDate dateWithTimeIntervalSince1970:0.5]; + NSDate *date_1970_plus_04 = [NSDate dateWithTimeIntervalSince1970:0.4]; + CFAbsoluteTime date1_abs = CFDateGetAbsoluteTime(date1); CFAbsoluteTime date2_abs = CFDateGetAbsoluteTime(date2); CFAbsoluteTime date3_abs = CFDateGetAbsoluteTime(date3); Index: lldb/test/API/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjCNSDate.py =================================================================== --- lldb/test/API/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjCNSDate.py +++ lldb/test/API/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjCNSDate.py @@ -43,6 +43,15 @@ self.expect('frame variable date4_abs', substrs=['1970']) self.expect('frame variable date5_abs', substrs=[now_year]) + # Check that LLDB always follow's NSDate's rounding behavior (which + # is always rounding down). + self.expect_expr("date_1970_minus_06", result_summary="1969-12-31 23:59:59 UTC") + self.expect_expr("date_1970_minus_05", result_summary="1969-12-31 23:59:59 UTC") + self.expect_expr("date_1970_minus_04", result_summary="1969-12-31 23:59:59 UTC") + self.expect_expr("date_1970_plus_06", result_summary="1970-01-01 00:00:00 UTC") + self.expect_expr("date_1970_plus_05", result_summary="1970-01-01 00:00:00 UTC") + self.expect_expr("date_1970_plus_04", result_summary="1970-01-01 00:00:00 UTC") + self.expect('frame variable cupertino home europe', substrs=['@"America/Los_Angeles"', '@"Europe/Rome"', Index: lldb/source/Plugins/Language/ObjC/Cocoa.cpp =================================================================== --- lldb/source/Plugins/Language/ObjC/Cocoa.cpp +++ lldb/source/Plugins/Language/ObjC/Cocoa.cpp @@ -867,7 +867,7 @@ // is generally true and POSIXly happy, but might break if a library vendor // decides to get creative time_t epoch = GetOSXEpoch(); - epoch = epoch + (time_t)date_value; + epoch = epoch + static_cast<time_t>(std::floor(date_value)); tm *tm_date = gmtime(&epoch); if (!tm_date) return false;
Index: lldb/test/API/functionalities/data-formatter/data-formatter-objc/main.m =================================================================== --- lldb/test/API/functionalities/data-formatter/data-formatter-objc/main.m +++ lldb/test/API/functionalities/data-formatter/data-formatter-objc/main.m @@ -655,6 +655,14 @@ [NSDate dateWithTimeIntervalSinceReferenceDate: floor([[NSDate date] timeIntervalSinceReferenceDate])]; + NSDate *date_1970_minus_06 = [NSDate dateWithTimeIntervalSince1970:-0.6]; + NSDate *date_1970_minus_05 = [NSDate dateWithTimeIntervalSince1970:-0.5]; + NSDate *date_1970_minus_04 = [NSDate dateWithTimeIntervalSince1970:-0.4]; + + NSDate *date_1970_plus_06 = [NSDate dateWithTimeIntervalSince1970:0.6]; + NSDate *date_1970_plus_05 = [NSDate dateWithTimeIntervalSince1970:0.5]; + NSDate *date_1970_plus_04 = [NSDate dateWithTimeIntervalSince1970:0.4]; + CFAbsoluteTime date1_abs = CFDateGetAbsoluteTime(date1); CFAbsoluteTime date2_abs = CFDateGetAbsoluteTime(date2); CFAbsoluteTime date3_abs = CFDateGetAbsoluteTime(date3); Index: lldb/test/API/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjCNSDate.py =================================================================== --- lldb/test/API/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjCNSDate.py +++ lldb/test/API/functionalities/data-formatter/data-formatter-objc/TestDataFormatterObjCNSDate.py @@ -43,6 +43,15 @@ self.expect('frame variable date4_abs', substrs=['1970']) self.expect('frame variable date5_abs', substrs=[now_year]) + # Check that LLDB always follow's NSDate's rounding behavior (which + # is always rounding down). + self.expect_expr("date_1970_minus_06", result_summary="1969-12-31 23:59:59 UTC") + self.expect_expr("date_1970_minus_05", result_summary="1969-12-31 23:59:59 UTC") + self.expect_expr("date_1970_minus_04", result_summary="1969-12-31 23:59:59 UTC") + self.expect_expr("date_1970_plus_06", result_summary="1970-01-01 00:00:00 UTC") + self.expect_expr("date_1970_plus_05", result_summary="1970-01-01 00:00:00 UTC") + self.expect_expr("date_1970_plus_04", result_summary="1970-01-01 00:00:00 UTC") + self.expect('frame variable cupertino home europe', substrs=['@"America/Los_Angeles"', '@"Europe/Rome"', Index: lldb/source/Plugins/Language/ObjC/Cocoa.cpp =================================================================== --- lldb/source/Plugins/Language/ObjC/Cocoa.cpp +++ lldb/source/Plugins/Language/ObjC/Cocoa.cpp @@ -867,7 +867,7 @@ // is generally true and POSIXly happy, but might break if a library vendor // decides to get creative time_t epoch = GetOSXEpoch(); - epoch = epoch + (time_t)date_value; + epoch = epoch + static_cast<time_t>(std::floor(date_value)); tm *tm_date = gmtime(&epoch); if (!tm_date) return false;
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits