• Frank Tang's avatar
    Reland "[Temporal] Use double/int32_t instead of int64_t for duration parsing" · 14d9b9a2
    Frank Tang authored
    This is a reland of commit a165e82e
    
    The reason of revert is  SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../../src/objects/js-temporal-objects.cc:3837:22   which is the line
    "nanoseconds_mv = std::round((seconds_mv - std::floor(seconds_mv)) * 1e9);"
    where seconds_mv is a double and nanoseconds_mv is a int32_t
    In this reland, we change the type of nanoseconds_mv to double to avoid the ubsan error.
    
    
    Original change's description:
    > [Temporal] Use double/int32_t instead of int64_t for duration parsing
    >
    > Use double and int32_t instead of int64_t in duration parsing result
    > so we can parse very large duration fields as infinity and throw RangeError in later stages. The three fractional parts can hold up value from 0 to 999,999,999 so we use int32_t to hold it. Other part could be infinity so we use double to hold it. Also rearrange the order of the three int32_t in the struct ParsedISO8601Duration after all the double
    >
    > Bug: v8:11544
    > Change-Id: I7e5b02f7c7bbb60997f1419f016aed61dd3e0d6c
    > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3840761
    > Reviewed-by: Shu-yu Guo <syg@chromium.org>
    > Commit-Queue: Frank Tang <ftang@chromium.org>
    > Cr-Commit-Position: refs/heads/main@{#82754}
    
    Bug: v8:11544
    Change-Id: If8b72cb4912d8b4fc4c286fc856ea59df5cf0bb7
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3858576Reviewed-by: 's avatarAdam Klein <adamk@chromium.org>
    Commit-Queue: Frank Tang <ftang@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#83090}
    14d9b9a2
temporal-parser.h 6.66 KB