comp.lang.ada
 help / color / mirror / Atom feed
* GNAT does not consistently raise an exception to log(0.0)
@ 2013-07-13  0:52 Jerry
  2013-07-13  1:47 ` Anh Vo
                   ` (3 more replies)
  0 siblings, 4 replies; 16+ messages in thread
From: Jerry @ 2013-07-13  0:52 UTC (permalink / raw)


When the following program is built with any of theses compilers:

GNATMAKE GPL 2013 (20130314) (downloaded from AdaCore)
GNATMAKE GPL 2011 (20110419) (downloaded from AdaCore)
GNATMAKE 4.8.0 (Simon Wright's build)

like this:

$ gnatmake -f bomb_log.adb -OX

then if X = 0 (zero) the expected exception is raised and reported thusly:

raised CONSTRAINT_ERROR : a-ngelfu.adb:744 explicit raise

else if X > 0 no exception is raised.


with Ada.Numerics.Long_Elementary_Functions; 
use  Ada.Numerics.Long_Elementary_Functions;
procedure Bomb_Log is
    x : Long_Float;
begin
    x := log(0.0);
end Bomb_Log;


However, under the same conditions as above, the following program raises the exception always:


with Ada.Numerics.Long_Elementary_Functions; 
use  Ada.Numerics.Long_Elementary_Functions;
with Ada.Text_IO;
use  Ada.Text_IO;
procedure Bomb_Log is
    x : Long_Float;
begin
    x := log(0.0);
    Put_Line(Long_Float'Image(x));
end Bomb_Log;


Jerry

P.S. What is the meaning of -O99999 as a gnatmake argument?

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: GNAT does not consistently raise an exception to log(0.0)
  2013-07-13  0:52 GNAT does not consistently raise an exception to log(0.0) Jerry
@ 2013-07-13  1:47 ` Anh Vo
  2013-07-13  2:12   ` Jerry
  2013-07-13  7:26 ` Dmitry A. Kazakov
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 16+ messages in thread
From: Anh Vo @ 2013-07-13  1:47 UTC (permalink / raw)


On Friday, July 12, 2013 5:52:08 PM UTC-7, Jerry wrote:
> When the following program is built with any of theses compilers:
>  
> GNATMAKE GPL 2013 (20130314) (downloaded from AdaCore)
> GNATMAKE GPL 2011 (20110419) (downloaded from AdaCore)
> GNATMAKE 4.8.0 (Simon Wright's build)
> 
> like this:
> 
> $ gnatmake -f bomb_log.adb -OX
 
What does switch -OX do?

Anh Vo



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: GNAT does not consistently raise an exception to log(0.0)
  2013-07-13  1:47 ` Anh Vo
@ 2013-07-13  2:12   ` Jerry
  2013-07-13  2:28     ` Anh Vo
  0 siblings, 1 reply; 16+ messages in thread
From: Jerry @ 2013-07-13  2:12 UTC (permalink / raw)


On Friday, July 12, 2013 6:47:13 PM UTC-7, Anh Vo wrote:
> On Friday, July 12, 2013 5:52:08 PM UTC-7, Jerry wrote:

> What does switch -OX do?
> 
> Anh Vo

Sorry. I was trying to condense the optimization possibilities such as -O0, -O1, -O2, etc. into one item and ended up being unclear.


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: GNAT does not consistently raise an exception to log(0.0)
  2013-07-13  2:12   ` Jerry
@ 2013-07-13  2:28     ` Anh Vo
  2013-07-13  3:33       ` Jerry
  2013-07-14  3:28       ` Jerry
  0 siblings, 2 replies; 16+ messages in thread
From: Anh Vo @ 2013-07-13  2:28 UTC (permalink / raw)


On Friday, July 12, 2013 7:12:44 PM UTC-7, Jerry wrote:
> On Friday, July 12, 2013 6:47:13 PM UTC-7, Anh Vo wrote:
> 
> > On Friday, July 12, 2013 5:52:08 PM UTC-7, Jerry wrote:
>  
> > What does switch -OX do?
>  
> Sorry. I was trying to condense the optimization possibilities such as -O0, -O1, -O2, etc. into one item and ended up being unclear.

I thought the same thing. But, I would like to make it is the case.

I tested on both cases. It worked as expected. I used GNATMAKE GPL 2013 on Windows.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: GNAT does not consistently raise an exception to log(0.0)
  2013-07-13  2:28     ` Anh Vo
@ 2013-07-13  3:33       ` Jerry
  2013-07-14  3:28       ` Jerry
  1 sibling, 0 replies; 16+ messages in thread
From: Jerry @ 2013-07-13  3:33 UTC (permalink / raw)


On Friday, July 12, 2013 7:28:57 PM UTC-7, Anh Vo wrote:

> I tested on both cases. It worked as expected. I used GNATMAKE GPL 2013 on Windows.

I should have mentioned that I'm on OS X 10.8.4.
Jerry


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: GNAT does not consistently raise an exception to log(0.0)
  2013-07-13  0:52 GNAT does not consistently raise an exception to log(0.0) Jerry
  2013-07-13  1:47 ` Anh Vo
@ 2013-07-13  7:26 ` Dmitry A. Kazakov
  2013-07-14  3:34   ` Jerry
  2013-07-14  3:51   ` Jerry
  2013-07-13  7:34 ` Simon Wright
  2013-07-13  9:37 ` AdaMagica
  3 siblings, 2 replies; 16+ messages in thread
From: Dmitry A. Kazakov @ 2013-07-13  7:26 UTC (permalink / raw)


On Fri, 12 Jul 2013 17:52:08 -0700 (PDT), Jerry wrote:

> When the following program is built with any of theses compilers:
> 
> GNATMAKE GPL 2013 (20130314) (downloaded from AdaCore)
> GNATMAKE GPL 2011 (20110419) (downloaded from AdaCore)
> GNATMAKE 4.8.0 (Simon Wright's build)
> 
> like this:
> 
> $ gnatmake -f bomb_log.adb -OX
> 
> then if X = 0 (zero) the expected exception is raised and reported thusly:
> 
> raised CONSTRAINT_ERROR : a-ngelfu.adb:744 explicit raise
> 
> else if X > 0 no exception is raised.
> 
> with Ada.Numerics.Long_Elementary_Functions; 
> use  Ada.Numerics.Long_Elementary_Functions;
> procedure Bomb_Log is
>     x : Long_Float;
> begin
>     x := log(0.0);
> end Bomb_Log;

You should always be careful about bogus IEEE 754 semantics when using
numeric operations. I presume that your machine has Long_Float implemented
by machine's IEEE 754. log returns NaN or -Inf. When you turn optimization
-O2 it slips through. I cannot tell how consistent is that with RM, I
presume it is. Maybe -O0 should not raise Constrant_Error. I am not a
language lawyer.

Anyway, in order to enforce sane numeric semantics you do:

with Ada.Numerics.Long_Elementary_Functions; 
use  Ada.Numerics.Long_Elementary_Functions;
procedure Bomb_Log is
   subtype Proper_Float is Long_Float range Long_Float'Range;
   x : Proper_Float;
begin
   x := log(0.0);
end Bomb_Log;

This should work as expected.

> However, under the same conditions as above, the following program raises
> the exception always:
> 
> with Ada.Numerics.Long_Elementary_Functions; 
> use  Ada.Numerics.Long_Elementary_Functions;
> with Ada.Text_IO;
> use  Ada.Text_IO;
> procedure Bomb_Log is
>     x : Long_Float;
> begin
>     x := log(0.0);
>     Put_Line(Long_Float'Image(x));
> end Bomb_Log;

I suppose that here you get the exception rather from Long_Float'Image,
when it stumbles on NaN or whatever garbage log returned.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: GNAT does not consistently raise an exception to log(0.0)
  2013-07-13  0:52 GNAT does not consistently raise an exception to log(0.0) Jerry
  2013-07-13  1:47 ` Anh Vo
  2013-07-13  7:26 ` Dmitry A. Kazakov
@ 2013-07-13  7:34 ` Simon Wright
  2013-07-14  3:42   ` Jerry
  2013-07-13  9:37 ` AdaMagica
  3 siblings, 1 reply; 16+ messages in thread
From: Simon Wright @ 2013-07-13  7:34 UTC (permalink / raw)


Jerry <lanceboyle@qwest.net> writes:

> $ gnatmake -f bomb_log.adb -OX
>
> then if X = 0 (zero) the expected exception is raised and reported thusly:
>
> raised CONSTRAINT_ERROR : a-ngelfu.adb:744 explicit raise
>
> else if X > 0 no exception is raised.
>
>
> with Ada.Numerics.Long_Elementary_Functions; 
> use  Ada.Numerics.Long_Elementary_Functions;
> procedure Bomb_Log is
>     x : Long_Float;
> begin
>     x := log(0.0);
> end Bomb_Log;

If you compile with -gnatwa (most warnings), the report is

   bomb_log.adb:4:05: warning: variable "x" is assigned but never read
   bomb_log.adb:6:05: warning: useless assignment to "x", value never referenced

and at -O1 or greater the compiler takes the opportunity to eliminate
the call of log, because of

   pragma Pure (Long_Elementary_Functions);

so that the generated code (gnatmake -c -u -f -S bomb_log.adb) is

           .text
           .globl __ada_bomb_log
   __ada_bomb_log:
   LFB1:
           ret

If you change the code to

   procedure Bomb_Log is
       x : Long_Float with Volatile;
   begin
       x := log(0.0);
   end Bomb_Log;

(that's -gnat12, of course, use pragma Volatile (X); otherwise) then
things work as you had expected:

           .text
           .globl __ada_bomb_log
   __ada_bomb_log:
   LFB1:
           subq    $24, %rsp
   LCFI0:
           xorpd   %xmm0, %xmm0
           call    _ada__numerics__long_elementary_functions__log
           movsd   %xmm0, 8(%rsp)
           addq    $24, %rsp
   LCFI1:
           ret

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: GNAT does not consistently raise an exception to log(0.0)
  2013-07-13  0:52 GNAT does not consistently raise an exception to log(0.0) Jerry
                   ` (2 preceding siblings ...)
  2013-07-13  7:34 ` Simon Wright
@ 2013-07-13  9:37 ` AdaMagica
  2013-07-14  3:44   ` Jerry
  3 siblings, 1 reply; 16+ messages in thread
From: AdaMagica @ 2013-07-13  9:37 UTC (permalink / raw)


On Saturday, July 13, 2013 2:52:08 AM UTC+2, Jerry wrote:
> with Ada.Numerics.Long_Elementary_Functions; 
> use  Ada.Numerics.Long_Elementary_Functions;
> procedure Bomb_Log is
>     x : Long_Float;
> begin
>     x := log(0.0);
> end Bomb_Log;
>
> However, under the same conditions as above, the following program raises the exception always:
>
> with Ada.Numerics.Long_Elementary_Functions; 
> use  Ada.Numerics.Long_Elementary_Functions;
> with Ada.Text_IO;
> use  Ada.Text_IO;
> procedure Bomb_Log is
>     x : Long_Float;
> begin
>     x := log(0.0);
>     Put_Line(Long_Float'Image(x));
> end Bomb_Log;

That's easy. In the first version, the compiler optimizes X away, since it's not used for any external effects.

In the second version, you output an invalid value.

See RM on allowed optimizations.

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: GNAT does not consistently raise an exception to log(0.0)
  2013-07-13  2:28     ` Anh Vo
  2013-07-13  3:33       ` Jerry
@ 2013-07-14  3:28       ` Jerry
  2013-07-14 13:35         ` Anh Vo
  1 sibling, 1 reply; 16+ messages in thread
From: Jerry @ 2013-07-14  3:28 UTC (permalink / raw)


On Friday, July 12, 2013 7:28:57 PM UTC-7, Anh Vo wrote:
> I tested on both cases. It worked as expected. I used GNATMAKE GPL 2013 on Windows.

What is "as expected"? Are you seeing different behavior on Windows than I described on OS X?
Jerry

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: GNAT does not consistently raise an exception to log(0.0)
  2013-07-13  7:26 ` Dmitry A. Kazakov
@ 2013-07-14  3:34   ` Jerry
  2013-07-14  3:51   ` Jerry
  1 sibling, 0 replies; 16+ messages in thread
From: Jerry @ 2013-07-14  3:34 UTC (permalink / raw)


On Saturday, July 13, 2013 12:26:18 AM UTC-7, Dmitry A. Kazakov wrote:
> On Fri, 12 Jul 2013 17:52:08 -0700 (PDT), Jerry wrote:
> 
snip
> I suppose that here you get the exception rather from Long_Float'Image,
> when it stumbles on NaN or whatever garbage log returned.

No, the exception is Constraint_Error and it is raised from the log call. Long_Float'Image is capable of reporting -Inf.
> 
> -- 
> Regards,
> Dmitry A. Kazakov
> http://www.dmitry-kazakov.de

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: GNAT does not consistently raise an exception to log(0.0)
  2013-07-13  7:34 ` Simon Wright
@ 2013-07-14  3:42   ` Jerry
  0 siblings, 0 replies; 16+ messages in thread
From: Jerry @ 2013-07-14  3:42 UTC (permalink / raw)


On Saturday, July 13, 2013 12:34:36 AM UTC-7, Simon Wright wrote:
> Jerry writes:
> 
> > $ gnatmake -f bomb_log.adb -OX
> >
> > then if X = 0 (zero) the expected exception is raised and reported thusly:
> >
> > raised CONSTRAINT_ERROR : a-ngelfu.adb:744 explicit raise
> >
> > else if X > 0 no exception is raised.
> >
> >
> > with Ada.Numerics.Long_Elementary_Functions; 
> > use  Ada.Numerics.Long_Elementary_Functions;
> > procedure Bomb_Log is
> >     x : Long_Float;
> > begin
> >     x := log(0.0);
> > end Bomb_Log;
> 
> If you compile with -gnatwa (most warnings), the report is
> 
>    bomb_log.adb:4:05: warning: variable "x" is assigned but never read
>    bomb_log.adb:6:05: warning: useless assignment to "x", value never referenced
> 
> and at -O1 or greater the compiler takes the opportunity to eliminate
> the call of log, because of
> 
>    pragma Pure (Long_Elementary_Functions);
> 
> so that the generated code (gnatmake -c -u -f -S bomb_log.adb) is
> 
>            .text
>            .globl __ada_bomb_log
>    __ada_bomb_log:
>    LFB1:
>            ret

Well, that nails it down, doesn't it.
Interestingly, if I change the program to have a second line with a seond variable y:

with Ada.Numerics.Long_Elementary_Functions; 
use  Ada.Numerics.Long_Elementary_Functions;
procedure Bomb_Log is
    x, y : Long_Float;
begin
    x := log(0.0);
    y := 2.0 * x;
end Bomb_Log;

there is no warning about "x" but the warnings are now about "y" being assigned but not read, and never being referenced. So the optimzizer still sniffs it out. And Constraint_Error is still raised or not raised in excactly the same conditions as in my original post.

> 
> If you change the code to
> 
>    procedure Bomb_Log is
>        x : Long_Float with Volatile;
>    begin
>        x := log(0.0);
>    end Bomb_Log;
> 
> (that's -gnat12, of course, use pragma Volatile (X); otherwise) then
> things work as you had expected:
> 
>            .text
>            .globl __ada_bomb_log
>    __ada_bomb_log:
>    LFB1:
>            subq    $24, %rsp
>    LCFI0:
>            xorpd   %xmm0, %xmm0
>            call    _ada__numerics__long_elementary_functions__log
>            movsd   %xmm0, 8(%rsp)
>            addq    $24, %rsp
>    LCFI1:
>            ret

I'll look into Volitile.

Jerry

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: GNAT does not consistently raise an exception to log(0.0)
  2013-07-13  9:37 ` AdaMagica
@ 2013-07-14  3:44   ` Jerry
  2013-07-15 17:16     ` AdaMagica
  0 siblings, 1 reply; 16+ messages in thread
From: Jerry @ 2013-07-14  3:44 UTC (permalink / raw)


On Saturday, July 13, 2013 2:37:20 AM UTC-7, AdaMagica wrote:
> On Saturday, July 13, 2013 2:52:08 AM UTC+2, Jerry wrote:
> > with Ada.Numerics.Long_Elementary_Functions; 
> > use  Ada.Numerics.Long_Elementary_Functions;
> > procedure Bomb_Log is
> >     x : Long_Float;
> > begin
> >     x := log(0.0);
> > end Bomb_Log;
> >
> > However, under the same conditions as above, the following program raises the exception always:
> >
> > with Ada.Numerics.Long_Elementary_Functions; 
> > use  Ada.Numerics.Long_Elementary_Functions;
> > with Ada.Text_IO;
> > use  Ada.Text_IO;
> > procedure Bomb_Log is
> >     x : Long_Float;
> > begin
> >     x := log(0.0);
> >     Put_Line(Long_Float'Image(x));
> > end Bomb_Log;
> 
> That's easy. In the first version, the compiler optimizes X away, since it's not used for any external effects.

Yes, as Simon has also shown with the generated code differences.
> 
> In the second version, you output an invalid value.
No--I only attempt to output an invalid value. The Put_Line is never executed because the exception is raised before that, at the log(0.0) level.

> See RM on allowed optimizations.

I suppose that would be 11.6(5):
http://www.adaic.org/resources/add_content/standards/12rm/html/RM-11-6.html

Jerry

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: GNAT does not consistently raise an exception to log(0.0)
  2013-07-13  7:26 ` Dmitry A. Kazakov
  2013-07-14  3:34   ` Jerry
@ 2013-07-14  3:51   ` Jerry
  1 sibling, 0 replies; 16+ messages in thread
From: Jerry @ 2013-07-14  3:51 UTC (permalink / raw)


On Saturday, July 13, 2013 12:26:18 AM UTC-7, Dmitry A. Kazakov wrote:
> On Fri, 12 Jul 2013 17:52:08 -0700 (PDT), Jerry wrote:
> 
> > When the following program is built with any of theses compilers:
> > 
> > GNATMAKE GPL 2013 (20130314) (downloaded from AdaCore)
> > GNATMAKE GPL 2011 (20110419) (downloaded from AdaCore)
> > GNATMAKE 4.8.0 (Simon Wright's build)
> > 
> > like this:
> > 
> > $ gnatmake -f bomb_log.adb -OX
> > 
> > then if X = 0 (zero) the expected exception is raised and reported thusly:
> > 
> > raised CONSTRAINT_ERROR : a-ngelfu.adb:744 explicit raise
> > 
> > else if X > 0 no exception is raised.
> > 
> > with Ada.Numerics.Long_Elementary_Functions; 
> > use  Ada.Numerics.Long_Elementary_Functions;
> > procedure Bomb_Log is
> >     x : Long_Float;
> > begin
> >     x := log(0.0);
> > end Bomb_Log;
> 
> You should always be careful about bogus IEEE 754 semantics when using
> numeric operations. I presume that your machine has Long_Float implemented
> by machine's IEEE 754. log returns NaN or -Inf. 

It's Intel hardware. GNAT does not allow the request for log(0.0) to even get to the hardwdare because it special-cases it in a-ngelfu.adb:744:

elsif X = 0.0 then
   raise Constraint_Error;

>When you turn optimization
> -O2 it slips through. I cannot tell how consistent is that with RM, I
> presume it is. Maybe -O0 should not raise Constrant_Error. I am not a
> language lawyer.
> 
> Anyway, in order to enforce sane numeric semantics you do:
> 
> with Ada.Numerics.Long_Elementary_Functions; 
> use  Ada.Numerics.Long_Elementary_Functions;
> procedure Bomb_Log is
>    subtype Proper_Float is Long_Float range Long_Float'Range;
>    x : Proper_Float;
> begin
>    x := log(0.0);
> end Bomb_Log;
> 
> This should work as expected.

I'll look into this, but it messes up a lot of other stuff like the nice stuff in Annex G.3, I suppose.

Jerry
> 
> > However, under the same conditions as above, the following program raises
> > the exception always:
> > 
> > with Ada.Numerics.Long_Elementary_Functions; 
> > use  Ada.Numerics.Long_Elementary_Functions;
> > with Ada.Text_IO;
> > use  Ada.Text_IO;
> > procedure Bomb_Log is
> >     x : Long_Float;
> > begin
> >     x := log(0.0);
> >     Put_Line(Long_Float'Image(x));
> > end Bomb_Log;
> 
> I suppose that here you get the exception rather from Long_Float'Image,
> when it stumbles on NaN or whatever garbage log returned.
> 
> -- 
> Regards,
> Dmitry A. Kazakov
> http://www.dmitry-kazakov.de

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: GNAT does not consistently raise an exception to log(0.0)
  2013-07-14  3:28       ` Jerry
@ 2013-07-14 13:35         ` Anh Vo
  2013-07-15  8:25           ` Jerry
  0 siblings, 1 reply; 16+ messages in thread
From: Anh Vo @ 2013-07-14 13:35 UTC (permalink / raw)


On Saturday, July 13, 2013 8:28:36 PM UTC-7, Jerry wrote:
> On Friday, July 12, 2013 7:28:57 PM UTC-7, Anh Vo wrote:
> 
> > I tested on both cases. It worked as expected. I used GNATMAKE GPL 2013 on Windows.
>  
> What is "as expected"? Are you seeing different behavior on Windows than I described on OS X?

Constraint_Error is raised in both cases.

A. Vo



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: GNAT does not consistently raise an exception to log(0.0)
  2013-07-14 13:35         ` Anh Vo
@ 2013-07-15  8:25           ` Jerry
  0 siblings, 0 replies; 16+ messages in thread
From: Jerry @ 2013-07-15  8:25 UTC (permalink / raw)


On Sunday, July 14, 2013 6:35:25 AM UTC-7, Anh Vo wrote:
> On Saturday, July 13, 2013 8:28:36 PM UTC-7, Jerry wrote:
> > On Friday, July 12, 2013 7:28:57 PM UTC-7, Anh Vo wrote:
> > 
> > > I tested on both cases. It worked as expected. I used GNATMAKE GPL 2013 on Windows.
> >  
> > What is "as expected"? Are you seeing different behavior on Windows than I described on OS X?
> 
> Constraint_Error is raised in both cases.
> 
> A. Vo

So GNAT on Windows behaves differently than GNAT on OS X. Interesting.
Jerry


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: GNAT does not consistently raise an exception to log(0.0)
  2013-07-14  3:44   ` Jerry
@ 2013-07-15 17:16     ` AdaMagica
  0 siblings, 0 replies; 16+ messages in thread
From: AdaMagica @ 2013-07-15 17:16 UTC (permalink / raw)


> I suppose that would be 11.6(5):
> 
> http://www.adaic.org/resources/add_content/standards/12rm/html/RM-11-6.html

Yes, exactly, I wasn't in a mood to look it up, sorry.

> No--I only attempt to output an invalid value. The Put_Line is never
> executed because the exception is raised before that, at the log(0.0) level.

That's as expected. X is no longer optimized away, so log (0.0) raises CE.

Christoph


^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2013-07-15 17:16 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-07-13  0:52 GNAT does not consistently raise an exception to log(0.0) Jerry
2013-07-13  1:47 ` Anh Vo
2013-07-13  2:12   ` Jerry
2013-07-13  2:28     ` Anh Vo
2013-07-13  3:33       ` Jerry
2013-07-14  3:28       ` Jerry
2013-07-14 13:35         ` Anh Vo
2013-07-15  8:25           ` Jerry
2013-07-13  7:26 ` Dmitry A. Kazakov
2013-07-14  3:34   ` Jerry
2013-07-14  3:51   ` Jerry
2013-07-13  7:34 ` Simon Wright
2013-07-14  3:42   ` Jerry
2013-07-13  9:37 ` AdaMagica
2013-07-14  3:44   ` Jerry
2013-07-15 17:16     ` AdaMagica

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox