From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.4 Path: border1.nntp.dca1.giganews.com!border2.nntp.dca1.giganews.com!nntp.giganews.com!usenet.blueworldhosting.com!feeder01.blueworldhosting.com!feeder.erje.net!eu.feeder.erje.net!newsfeed.fsmpi.rwth-aachen.de!eternal-september.org!feeder.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Natasha Kerensikova Newsgroups: comp.lang.ada Subject: Leap second support and ARM 9.6.1p89/2 Date: Tue, 5 Aug 2014 19:47:43 +0000 (UTC) Organization: A noiseless patient Spider Message-ID: Injection-Date: Tue, 5 Aug 2014 19:47:43 +0000 (UTC) Injection-Info: mx05.eternal-september.org; posting-host="76a49b86bc3e16725b7cfca3d85cb4c8"; logging-data="7900"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19yorBZZ1D0milXApib+ezp" User-Agent: slrn/1.0.1 (FreeBSD) Cancel-Lock: sha1:KbXqnhQyaDIP/5lmyn6SyDcmjdo= Xref: number.nntp.dca.giganews.com comp.lang.ada:188161 Date: 2014-08-05T19:47:43+00:00 List-Id: Hello, I've recently came across ARM 9.6.1p89/2 and tried the following function to detect leap second at runtime: function Leap_Second_Support return Boolean is use Ada.Calendar; use Ada.Calendar.Time; Date : Time; begin begin Date := Time_Of (Year => 1990, Month => 12, Day => 31, Hour => 23, Minute => 59, Second => 59, Sub_Second => 0.5, Leap_Second => True, Time_Zone => 0); exception when Time_Error => return False; end; declare Year : Year_Number; Month : Month_Number; Day : Day_Number; Hour : Hour_Number; Minute : Minute_Number; Second : Second_Number; Sub_Second : Second_Duration; Leap_Second : Boolean; begin Split (Date, Year, Month, Day, Hour, Minute, Second, Sub_Second, Leap_Second, 0); pragma Assert (Year = 1990); pragma Assert (Month = 12); pragma Assert (Day = 31); pragma Assert (Hour = 23); pragma Assert (Minute = 59); pragma Assert (Second = 59); pragma Assert (Leap_Second); end; return True; end Leap_Second_Support; I was quite surprised to find that on my platforms (FSF GNAT 4.9.0 on FreeBSD and FSF GNAT 4.8.3 on Fedora), the assertion testing Leap_Second is raised, which means that Leap_Second is ignored instead of raising an exception. I realize that 9.6.1p89/2 is under "Implementation Advice", so I guess that ignoring Leap_Second is allowed by the standard, right? Should I still report it as a bug somewhere? Can I just replace "pragma Assert (Leap_Second)" with "return False;" or is it even more subtle? I don't see anything about the semantics for systems without support for leap seconds, does it means it's undefined behavior? Thanks for your insights, Natasha